当前位置:文档之家› 面向对象结构分析软件设计报告

面向对象结构分析软件设计报告

面向对象结构分析软件设计报告

作者051950 李辉道路与铁道工程138********

052085 俞博桥梁与隧道工程138********

051990刘东磊道路与铁道工程139********

注:分工李辉板单元程序、矩阵运算、数据库接口、调试程序、界面及相关文档说明

俞博杆单元与梁单元程序结构修改、分网算法设计与程序编写及相关文档说明

刘东磊部分代码输入、文档说明、算例

目录

一、面向对象设计思想 (1)

二、软件功能 (1)

三、主要程序类定义说明 (1)

四、板单元设计说明 (6)

五、薄板分网程序介绍 (7)

六、数据库接口设计说明 (8)

七、荷载约定 (12)

八、程序总框图 (12)

九、输入数据文件格式说明 (13)

十、文件输出 (14)

十一、算例 (15)

(一)板单元未细化 (16)

(二)板单元细化后 (21)

十二、程序的局限性 (44)

面向对象结构分析软件设计报告

该结构分析软件为《计算力学》课程作业,在前两届同学编制的《刚架计算程序》的基础上进行修改扩展,添加8结点平面等参板单元,使程序能够计算分析框架-剪力墙结构体系。采用面向对象的编程方法,调整程序结构,保留原有合理部分,并且进一步进行对象封装和重载,扩大程序的通用性和易扩展性,以及增大解题规模、优化子程序,添加文件操作、分网处理、图形显示后处理和结果数据库存储及查询接口等模块。

一、面向对象设计思想

1、作为《计算力学》课程的上机作业,旨在加深对该门课程基本理论、方法的理解和应用,算法上应力求简练而到位,而在语法上力求用最基本的C++语言和面向对象的编程方法。

2、按照面向对象的编程方法,将结构中各元素分别抽象为结点类、材料类、荷载类和荷载组类、单元类以及整体结构类。单元类中首先定义单元基类,各种单元,如杆单元类、板单元类均由单元基类派生而来。杆单元类分为桁架单元类、梁单元类和一端铰接梁单元类。板单元类为8结点平面等参板单元类。

3、基类中定义共同的成员变量和成员函数(虚函数),不同的单元类中各自添加成员变量和重载相应成员函数。

4、结点类中,定义结点坐标、结点约束情况和结点自由度排列与编号等信息,并输出约束支座结点信息及支座反力。

5、材料类实现材料特性的读入和输出;荷载类实现荷载特性的读入和输出,计算等效结点荷载并组装荷载向量。

6、结构计算分析用到大量的矩阵运算,故定义了一般矩阵类和稀疏矩阵类,重载了便于矩阵运算的运算符和取、赋值符。稀疏矩阵类定义了对采用变带宽下三角一维存储方式的总刚度矩阵的运算操作,如元素的变带宽下三角一维存取,矩阵的三角分解及方程组的LDLT法求解。

7、各单元类中,实现获取材料参数和单元结点信息;计算单元刚度矩阵和坐标系下的转换,并组装进总刚度矩阵;计算并输出单元内力。

8、整体单元类中,实现原始数据的读入和单元、荷载及材料对象的创建,形成总刚度矩阵,获取荷载向量,求解结点位移,计算单元内力和支座反力。

9、实现分析结果的文件存储操作、分网处理、图形显示后处理和单元信息的数据库存储和查询。

二、软件功能

本软件主要用于计算框架-剪力墙结构体系的杆单元位移、弯矩、内力和剪力墙平面板单元的应力及支座反力。通过输入结构基本信息,如杆件或板单元的结点数、单元数、单元信息、单元结点、支座信息坐标、材料特征、受荷状况等,经静力分析主体程序运行后,显示或输出位移、弯矩、内力或应力以及支座反力。并可结果文件存储操作、图形显示后处理和单元信息的数据库存储和查询。

关于本程序所能计算的框架-剪力墙结构体系的最大规模:理论上可以求解的最大单元数、结点数和最大自由度数为计算机整型数的最大值,但是实际上会受到计算机硬件的影响,不能超出计算机的存储极限。

