有限元编程的c++实现算例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
有限元编程的c++实现算例
1. #include<>
2. #include<>
3.
4.
5. #define ne 3 #define nj 4 #define nz
6 #define npj 0 #define npf
1 #define nj3 1
2 #define dd
6 #define e0 #define
a0 #define i0 #define pi
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]={,,,};
20. double gj[ne+1]={,,,};
21. double mj[ne+1]={,a0,a0,a0};
22. double gx[ne+1]={,i0,i0,i0};
23. int zc[nz+1]={0,1,2,3,10,11,12};
24. double pj[npj+1][3]={{,,}};
25. double pf[npf+1][5]={{0,0,0,0,0},{0,-20,,,}};
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.
36. void jdugd(int);
38. void zb(int);
39. void gdnl(int);
40. void dugd(int);
41.
42.
43. 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.
54. if(npj>0)
55. {
56. for(i=1;i<=npj;i++)
57. { 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. { hz=i;
67. gdnl(hz);
68. e=(int)pf[hz][3];
69. zb(e); for(j=1;j<=6;j++) {
72. pe[j]=;
73. for(k=1;k<=6;k++) {
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[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. for(e=1;e<=ne;e++) {
94. dugd(e); for(i=1;i<=2;i++) {
97. for(ii=1;ii<=3;ii++)
98. {
99. h=3*(i-1)+ii; dh=3*(jm[e][i]-1)+ii; for(j=1;j<=2 ;j++)
102. {
103. for(jj=1;jj<=3;jj++) {
105. l=3*(j-1)+jj; zl=3*(jm[e][j]-1)+jj; dl=zl-dh+ 1; if(dl>0)
109. kz[dh][dl]=kz[dh][dl]+ke[h][l]; }
111. }
112. }
113. }
114. }
115.
116. for(i=1;i<=nz;i++) {
119. z=zc[i]; kz[z][l]=; for(j=2;j<=dd;j++)
122. {
123. kz[z][j]=; }
125. if((z!=1))
126. {
127. if(z>dd)
128. j0=dd;
129. else if(z<=dd)
130. j0=z; for(j=2;j<=j0;j++)
132. kz[z-j+1][j]=;
133. }
134. p[z]=; }
136.
137.
138.
139.
140. for(k=1;k<=nj3-1;k++)
141. {
142. if(nj3>k+dd-1) im=k+dd-1;
144. else if(nj3<=k+dd-1)
145. im=nj3;
146. in=k+1;
147. for(i=in;i<=im;i++)
148. {
149. l=i-k+1;
150. cl=kz[k][l]/kz[k][1]; jn=dd-l+1;
152. for(j=1;j<=jn;j++)
153. {
154. m=j+i-k;
155. kz[i][j]=kz[i][j]-cl*kz[k][m];
156. }
157. p[i]=p[i]-cl*p[k]; }
159. }
160.
161.
162.
163.
164. p[nj3]=p[nj3]/kz[nj3][1]; for(i=nj3-1;i>=1;i--) 166. {
167. if(dd>nj3-i+1)