1、程序需要的主要数据程序需要的主要数据struct FE_TOPOLOGY /定义类型定义类型 long n;/单元总数单元总数 long*t;/t4n 单元的节点编码单元的节点编码;struct FE_TOPOLOGY F_T;/*/*定义结构体变量定义结构体变量F_TF_T ,来存放单元信息。,来存放单元信息。可设为可设为 全局变量。全局变量。如第如第5 5单元的结点编号为单元的结点编号为 F_T.t16 F_T.t16 F_T.t19.F_T.t19.*/*/struct FE_PKMATRIX /定义结构体类型定义结构体类型 int n;/自由度总数,即总刚方程的阶数自由度总数,即总刚方
2、程的阶数 int *i;/in;总总刚刚矩矩阵阵的的索索引引数数组组,即即 主主元元素素在在k中的位置中的位置 double*k;/kin-1+1 变变半半带带宽宽一一维维压压缩缩存存储的总刚矩阵储的总刚矩阵;struct FE_PKMATRIX F_K;/*/*定义结构体变量定义结构体变量F_XF_X ,来存放总刚矩阵的信息。,来存放总刚矩阵的信息。如如*(F_K.i+i),(F_K.i+i),代表下标为代表下标为i i行主元素在压缩存储总刚行主元素在压缩存储总刚F_K.kF_K.k中的位置,中的位置,nd=*(F_X.i+i+1)-*(F_K.i+i)nd=*(F_X.i+i+1)-*(F
3、_K.i+i)代表下标为代表下标为i i行行非非0 0元素的个数。元素的个数。*/struct FE_BOUNDARY /定义结构体类型定义结构体类型int n;/约束总数或结点荷载数约束总数或结点荷载数int*node;/约束对应的结点编号约束对应的结点编号int*attr;/约约 束束 的的 方方 向向 值值;1-x方方 向向;/2-y方向,方向,3转转动方向动方向double*value;/支座沉降值或支座沉降值或 荷载值荷载值;struct FE_BOUNDARY F_U,F_P;/*/*定义结构体变量定义结构体变量F_U,F_PF_U,F_P ,分别来存放边界约束,分别来存放边界约束
4、和结点荷载的信息。和结点荷载的信息。*/struct FE_STRESS /F_S long n;/输出的应力(应变)点总数输出的应力(应变)点总数 double*x;/x2n;相应应力点的坐标相应应力点的坐标 double*s;/s3n,应力(应变)值,应力(应变)值;struct FE_STRESS F_S;/*记录的单元应力(应变)信息,包括每个记录的单元应力(应变)信息,包括每个应力点的位置坐标和三个应力(应变)值。应力点的位置坐标和三个应力(应变)值。*/double MAT5;/定义材料信息定义材料信息double E;/材料弹性模量材料弹性模量double v;/泊松比泊松比do
5、uble t;/厚度厚度double px;/x方向的容重方向的容重double py;/y方向的容重方向的容重平平面面刚刚架架静静力力计计算算程程序序流流程程图图单元循环单元循环单元循环单元循环平平面面刚刚架架静静力力计计算算程程序序流流程程图图单元循环单元循环单元循环单元循环程序模块设计程序模块设计1.short Readdata_4(char*file)读取平面四结点等参元分析需要的所有数读取平面四结点等参元分析需要的所有数据,如结点信息、单元信息、截面信息、据,如结点信息、单元信息、截面信息、边界支座信息、荷载信息、材料信息等;边界支座信息、荷载信息、材料信息等;在此函数中定义全局变量
6、在此函数中定义全局变量F_X,F_T,F_U,F_P,MAT,并从文件中读取相应的数,并从文件中读取相应的数据。据。函数所需参数:函数所需参数:*file为数据文件名。为数据文件名。成功读取数据,函数的返回值为成功读取数据,函数的返回值为0,数据文,数据文件不存在,返回件不存在,返回-1;内存出错,返回;内存出错,返回1。2.short Kindex_4()建立采用建立采用4结点等参元计算平面问题的变带宽一结点等参元计算平面问题的变带宽一维压缩存储的总刚矩阵的索引数组维压缩存储的总刚矩阵的索引数组F_K.i,即,即 总刚矩阵的主元素总刚矩阵的主元素kii被压缩存储后,在被压缩存储后,在F_K.
7、k中的位置。中的位置。定义存储总刚信息的结构体变量定义存储总刚信息的结构体变量F_K,并计算,并计算出总刚矩阵出总刚矩阵F_K.k元素的个数,并为之分配存元素的个数,并为之分配存储单元;储单元;函数需要的数据:结点信息函数需要的数据:结点信息F_X,单元信息,单元信息F_T,均为全局变量;,均为全局变量;返回总刚矩阵的最大半带宽值,如果内存出错,返回总刚矩阵的最大半带宽值,如果内存出错,则返回则返回0。3.void Ekm2d_4()计算变带宽一维压缩存储的总刚度矩阵计算变带宽一维压缩存储的总刚度矩阵F_K.k;所需数据:结点信息所需数据:结点信息F_X,单元信息单元信息F_T,截面信息,截面
8、信息F_AI,材料信息材料信息MAT,总刚索引信息,总刚索引信息F_K,均为全,均为全局变量;局变量;需调用的函数:需调用的函数:void Evdt2d(double*d),计算弹性矩阵,计算弹性矩阵 d5;void Ek2002(double*xy,double*d,double*ek),计算计算4结点等参元的单元刚度矩阵结点等参元的单元刚度矩阵 ek8*8;4.void P_load_4(float*p)计算结构总的荷载向量计算结构总的荷载向量*p;所需数据:结点信息所需数据:结点信息F_X,单元信息单元信息F_T,荷载信息荷载信息F_P,结构自重,均为全局变量;结构自重,均为全局变量;需
9、调用的函数:需调用的函数:void Pbd2002(double*xy,double*pxy,double*ep),计算单元自重引起的等效结点,计算单元自重引起的等效结点荷载;荷载;5.5.void void Zuv2d(struct(struct FE_BOUNDARY u,float*p)FE_BOUNDARY u,float*p)根据边界条件修改刚度方程,主元素乘大根据边界条件修改刚度方程,主元素乘大数法数法(主元素置主元素置1法法););*u:记录边界支座条件的结构体变量;记录边界支座条件的结构体变量;*p:结构总的的荷载向量结构总的的荷载向量6.高斯法解方程组高斯法解方程组int S
10、olvc1(long*n,float*ak,long jn);Solvc1:总刚矩阵三角分解总刚矩阵三角分解.ak=LU(Uji=Lij/Lii);正确返回正确返回1;当主元素;当主元素 if kii=0,返回,返回-i;void Solvc2(float*p,long*n,float*ak,int jn)Solvc2:回代求解回代求解.ak 一维压缩存储的总刚矩阵一维压缩存储的总刚矩阵F_K.k.njn-总刚矩阵索引数组;总刚矩阵索引数组;jn-总刚方程的阶数总刚方程的阶数pjn-荷载向量荷载向量,函数返回时,存放结点位移函数返回时,存放结点位移7.void Str2d_4(double*w
11、,struct FE_STRESS*s)计算所有单元高斯点的应力向量计算所有单元高斯点的应力向量F_S;所需数据:结点位移信息所需数据:结点位移信息*w,单元信息单元信息F_T,节点信息节点信息,F_X,均为全局变量;,均为全局变量;*s,所有单,所有单元高斯点的应力向量;元高斯点的应力向量;调用函数:调用函数:void Str2002(double*xu,double*d,double*p,double*sr),计算,计算4节点等参元节点等参元的单元高斯点应力向量的单元高斯点应力向量。8.void Stn2d_4(double*w,struct FE_STRESS*s)计算所有单元高斯点的应变向量计算所有单元高斯点的应变向量F_S;所需数据:结点位移信息所需数据:结点位移信息*w,单元信息单元信息F_T,节点信息节点信息,F_X,均为全局变量;,均为全局变量;*s,所有单,所有单元高斯点的应变向量;元高斯点的应变向量;调用函数:调用函数:void Stn2002(double*xu,double*d,double*p,double*sr),计算,计算4节点等参元节点等参元的单元高斯点应变向量的单元高斯点应变向量。