三、主要程序类定义说明

(修改梁单元类和整体结构类及输入输出,添加矩阵、板单元、数据库等其它类)

1、结点类CNode类

在结点CNode类定义的成员变量如下:

1)int m_nTotalDOF,m_nFreeDOF; //结点总自由度数和结点非约束自由度数

2)CUIntArray m_aiConstrainedNode; //受约束结点号(MFC数组类对象)

3)CByteArray m_aiIsFixedX; //受约束结点的X受约束情况(MFC数组类对象)

4)CByteArray m_aiIsFixedY; //受约束结点的Y受约束情况(MFC数组类对象)

5)CByteArray m_aiIsFixedR; //受约束结点的转角受约束情况(MFC数组类对象)

6)CArray m_adX,m_adY; //结点X、Y坐标值(MFC数组类对象)

7)CArray m_adCurX,m_adCurY,m_adCurR;

//结点当前X、Y坐标值、转角值(MFC数组类对象)

8)CArray m_aiXDOFIndex,m_aiYDOFIndex,m_aiRDOFIndex;

//结点X、Y、转角自由度序列号(MFC数组类对象)

9)CByteArray m_aiType; //结点类型(MFC数组类对象)

10)int m_nNode; //结点数

在结点CNode类定义的成员函数如下:

1)int GetNum(); //获得结点数

2)void OutputSupportReaction(ofstream& fout,const double* adLoadVector); //输出支座反力

3)void Initial(); //成员数组变量初始化

4)int GetType(int iNode); //获取结点类型

5)void SetCurCoordinate(double* adNodeDisp); //设置当前结点坐标

6)void SetConstrainedNodeDescription(int iNode,int iIsFixedX,int iIsFixedY,int iIsFixedR);//设置结点约束描述

7)void OutputConstrainedNodeDescription(ofstream& fout); //输出结点约束描述

8)int GetXDOFIndex(int iNode); //获取结点X向自由度序号

9)int GetYDOFIndex(int iNode); //获取结点Y向自由度序号

10)int GetRDOFIndex(int iNode); //获取结点转角向自由度序号

11)int GetFreeDOF(); //获取结点非约束自由度数

12)int GetTotalDOF(); //获取结点总自由度数

13)double GetX(int iIndex); //获取结点X坐标

14)double GetY(int iIndex); //获取结点Y坐标

15)double GetCurX(int iIndex); //获取结点当前X坐标

16)double GetCurY(int iIndex); //获取结点当前Y坐标

17)double GetCurR(int iIndex); //获取结点当前转角

18)void SetNodeX(int iIndex, double dX); //设置结点X坐标

19)void SetNodeY(int iIndex, double dY); //设置结点Y坐标

20)void SetType(int iIndex,int iType); //设置结点类型

21)void CalcuDOFIndex(); //结点自由度排列和编号

22)void SetNum(int nNode); //设置结点数

23)CNode(); //构造函数

24)virtual ~CNode(); //析构函数

2、材料基类CBaseMaterial类

在材料基类CBaseMaterial类定义的成员变量如下:

1)double m_dE0,m_dMiu,m_dDensity;//弹性模量、泊松比、密度

在材料基类CBaseMaterial类定义的成员函数如下:

1)double GetDensity(); //获取材料密度

2)double GetMiu(); //获取材料泊松比

3)double GetE0(); //获取初始弹性模量

4)virtual double GetE()=0; //获取弹性模量

5)virtual void OutputParameter(ofstream& fout)=0; //输出材料参数

6)virtual void ReadParameter(int &iCurCharPos, CString &sData); //从包含数据的字符串中读入材料参数

7)double ReadDouble(int &iCurCharPos, const CString &sData); //读取双精度浮点数

8)int ReadInt(int& iCurCharPos, const CString &sData); //读取整型数

9)CBaseMaterial();

10)virtual ~CBaseMaterial();

3、荷载类CLoad类

在荷载类CLoad类定义的成员变量如下:

1)int m_iType; //荷载类型

2)int m_iDirect; //荷载方向

3)int m_iLoadedEle; //荷载作用单元

