有限元弹性力学上机报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
弹性力学及有限元基础上机实践报告
指导老师:
班级:机械(茅)101
学号: 1004010510
姓名:
一.程序功能
(1)本程序只用于三节点三角形单元,它可计算平面应力问题,亦可计算平面应变问题。这两类问题用类型码IND来区别:
IND输入0的数据——为解平面应力问题。
IND输入1的数据——为解平面应变问题。
(2)程序中的载荷包括结点载荷和自重载荷两种,如有其他非节点载荷,则应事先换算成等效结点载荷。
(3)支撑方式,可以是在任一结点的水平和数值支撑,支撑数量不限。但平面弹性体至少应具有保证弹性体几何不变性的三个独立的支撑。
(4)弹性体由单一的材料组成,即只有一组E,G,u弹性常数。
(5)弹性体计算简图的厚度是常量。
(6)直要计算机内存允许,本程序对对单元总数,结点总数等没有限制。
(7)本程序输出全部结点位移,对每个但愿输出应力分量,两个主应力及其主平面角。
二.程序中的记号说明
nj结点个数
ne单元个数
nz约束个数
ndd半带宽
ind问题类型码
ind=0平面应力问题
ind=1
nj2位移分量个数
eo弹性模量
un泊松比
gama材料容重比γ
te单元厚度
ae单元面积
jm(ne,3)单元结点码数组
nzc(nz)支承数组
cjz(nj,2)结点坐标数组
pj(npj,2)结点载荷数组
b(3,6)几何矩阵
d(3,3)弹性矩阵
s(3,6)应力矩阵
tkz(nj2,ndd)半带储存的整刚矩阵
eke(6,6)单元刚度矩阵
p(nj2)载荷向量,后来存放结点位移
npj1结点载荷个数加1。是载荷数组的最大行代码
meo任一单元码
iask子程序elest中的形参,它是计算信息码
iask=1求单元面积ae
iask=2求应力矩阵[s]
iask=3求单元刚度[k]
ie,je,me单元meo的三个角点码
cm,bm,cj,bj计算形函数中的常cm,bm,cj,bj
I,j,k,ii,jj循环参数
lh单元行码
ldh半带存储的整体刚度矩阵的行码
l单元列码
lz整体刚度矩阵的列码
ld半带存储的整体刚度矩阵的列码
i1工作单元
pe自重的等效结点荷载
mz支杆相应的位移分量码
jo最大列码
j1工作单元
im最大行码
c系数比值
ld1
m工作单元
wy(6)单元结点位移向量
yl(3)应力向量
sigx
sigy
toxy应力分量“d”x dy 套xy
pyl平均应力
ryl应力圆半径
sig工作单元
sig1
sig2最大、最小主应力
geta1工作单元
geta主平面角
三.子程序名
data输入
elest(meo,iask)
iask=1
iask=2
iask=3
totsti整体刚度矩阵
load荷载向量
suppor支撑条件
solveq位移
stress应力
四.程序流程及框图
此程序采用本人比较熟悉C语言编写。C语言相比于FORTRAN语言拥有更强大的实用编程环境,同时由于提供了指针变量、动态内存分配函数和结构体变量等,使其编写的软件在维护性、可读性和内存利用效率方面具有明显的优势。
1.程序总框图
3
图1 程序总框图
整个程序由一个主调主程序(主函数main())和七个子程序组成,其中数据子程序DATA( )用来接受输入的参数和变量。单刚子程序ELEST( )为含有参数的函数,功能控制参数iask可取1、2、3,分别计算相应单元的面积、应力矩阵和单元刚度矩阵,主程序不直接调用它,而通过总刚子程序、载荷子程序和求应力子程序间接调用。总刚子程序TOTSTI( )用来合成总刚矩阵,载荷子程序LOAD( )用来计算合成载荷,支承子程序SUPPOR( )用来引入约束,解方程子程序SOLVEQ( )用来求解并输出各个结点的位移,求应力子程序STRESS( )用来计算和输出应力、主应力及主平面角。
2.主函数及各子程序流程图
图2 void main( )和void DA TA( )
图4 void TOTSTI( ) 图5 void LOAD( )
图6 void SUPPOR( )
图7 void SOLVEQ( )
五.有限元计算源程序
#include "stdio.h"
#include "math.h"
int nj,ne,nz,ndd,ind,nj2;
int jm[100][3],nzc[200],npj1,npj;
float eo,un,gama,te,ae;
float cjz[100][2],pj[100][2];
float b[3][6],d[3][3],s[3][6],eke[6][6],tkz[200][20],p[200];
void DATA()/*数据输入函数*/
{
int i,j;
printf("please input 6 base data\n");
scanf("%d,%d,%d,%d,%d,%d",&nj,&ne,&nz,&ndd,&npj,&ind);
nj2=nj*2;
npj1=npj+1;
getchar();
printf("please input 4 parameters\n");
scanf("%f,%f,%f,%f",&eo,&un,&gama,&te);
printf("nj=%d,ne=%d,nz=%d,ndd=%d,npj=%d,ind=,%d\n",nj,ne,nz,ndd,npj,ind);
printf("eo=%f,un=%f,gama=%f,te=%f\n",eo,un,gama,te);
getchar();
printf("please input JM matrix\n");
for(i=0;i { for(j=0;j<3;j++) scanf("%d",&jm[i][j]); getchar(); } printf("please input CJZ matrix\n"); for(i=0;i { for(j=0;j<2;j++) scanf("%f",&cjz[i][j]); getchar(); } printf("please input NZC matrix\n"); for(i=0;i scanf("%d",&nzc[i]); getchar(); printf("please input NIZ matrix\n"); for(i=0;i { for(j=0;j<2;j++) scanf("%f",&pj[i][j]); getchar(); } printf("CJZ matrix as follows\n");