有限元编程的c++实现算例

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

有限元编程的c++实现算例

read.pudn./downloads76/doc/fileformat/290377/ganjian.cpp__.htm

1. #include

2. #include

3.

4.

5. #define ne 3//单元数

6. #define nj 4//节点数

7. #define nz 6//支撑数

8. #define npj 0//节点载荷数

9. #define npf 1//非节点载荷数

10. #define nj3 12//节点位移总数

11. #define dd 6//半带宽

12. #define e0 2.1E8//弹性模量

13. #define a0 0.008//截面积

14. #define i0 1.22E-4//单元惯性距

15. #define pi 3.141592654

16.

17.

18. int jm[ne+1][3]={{0,0,0},{0,1,2},{0,2,3},{0,4,3}};/*gghjghg*/

19. double gc[ne+1]={0.0,1.0,2.0,1.0};

20. double gj[ne+1]={0.0,90.0,0.0,90.0};

21. double mj[ne+1]={0.0,a0,a0,a0};

22. double gx[ne+1]={0.0,i0,i0,i0};

23. int zc[nz+1]={0,1,2,3,10,11,12};

24. double pj[npj+1][3]={{0.0,0.0,0.0}};

25. double pf[npf+1][5]={{0,0,0,0,0},{0,-20,1.0,2.0,2.0}};

26. double kz[nj3+1][dd+1],p[nj3+1];

27. double pe[7],f[7],f0[7],t[7][7];

28. double ke[7][7],kd[7][7];

29.

30.

31. //**kz[][]—整体刚度矩阵

32. //**ke[][]—整体坐标下的单元刚度矩阵

33. //**kd[][]—局部坐标下的单位刚度矩阵

34. //**t[][]—坐标变换矩阵

35.

36. //**这是函数声明

37. void jdugd(int);

38. void zb(int);

39. void gdnl(int);

40. void dugd(int);

41.

42.

43. //**主程序开始

44. void main()

45. {

46.int i,j,k,e,dh,h,ii,jj,hz,al,bl,m,l,dl,zl,z,j0;

47.double cl,wy[7];

48.int im,in,jn;

49.

50. //***********************************************

51. //<功能:形成矩阵P>

52. //***********************************************

53.

54.if(npj>0)

55.{

56.for(i=1;i<=npj;i++)

57.{//把节点载荷送入P

58.j=pj[i][2];

59.p[j]=pj[i][1];

60.}

61.}

62.if(npf>0)

63.{

64.for(i=1;i<=npf;i++)

65.{//求固端反力F0

66.hz=i;

67.gdnl(hz);

68.e=(int)pf[hz][3];

69.zb(e);//求单元

70.for(j=1;j<=6;j++)//求坐标变换矩阵T

71.{

72.pe[j]=0.0;

73.for(k=1;k<=6;k++)//求等效节点载荷

74.{

75.pe[j]=pe[j]-t[k][j]*f0[k];

76.}

77.}

78.al=jm[e][1];

79.bl=jm[e][2];

80.p[3*al-2]=p[3*al-2]+pe[1];//将等效节点载荷送到P中

81.p[3*al-1]=p[3*al-1]+pe[2];

82.p[3*al]=p[3*al]+pe[3];

83.p[3*bl-2]=p[3*bl-2]+pe[4];

84.p[3*bl-1]=p[3*bl-1]+pe[5];

85.p[3*bl]=p[3*bl]+pe[6];

86.}

87.}

88.

89.

90.//*************************************************

91.//<功能:生成整体刚度矩阵kz[][]>

92.for(e=1;e<=ne;e++)//按单元循环

93.{

94.dugd(e);//求整体坐标系中的单元刚度矩阵ke

95.for(i=1;i<=2;i++)//对行码循环

96.{

97.for(ii=1;ii<=3;ii++)

98.{

99.h=3*(i-1)+ii;//元素在ke中的行码

100.dh=3*(jm[e][i]-1)+ii;//该元素在KZ中的行码

101.for(j=1;j<=2;j++)

102.{

103.for(jj=1;jj<=3;jj++)//对列码循环

104.{

105.l=3*(j-1)+jj;//元素在ke中的列码

106.zl=3*(jm[e][j]-1)+jj;//该元素在KZ中的行码

107.dl=zl-dh+1;//该元素在KZ*中的行码

108.if(dl>0)

109.kz[dh][dl]=kz[dh][dl]+ke[h][l];//刚度集成

110.}

111.}

112.}

113.}

114.}

115.

116. //**引入边界条件**

117.for(i=1;i<=nz;i++)//按支撑循环

118.{

119.z=zc[i];//支撑对应的位移数

120.kz[z][l]=1.0;//第一列置1

121.for(j=2;j<=dd;j++)

122.{

123.kz[z][j]=0.0;//行置0

124.}

125.if((z!=1))

相关文档
最新文档