4)int m_iLoadedNode; //荷载作用结点

5)double m_dLoad; //荷载值

6)double m_dPosition,m_dPosition1; //荷载相对位置参数

在荷载类CLoad类定义的成函数如下:

1)double GetLoad(); //获取荷载值

2)int GetLoadedNode(); //获取荷载作用结点

3)void OutputParameter(ofstream& fout); //输出荷载参数

4)void GetLoadDescription(int& iLoadedNode,int& iLoadedEle,double& dLoad,

5)int& iDirect,double& dPosition,double& dPosition1);//获取荷载描述的各项参数

6)void LoadVectorAssemble(double* adLoadVector,double* adDisp);//将荷载组装进荷载向量

7)void ReadParameter(int& iCurCharPos,CString& sData); //从包含数据的字符串中读入荷载参数

8)double ReadDouble(int &iCurCharPos, const CString &sData); //读取双精度浮点数

9)int ReadInt(int& iCurCharPos, const CString &sData); //读取整型数

10)static CNode* m_pNode; //指向结点类对象的指针

11)static CTypedPtrArray* m_papEle; //指向单元类对象的指针

12)static CTypedPtrArray * m_papMaterial; //指向材料类对象指针数组的指针

13)CLoad();

14)virtual ~CLoad();

4、单元基类CBaseElement类

在单元基类CBaseElement类定义的成员变量如下:

1)int m_iMaterialIndex; //对应材料编号

在单元基类CBaseElement类定义的成员函数如下:

1)virtual void OutputParameter(ofstream& fout)=0; //输出单元参数到文件

2)virtual void OutputParameterToDatabase(int loop)=0; //输出单元参数到数据库

3)virtual void OutputInternalForce(ofstream& fout)=0; //输出单元内力到文件

4)virtual void OutputInternalForceToDatabase(int loop)=0; //输出单元内力到数据库

5)virtual int GetElementType()=0; //获取单元类型

6)int GetMaterialIndex(); //获取材料类型

7)virtual void ReadNode(int& iCurCharPos, CString& sData)=0; //从包含数据的字符串中读入单元结点号

8)virtual void ReadParameter(int& iCurCharPos, CString& sData)=0; //从包含数据的字符串中读入单元参数

9)double ReadDouble(int &iCurCharPos, const CString &sData); //读取双精度浮点数

10)int ReadInt(int& iCurCharPos, const CString &sData); //读取整型数

11)virtual void GetNode(int* aiNode,int& nEleNode)=0; //获取结点编号

12)virtual void GetTransferMatrixGCToLC(CMatrix& matT)=0; //获取由整体坐标至局部坐标的转换矩阵

13)virtual void GetStiffness() = 0; //获取单元刚度矩阵

14)virtual void CalcuGKBandWidth(unsigned long* aiGKDiagAdd)=0; //计算总刚度矩阵带宽

15)virtual void StiffAssemble(CSparseMatrix& smatGK)=0; //将单元刚度矩阵组装进总刚度矩阵

16)virtual void InternalForceInitial()=0; //单元内力值初始化

17)virtual void CalcuInternalForce(const double* m_adNodeDisp)=0; //计算单元内力

18)static CNode* m_pNode; //指向结点对象的指针

19)static CTypedPtrArray * m_papMaterial; //指向材料类对象指针数组的指针

20)CBaseElement();

21)virtual ~CBaseElement();

5、整体结构类CGlobalElement类

在整体结构类CGlobalElement类定义的成员变量如下:

1)CSparseMatrix m_smatGK; //结构总刚度矩阵

2)int m_iCurLoadGroup; //当前荷载组索引

3)int m_nKindMaterial; //材料类型总数

4)int m_nEle,m_nNode; //单元数、结点数

5)double *m_adDisp,*m_adLoadVector; //位移向量、荷载向量

6)bool m_bFlagForceAnalyzed; //已做静力分析标识

7)CNode m_Node; //结点对象

8)CTypedPtrArray m_apLoadGroup; //荷载组对象指针数组

9)CTypedPtrArray m_apMaterial; //材料对象指针数组

