第一节 设计总说明
1.1 桁架结构基本信息输入
本程序采用读取文本文件的形式取得结构原始数据,由两个文本文件组成,一个存放杆件信息,另一个存放节点信息。输入格式如下:
bars.txt
(杆件编号),(起点节点编号),(终点节点编号),(杆件EA)
其中,“杆件编号、起点节点编号、终点节点编号”为整形,“杆件EA”为浮点型;
nodes.txt
(节点编号),(节点坐标x),(节点坐标y),(x方向约束),(y方向约束),(x方向荷载),(y方向荷载)
其中,“节点编号”为整形,“节点坐标x、y”为浮点型,“x、y约束”为布尔型(非0为真、即有约束,0为假、即无约束),“x、y荷载”为浮点型,未知的支座反力以 0 代替。
注意:杆件、节点的编号需严格按顺序递增。详见后文。
1.2 结构信息存放
分别读取两个文本的数据后(.Net 中读取文本信息参考.Net 中操作文本文件),考虑这些数据的全局性,采用静态类、静态数组存储。
public static class ClassBasicInfo
{
public static int[,] BarsNodes;//杆件节点编号
public static Single[] LinearStiffness;//杆件刚度
public static Single[,] Coordinate;//节点坐标
public static bool[,] Restraint;//节点约束
public static Single[,] Loads;//节点荷载
public static Single[,] TatalStiffnessMatrix;//总刚度矩阵
public static Single[] TatalDisplacement;//总位移列阵
public static Single[] TatalLoads;//总荷载列阵
public static bool[] TatalRestraint;//总边界条件
}
1.3 单元刚度矩阵
整体坐标下的单元刚度矩阵采用公式:
[K] = EA/L * | cos2 cos sin -cos2 -cos sin |
| sin2 -cos sin -sin2 |
| cos2 cos sin |
| 对称 sin2 |
用一个 Fortran 子例程完成(.Net 与 Fortran 混合编程基础参考.Net(c#) 通过 Fortran 动态链接库,实现混合编程):
[DllImport("FORTRANCAL/MatrixCal.dll")]
public static extern void UnitStiffnessMatrix(ref Single EA, ref Single x1, ref Single x2, ref Single y1, ref Single y2, ref Single K);
参数分别代表:杆件EA,起点横坐标 x1,终点横坐标 x2,起点纵坐标 y1,终点纵坐标 y2,存放矩阵的二维数组 4×4 。
凭借两点四个坐标可以确定 cos sin L 三个量,返回整体坐标下的单刚到 K[,] 中。
1.4 整体刚度矩阵
对应杆件两端节点号存放入整体刚度矩阵中,详见后文。
1.5 总位移列阵、总荷载列阵、总边界列阵
其中,前两者为浮点型一维数组,总边界列阵为布尔型一维数组,维度都为 2 倍的节点数。
1.5 引入边界条件
通过判断 public static bool[] TatalRestraint;//总边界条件 来整合总刚度矩阵,使之可逆。
同时整合 总位移列阵、总荷载列阵,将有约束的(未知反力)的项去除。
详见后文。
1.6 求解基本方程 Ax = b
由 Fortran 计算
A 为引入边界条件整合后的总刚度矩阵,x 为所求的总位移列阵(已整合去除有约束项,后再用总边界列阵还原为 2 倍节点数的数组),b 为总荷载列阵。
线性方程求解参考.Net ( c# ) 与 Fortran 混合编程实例(一):求线性方程组的解。
[DllImport("FORTRANCAL/MatrixCal.dll")]
public static extern void MatrixNi(ref Single A, ref int n);
求总刚度矩阵 A 的逆矩阵
[DllImport("FORTRANCAL/MatrixCal.dll")]
public static extern void MatrixJie(ref Single A_, ref int n, ref Single b, ref Single x);
求得节点关键位移列阵 x
1.7 利用总边界列阵还原总位移列阵,并与奇异总刚度矩阵相乘取得总荷载列阵(包括未知反力)。
矩阵相乘由 Fortran 完成。
[DllImport("FORTRANCAL/MatrixCal.dll")]
public static extern void MatrixChen(ref Single A, ref int n, ref Single b, ref Single x);
1.8 程序方案
开发平台:VS2008 + CVF6
主程序为 windows console application,Main.exe
类库:
PlaceUsingTxt.dll .Net 文件操作,读取文本文件中的原始数据。
Business.dll 主要功能库,包括四个类
ClassBasicInfo 静态类,存放结构原始信息;
ClassGetBasicInfo 调用 PlaceUsingTxt.dll 完成从文本到静态类的数据存储一系列过程;
ClassCalculation 负责取得未引入边界条件的总刚度矩阵,总荷载列阵,总边界列阵;
ClassBoundaryIn 负责引入边界条件,整合总刚度矩阵(使之可逆),总荷载列阵(去除支座反力以 0 代替的项),计算关键位移,并形
成完整的总位移列阵,总荷载列阵,完成整个杆系结构有限元法基本方程构造与解的返回。
MatrixCal.dll Fortran 计算库,存放于相对路径的 FORTRANCAL 文件夹,负责矩阵相关计算。