10)CTypedPtrArray m_apEle; //单元对象指针数组

在整体结构类CGlobalElement类定义的成员函数如下:

1)void DataInput(CString &sData); //读入计算模型数据

2)void Initial(); //成员变量初始化

3)void GetLoadVector(); //获取荷载向量

4)void CalcuGKDiagAddress(); //计算总刚度矩阵对角主元地址

5)void Loading(); //静力加载计算

6)void CalcuSupportReaction(); //计算支座反力

7)void OutputData(ofstream& fout); //计算模型参数和计算结果输出

8)void OutputToDatabase(); //计算模型参数和计算结果输出数据库接口

9)int FindKeyWordsPos(CString& sKeyWords, CString& sData); //从包含数据的字符串中寻找关键词所在位置

10)double ReadDouble(int& iCurCharPos, const CString &sData); //读取双精度浮点数

11)int ReadInt(int& iCurCharPos, const CString &sData); //读取整型数

12)void EmptyDatabase(); //清空数据库

13)CGlobalElement();

14)virtual ~CGlobalElement();

6、矩阵类CMatrix类

在矩阵类CMatrix类定义的成员变量如下:

1)double **m_adValue; //用于开设动态数组,存放元素值

2)int m_nRow; //矩阵行数

3)int m_nCol; //矩阵列数

在矩阵类CMatrix类定义的成函数如下:

1)CMatrix(); //默认构造函数

2)CMatrix(int nRow,int nCol); //自定义构造函数1,定义类时确定行列数

3)CMatrix(int nRow,int nCol,double dBuf); //自定义构造函数1,定义类时确定行列数并赋值

4)CMatrix(const CMatrix &mat); //拷贝构造函数

5)~CMatrix(); //析构函数

6)bool MatInv(); //初等变换法求逆矩阵矩阵

7)CMatrix operator*(const CMatrix&m); //矩阵相乘运算符1

8)CMatrix& operator*=(const CMatrix&m);//矩阵相乘运算符1

9)CMatrix operator*(double dBuf); //矩阵乘以常数运算符2

10)CMatrix& operator*=(double dBuf);//矩阵乘以常数运算符2

11)CMatrix operator+(const CMatrix&m); //矩阵相加运算符1

12)CMatrix& operator+=(const CMatrix&m);//矩阵相加运算符2

13)CMatrix& operator =(double dBuf); //矩阵常数赋值运算符

14)CMatrix& operator=(const CMatrix&m);//矩阵赋值给另一矩阵运算符

15)CMatrix& Trans(const CMatrix&m);//矩阵转置并赋值给另一矩阵

16)void Realloc (int nRow,int nCol); //动态数组内存分配

17)double & operator()(int iRow,int iCol) //矩阵元素赋值和取值

{

return m_adValue[iRow][iCol]; //返回引用

}

18)int GetCol() {return m_nCol;} //获取行数

19)int GetRow() {return m_nRow;} //获取列数

7、稀疏矩阵类CMatrix类

稀疏在矩阵类CMatrix类定义的成员变量如下:

1)bool m_bDecomposed,m_bElementBufEmpty; //矩阵三角分解标识,矩阵元素内存分配标识

2)int m_nRow; //矩阵行数(总纲为稀疏对称矩阵)

3)unsigned long *m_aiDiag; //对角主元地址数组

4)double *m_adValue; //矩阵元素数组

5)double m_dBuf; //临时中间变量

稀疏在矩阵类CMatrix类定义的成员函数如下:

1)double & operator()(int iRow, int iCol); //矩阵元素赋值和取值

2)void ElementBufRealloc(); //矩阵元素内存重新分配

3)void ElementBufEmpty(); //释放矩阵元素所占空间

4)bool Decomposition(int nRow); //矩阵三角分解

5)bool LdltSolve(int nRow,double *adB); //方程组LDLT法求解,方程组右边为单一向量

6)bool LdltSolve(int nRow,CMatrix& m); //方程组LDLT法求解,方程组右边为一向量组

7)void Realloc(int nRow,unsigned long* aiDiag); //对角主元地址重新设置

8)CSparseMatrix();//构造函数1

9)CSparseMatrix(int nRow,unsigned long* aiDiag); //构造函数2

10)virtual ~CSparseMatrix(); //析构函数

11)CSparseMatrix& operator =(const double dBuf); //矩阵常数赋值运算符

12)CSparseMatrix& operator =(CSparseMatrix& sm); //矩阵赋值给另一矩阵运算符

13)CMatrix operator*(CMatrix& m); //稀疏矩阵与矩阵相乘运算符

14)CSparseMatrix& operator*=(const double dBuf); //矩阵乘以常数运算符

15)CSparseMatrix& operator+=(CSparseMatrix& sm); //矩阵相加运算符CPlane8NodeEle

8、8结点平面等参板单元类CPlane8NodeEle类

8结点平面等参板单元类CPlane8NodeEle定义的成员变量如下:

1)int m_aiNode[8]; //单元结点号

2)double m_dThickness; //单元厚度

3)double m_adStressX[9],m_adStressY[9],m_adStressXY[9]; //高斯点上x、y向正应力及剪应力

4)double m_adMainStress[9],m_adMainStress1[9],m_adMainStressAngle[9]; //高斯点上主应力及方向角

5)double m_adStrainX[9],m_adStrainY[9],m_adStrainXY[9];//高斯点上x、y向正应变及剪应变

6)static CMatrix m_matKe; //单元刚度矩阵

7)static CMatrix m_mat0301; //中间变量矩阵(3*1阶)

8)static CMatrix m_mat0303; //中间变量矩阵(3*3阶)

9)static CMatrix m_mat0316; //中间变量矩阵(3*16阶)

10)static CMatrix m_mat1603;

11)static CMatrix m_mat1602;

12)static CMatrix m_mat0216;

13)static CMatrix m_matNodeDisp; //结点位移矩阵

14)static double m_adGaussKxi[9],m_adGaussEta[9]; //高斯积分点母坐标

8结点平面等参板单元类CPlane8NodeEle定义的成员函数如下:

1)void ReadNode(int& iCurCharPos, CString &sData);//读取单元结点号

2)void GetNode(int *aiNode, int& nEleNode); //获取单元结点号和单元结点数

3)virtual void ReadParameter(int &iCurCharPos, CString &sData); //读取单元参数

4)virtual int GetElementType(); //获取单元类型

5)void GetB(int iGuassPoint,CMatrix& matB,double& dJacobi,double& dWeigh); //求高斯点上的应变矩阵

6)virtual void GetD(int iGuassPoint, CMatrix &D); //求高斯点上的弹性矩阵

7)virtual void GetStiffness(); //求单元刚度矩阵

8)virtual void CalcuGKBandWidth(unsigned long* aiGKDiagAdd); //计算总刚度矩阵带宽

9)void GetMainStress(double* adMainStress,double* adMainStress1,double* adMainStressAngle);//获取主应力和主应力方向

10)void GetGaussPtGCoordinate(double* adGaussX,double* adGaussY);//获取高斯点的整体坐标

11)virtual void StiffAssemble(CSparseMatrix& smatGK); //将单元刚度矩阵装入整体刚度矩阵

12)virtual void InternalForceInitial();//单元应力、应变初始化

13)virtual void CalcuInternalForce(const double* adNodeDisp); //计算单元应力、应变值

14)virtual void OutputInternalForce(ofstream &fout); //将应力、应变值输出到文件

15)virtual void OutputInternalForceToDatabase(int loop); //将应力、应变值输出到数据库

16)virtual void OutputParameter(ofstream &fout); //将单元参数输出到文件

17)virtual void OutputParameterToDatabase(int loop); //将单元参数输出到数据库

18)virtual void GetTransferMatrixGCToLC(CMatrix& matT){}; //获取由整体坐标至局部坐标的转换矩阵,在平面板单元类中,该虚函数不起任何作用

19)CPlane8NodeEle();

20)virtual ~CPlane8NodeEle();

四、板单元设计说明

对于平面单元,有多种类型,如三角单元、矩形单元、4结点等参单元和8结点等参单元等。3结点的简单三角形较容易进行网格划分和逼近边界形状,应用比较灵活,但由于单元应力和应变是常数,故精度不高。4结点矩形单元的单元应力和应变是线性变化的,所以计算精度比简单三角形有较大提高,但它不能适应曲线边界和斜边界,其适用性非常有限。而任意四边形的等参单元,既能大大提高计算精度又能很好的适应几何形状不规则的区域和边界。高阶的8结点平面等参单元,不仅比4结点平面等参单元具有更高的计算精度,还能很好的拟合曲线边界。故本次设计采用8结点平面等参单元为对象,建立相应的单元对象类,完善原程序平面结构分析的基本功能,实现由只能分析框架结构到能分析框架-剪力墙结构的功能扩展。

单元刚度矩阵的计算采用效率较高的高斯积分法。参考一些书中建议,采用3×3高斯积分点。8结点平面等参单元的母单元坐标及结点编号如下图所示:

η

η=1

η=-1

ξ

ξ=-1

ξ=1

图4-1 8结点平面等参单元母单元

五、薄板分网程序介绍

设计思路:因为时间比较紧张,本程序只能解决规则的矩形分网,采用了逐行依次的节点编排方法,以5×5的网格划分为例,节点编号,单元编号如下图所示:

171

18219

320421

5

22623

7

24825

9

2610

27

1112

13

14

15

16

343536

3738

3940

4142

4344

515153

5455

5657

5859

6061

686970

7172

7374

7576

7778

858687

8889

9091

9293

9495

2829

303132334546474849506263646566677980

81

82

83

84

5

10152016

1116212

7

1217223

8

1318234

9

141924

图5-1 5×5的网格划分单元与结点

如果有多块板要划分,本程序只能处理以下两种情况:

第n块板

第(n+1) 块板

第n块板

第(n+1) 块板

第一种情况:相邻两块板独立

第二种情况:相邻两块板上、下边重合

图5-2 本程序能处理的多板形式

本设计分网程序只能得到单元对应的结点号(从左下角开始逆时针图5.3),以及每个结点对应的坐标,结点编号是从0开始的。设计分网程序的目的只是简化了板单元、结点信息的输入工作,不包含材料信息,荷载信息等。如果要计算的结构

有杆单元的信息,还要在板单元划分输出的文件基础上进行添加杆单元的相关信息。

19

20

21

363738

29306

单元输出格式:单元编号单元类型结点编号6319结点编号20213038373629

结点编号结点编号结点编号结点编号结点编号结点

编号

图5.3 以上图6号单元为例分网后单元对应的结点号

输入格式参考输入数据文件格式说明。

六、数据库接口设计说明 1、数据库设计

根据结构分析接口需求,选择较通用的Microsoft Access 数据库,建立数据库OOPFE.mdb ,设计相应数据表tbNode 、tbElement 、tbEleResult 。各表具体设计如下:

1)

结点表 表名:tbNod

字段设计如表6-1所示:

表6-1

2)

单元表

表名:tbElement 字段设计如表6-2所示:

表6-2

3)单元内力(应力、应变)表表名:tbEleResult

字段设计如表6-3所示:

表6-3

2、界面设计

软件主界面如下,

图6-1 软件主界面

在主界面的“数据查询”菜单中,点击“单元查询”菜单项,出现如下的单元查询界面,输入单元编号,即可查询相应单元各结点或高斯积分点的计算结果数据。

图6-2 单元查询界面

3、数据库类设计

数据库系统涉及的表是前面数据库设计中的三个表,相对应的数据库类也有3个,并且类中的数据成员包含表中的每个字段信息,成员函数为相应的查询、增加等对表的操作。建立数据库类时,从原有的MFC类继承,充分利用现有功能,而不是从零开始。如果使用MFC ODBC类实现则应该从CRecordset继承,如果使用MFC DAO进行编程则应该从CDaoRecordset 继承。继承的优点是可以利用MFC提供的动态数据交换机制(RFX),方便访问表中各个字段的值。

本数据库系统接口采用MFC ODBC类进行数据库连接口编程,以方便升级为其他的数据库(如Ms SQL Server、Oracle 等)系统。

派生方法:

第一步,创建数据源

在Windows的控制面板中,打开“数据源(ODBC)”应用程序,创建系统数据源“系统DSN”,其ODBC驱动程序为“Driver do Microsoft Access (*.mdb)”,名称命为“OOPFE”,数据库“选择(S)……”指向前面创建的数据库OOPFE.mdb 所在位置。

第二步,创建派生类

在Visual C++中使用ClassWizard创建对应各表的派生类,如结点派生类CNodeRecordset,并选择基类为CRecordset;

数据源“Datasource”中选择ODBC,并选择第一步中创建好的OOPFE数据源。然后选择OOPFE数据源对应的数据库OOPFE.mdb中的相应表,如tbNode表。

针对每个表的派生类如下:

class CNodeRecordset : public CRecordset //结点表

{

}

class CElementRecordset : public CRecordset //单元表

{

}

class CEleResultRecordset : public CRecordset //单元内力表(应力、应变表)

{

}

4、数据库接口功能设计

该数据库系统要求将结点信息、单元信息和单元内力等结果存储到数据库,并实现查询单元内力等功能。对于单元信息存储功能,针对不同的单元类型,在单元基类中建立纯虚函数virtual void OutputParameterToDatabase(int loop)=0和virtual void OutputInternalForceToDatabase(int loop)=0,实现不同单元的统一接口,而具体操作根据单元不同,在各单元由此基类派生而来的单元类中重载该成员函数,实现相应单元及内力等信息存储。在整体结构类中,建立成员函数void CGlobalElement::OutputToDatabase()来实现结点信息的数据库存储,并整体实现相应单元及内力等信息存储。在视图类中建立成员函数void COOPFEView::OnQueryElement(),实现从数据库中提取数据,进行单元内力等的查询功能。(注:由于时间原因,暂未添加结点查询功能。)

七、荷载约定

荷载类中的成员变量用来对荷载情况进行描述,如荷载类型、大小、作用位置和方向等。本程序荷载类中已定义的荷载类型如表7-1所示。

表7-1

八、程序总框图

九、输入数据文件格式说明

程序根据关键所在位置找出对应的数据,而与数据所在的前后位置无关。关键词(关键词中的中文为注释部分,不属于

关键词)和对应的数据内容如下:

关键词:num. of node(结点数量)

结点数

关键词:node type(结点类型) coordinate (结点坐标)

结点编号结点类型(0——2个自由度的结点;1——3个自由度的结点)X坐标Y坐标

…………

关键词:num. constrained node(约束情况描述)

受约束结点数

结点编号X向约束情况Y向约束情况转角向约束情况(0-自由;1-固定)

…………

关键词:num. of element(单元数量)

单元数

关键词:element type(单元类型) node(单元结点号) parameter(单元参数)

单元编号单元类型(0)结点号结点号……(结点数量2个)截面积材料编号(桁架单元参数)

单元编号单元类型(1或2)结点号结点号……(结点数量2个)截面积截面惯性矩材料编号(梁单元参数)单元编号单元类型(3)结点号结点号……(结点数量8个)厚度材料编号(8结点平面单元等参单元参数)(单元类型:0-桁架单元;1-梁单元;2-左端为铰接的梁;3-8结点平面单元)

…………

关键词:num. of material(材料总数)

材料总数

关键词:material parameter(材料参数)

材料编号材料类型(0-材料类型A,1-材料类型B)

弹性模量材料容重(材料类型A)

弹性模量材料容重泊松比(材料类型B)

关键词:num. of load group(荷载组)

荷载组数

关键词:load group 0 (第1荷载组描述)

荷载个数

荷载类型(0-集中荷载)作用结点荷载值作用方向(0-x向,1-y向,2-转角向)

荷载类型(1-梁上集中荷载)作用单元荷载值距左端距离

荷载类型(2-梁上均布荷载)作用单元荷载值距左端距离分布长度

荷载类型(3-梁上三角形分布荷载1)作用单元荷载值距左端距离分布长度

荷载类型(4-梁上三角形分布荷载2)作用单元荷载值距左端距离分布长度

荷载类型(5-梁上集中弯矩)作用单元荷载值距左端距离

荷载类型(6-支座位移)作用结点位移值结点方向

……

关键词:load group 1 (第2荷载组描述)

……

十、文件输出

输出文件可以根据需要指定路径。

输出文件包含以下信息(以及输出格式):

荷载组n作用下计算结果:

结点位移:

结点编号X向位移Y向位移转角位移

……………

单元内力:

单元: …(板单元)

高斯积分点: 0 1 2 3 4 5 6 7 8

X向应变: ………………………(对应8个高斯积分点的值)

Y向应变: ………………………

剪应变………………………

X向应力………………………

Y向应力: ………………………

剪应力………………………

主应力1: ………………………

主应力2: ………………………

主应力1方向: ………………………

…………………………

单元: …(梁单元)

N = …(轴力)

M: ……………………………(分10段、分别输出11个点梁的弯矩)

Q: ……………………………(分10段、分别输出11个点梁的剪力)

Fy: ……………………………(分10段、分别输出11个点梁的挠度)

…………………………

单元: …(桁架杆单元)

N = …(轴力)

…………………………

支座反力:

结点号:…X向反力…Y向反力…转角向反力…

…………………………

十一、算例

本算例为一平面框架-剪力墙结构体系,结构尺寸如下图11-1所示。柱和板与基础固结,左边柱结点受风荷载作用。

图11-1 平面框架-剪力墙结构体系的结构尺寸

(一)板单元未细化

板单元细化前杆件及剪力墙板单元编号如图11-2所示。

图11-2杆件及剪力墙板单元编号(板单元细化前)

输入文件内容如下: num. of node

//结点数量

26

node type coordinate //结点号结点类型结点坐标X Y

0 0 7.000000 0.000000

1 0 8.500000 0.000000

2 0 10.000000 0.000000

3 0 10.00000 1.500000

4 0 10.000000 3.000000

5 0 8.5000000 3.000000

6 0 7.000000 3.000000

7 0 7.000000 1.500000

8 0 10.00000 4.500000

9 0 10.000000 6.000000

10 0 8.500000 6.00000

11 0 7.000000 6.000000

12 0 7.000000 4.500000

13 0 10.00000 7.500000

14 0 10.000000 9.000000

15 0 8.5000000 9.000000

16 0 7.000000 9.000000

17 0 7.000000 7.500000

18 1 5.000000 9.000000

19 1 5.000000 6.000000

20 1 5.000000 3.000000

21 1 5.000000 0.000000

22 1 0.000000 9.000000

23 1 0.000000 6.000000

24 1 0.000000 3.000000

25 1 0.000000 0.000000

num. constrained node //约束情况描述

5

0 1 1 1

1 1 1 1

2 1 1 1

21 1 1 1

25 1 1 1

num. of element //单元数量

15

element type node parameter //单元号单元类型单元结点号单元参数

0 3 0 1 2 3 4 5 6 7 0.1 0

1 3 6 5 4 8 9 10 11 1

2 0.1 0

2 3 11 10 9 13 14 15 16 17 0.1 0

3 1 22 18 0.15 0.003125 1

4 1 23 19 0.1

5 0.003125 1

5 1 24 20 0.15 0.003125 1

6 1 23 22 0.16 0.002133 1

7 1 24 23 0.16 0.002133 1

8 1 25 24 0.16 0.002133 1

9 1 19 18 0.16 0.002133 1

10 1 20 19 0.16 0.002133 1

11 1 21 20 0.16 0.002133 1

12 0 18 16 1.0 1

13 0 19 11 1.0 1

14 0 20 6 1.0 1

num. of material //材料数

2

material parameter //材料参数

0 1

2.6e7 2.5 0.20

1 0

2.6e7 2.5

num. of load group //荷载组数

1

load group 0 //第1荷载组描述

3

22 150.0 0

23 100.0 0

24 50.0 0

静力分析后,显示的结构变形图及弯矩图如图11-3和图11-4。

相关主题
相关文档 最新文档