有限元編程的c++實(shí)現(xiàn)算例_第1頁
有限元編程的c++實(shí)現(xiàn)算例_第2頁
有限元編程的c++實(shí)現(xiàn)算例_第3頁
有限元編程的c++實(shí)現(xiàn)算例_第4頁
有限元編程的c++實(shí)現(xiàn)算例_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、有限元編程的c+實(shí)現(xiàn)算例   1. #include<stdio.h>      2. #include<math.h>      3.       4.       5. #define ne 3               

2、;                                    /單元數(shù)      6. #define nj 4       &

3、#160;                                           /節(jié)點(diǎn)數(shù)      7. #define n

4、z 6                                                 

5、60; /支撐數(shù)      8. #define npj 0                                         

6、0;        /節(jié)點(diǎn)載荷數(shù)      9. #define npf 1                                  

7、60;               /非節(jié)點(diǎn)載荷數(shù)     10. #define nj3 12                            

8、;                     /節(jié)點(diǎn)位移總數(shù)     11. #define dd 6                      

9、60;                            /半帶寬     12. #define e0 2.1E8               

10、                               /彈性模量     13. #define a0 0.008            &#

11、160;                                  /截面積     14. #define i0 1.22E-4        

12、60;                                    /單元慣性距      15. #define pi 3.141592654    

13、0;                                16.      17.      18. int jmne+13=0,0,0,0,1,2,0,2,3,0,4,3;   

14、          /*gghjghg*/                  19. double gcne+1=0.0,1.0,2.0,1.0;                 

15、                 20. double gjne+1=0.0,90.0,0.0,90.0;     21. double mjne+1=0.0,a0,a0,a0;     22. double gxne+1=0.0,i0,i0,i0;     23. int zcnz+1=0,1,2,3,10,11,12;    

16、; 24. double pjnpj+13=0.0,0.0,0.0;     25. double pfnpf+15=0,0,0,0,0,0,-20,1.0,2.0,2.0;     26. double kznj3+1dd+1,pnj3+1;     27. double pe7,f7,f07,t77;     28. double ke77,kd77;     29.      30. 

17、60;    31. /*kz整體剛度矩陣     32. /*ke整體坐標(biāo)下的單元剛度矩陣     33. /*kd局部坐標(biāo)下的單位剛度矩陣     34. /*t坐標(biāo)變換矩陣     35.      36. /*這是函數(shù)聲明     37. void jdugd(int);     38. void zb(int);    

18、; 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;   &#

19、160; 47.  double cl,wy7;     48.  int im,in,jn;     49.      50. /*     51. /<功能:形成矩陣P>     52. /*     53.      54.  if(npj>0)     55.   

20、;    56.      for(i=1;i<=npj;i+)     57.                                   &#

21、160;                         /把節(jié)點(diǎn)載荷送入P     58.          j=pji2;         

22、60;                    59.          pj=pji1;     60.           61.       62.  if(npf&

23、gt;0)     63.       64.      for(i=1;i<=npf;i+)     65.                            

24、0;                               /求固端反力F0     66.          hz=i;     67.

25、60;         gdnl(hz);     68.          e=(int)pfhz3;     69.          zb(e);          

26、0;                                  /求單元號碼     70.          for(j=1;j<=6

27、;j+)                                  /求坐標(biāo)變換矩陣T     71.            

28、60;  72.              pej=0.0;     73.              for(k=1;k<=6;k+)             &

29、#160;                /求等效節(jié)點(diǎn)載荷     74.                    75.           

30、;       pej=pej-tkj*f0k;     76.                   77.               78.       &

31、#160;  al=jme1;     79.          bl=jme2;     80.          p3*al-2=p3*al-2+pe1;                

32、         /將等效節(jié)點(diǎn)載荷送到P中     81.          p3*al-1=p3*al-1+pe2;     82.          p3*al=p3*al+pe3;     83.    

33、      p3*bl-2=p3*bl-2+pe4;     84.          p3*bl-1=p3*bl-1+pe5;     85.          p3*bl=p3*bl+pe6;     86.      

34、60;    87.       88.      89.      90.  /*     91.  /<功能:生成整體剛度矩陣kz>     92.  for(e=1;e<=ne;e+)             

35、60;                          /按單元循環(huán)     93.        94.      dugd(e);       

36、                                       /求整體坐標(biāo)系中的單元剛度矩陣ke     95.     

37、for(i=1;i<=2;i+)                                     /對行碼循環(huán)     96.      

38、0;    97.          for(ii=1;ii<=3;ii+)     98.                99.              h=3*(i-1)+ii; 

39、;                                /元素在ke中的行碼    100.             

40、dh=3*(jmei-1)+ii;                         /該元素在KZ中的行碼    101.              for(j=1;j<=2;j+) 

41、   102.                  103.                  for(jj=1;jj<=3;jj+)         &#

42、160;            /對列碼循環(huán)    104.                      105.            &#

43、160;         l=3*(j-1)+jj;                         /元素在ke中的列碼    106.         &#

44、160;            zl=3*(jmej-1)+jj;                 /該元素在KZ中的行碼    107.             

45、60;        dl=zl-dh+1;                           /該元素在KZ*中的行碼    108.        

46、60;             if(dl>0)    109.                          kzdhdl=kzdhdl+kehl;   /剛度集成&#

47、160;   110.                      111.                  112.        

48、60;     113.          114.      115.     116. /*引入邊界條件*    117.   for(i=1;i<=nz;i+)               

49、0;                       /按支撐循環(huán)    118.      119.      z=zci;           

50、60;                                  /支撐對應(yīng)的位移數(shù)    120.      kzzl=1.0;    &#

51、160;                                    /第一列置1    121.      for(j=2;j<=dd;j+) 

52、;   122.          123.          kzzj=0.0;                           &#

53、160;         /行置0    124.          125.      if(z!=1)    126.          127.        &#

54、160; if(z>dd)    128.              j0=dd;    129.          else if(z<=dd)    130.         

55、0;    j0=z;                                         /列(45度斜線)置0    131

56、.          for(j=2;j<=j0;j+)    132.              kzz-j+1j=0.0;    133.          134.      p

57、z=0.0;                                             /P置0    135.&#

58、160;     136.     137.     138.     139.     140.  for(k=1;k<=nj3-1;k+)    141.      142.      if(nj3>k+dd-1)    &

59、#160;                                   /求最大行碼    143.          im=k+d

60、d-1;    144.      else if(nj3<=k+dd-1)    145.          im=nj3;    146.      in=k+1;    147.      for(i=in;i<=im;i

61、+)    148.          149.          l=i-k+1;    150.          cl=kzkl/kzk1;           &

62、#160;                 /修改KZ    151.          jn=dd-l+1;    152.          for(j=1;j<=jn;j+) 

63、  153.              154.              m=j+i-k;    155.              kzij=kzij-cl*kzkm

64、;    156.              157.          pi=pi-cl*pk;                      

65、;         /修改P    158.          159.      160.     161.     162.     163.     164.  pnj3=pnj3/kznj31

66、;                                /求最后一個位移分量    165.  for(i=nj3-1;i>=1;i-)    166.      

67、167.      if(dd>nj3-i+1)    168.          j0=nj3-i+1;    169.      else j0=dd;               

68、0;                          /求最大列碼j0    170.      for(j=2;j<=j0;j+)    171.        

69、0; 172.          h=j+i-1;    173.          pi=pi-kzij*ph;    174.          175.      pi=pi/kzi1;  &#

70、160;                               /求其他位移分量    176.      177.      printf("n");&

71、#160;   178.      printf("_n");    179.      printf("NJ            U              

72、60;  V                CETA       n");     /輸出位移    180.      for(i=1;i<=nj;i+)    181.   

73、60;      182.          printf(" %-5d %14.11f     %14.11f     %14.11fn",i,p3*i-2,p3*i-1,p3*i);    183.          184.  

74、60;   printf("_n");    185.      /*根據(jù)E的值輸出相應(yīng)E單元的N,Q,M(A,B)的結(jié)果*    186.      printf("E             N      

75、            Q                 M     n");    187.      /*計算軸力N,剪力Q,彎矩M*    188. &

76、#160;    for(e=1;e<=ne;e+)                                  /按單元循環(huán)    189.    

77、0;     190.          jdugd(e);                                   

78、    /求局部單元剛度矩陣kd    191.          zb(e);                               

79、;           /求坐標(biāo)變換矩陣T    192.          for(i=1;i<=2;i+)    193.              194.     &

80、#160;        for(ii=1;ii<=3;ii+)    195.                  196.                  h=

81、3*(i-1)+ii;    197.                  dh=3*(jmei-1)+ii;                   /給出整體坐標(biāo)下單元節(jié)點(diǎn)位移    198.

82、                  wyh=pdh;    199.                  200.            &#

83、160; 201.          for(i=1;i<=6;i+)    202.              203.              fi=0.0;    204.&#

84、160;             for(j=1;j<=6;j+)    205.                  206.             &

85、#160;    for(k=1;k<=6;k+)                      /求由節(jié)點(diǎn)位移引起的單元節(jié)點(diǎn)力    207.               &#

86、160;      208.                      fi=fi+kdij*tjk*wyk;    209.                &

87、#160;     210.                  211.              212.          if(npf>0)    213.&

88、#160;             214.              for(i=1;i<=npf;i+)                    

89、60;   /按非節(jié)點(diǎn)載荷數(shù)循環(huán)    215.                  if(pfi3=e)                       

90、 /找到荷載所在的單元    216.                      217.                      hz=i;  &

91、#160; 218.                      gdnl(hz);                         

92、; /求固端反力    219.                      for(j=1;j<=6;j+)                  /將固端反力累加   

93、; 220.                          221.                       &

94、#160;  fj=fj+f0j;    222.                          223.                  &#

95、160;   224.              225.          printf("%-3d(A)  %9.5f           %9.5f        

96、 %9.5fn",e,f1,f2,f3);         /輸出單元A(i)端內(nèi)力    226.          printf("   (B)  %9.5f           %9.5f    

97、0;    %9.5fn",f4,f5,f6);            /輸出單元B(i)端內(nèi)力    227.          228.       return;    229.     230. /*主程序結(jié)束*

98、    231.     232. /*    233. /<功能:將非節(jié)點(diǎn)載荷下的桿端力計算出來存入f0>    234. /*    235.     236. void gdnl(int hz)    237.     238.     int ind,e;   

99、; 239.     double g,c,l0,d;    240.     241.     242.     g=pfhz1;                      &#

100、160;                /載荷值    243.     c=pfhz2;                        &

101、#160;              /載荷位置    244.     e=(int)pfhz3;                         

102、         /作用單元    245.     ind=(int)pfhz4;                              

103、60; /載荷類型    246.     l0=gce;                                       &#

104、160;  /桿長    247.     d=l0-c;    248.     if(ind=1)    249.         250.         f01=0.0;    251.    

105、;     f02=-(g*c*(2-2*c*c/(l0*l0)+(c*c*c)/(l0*l0*l0)/2;         /均布載荷的固端反力    252.         f03=-(g*c*c)*(6-8*c/l0+3*c*c/(l0*l0)/12;    253.     &#

106、160;   f04=0.0;    254.         f05=-g*c-f02;    255.         f06=(g*c*c*c)*(4-3*c/l0)/(12*l0);    256.         257.  &#

107、160;  else    258.         259.         if(ind=2)                          

108、          /橫向集中力的固端反力    260.             261.             f01=0.0;    262.      

109、;       f02=(-(g*d*d)*(l0+2*c)/(l0*l0*l0);    263.             f03=-(g*c*d*d)/(l0*l0);    264.             f04=0.0; 

110、;   265.             f05=(-g*c*c*(l0+2*d)/(l0*l0*l0);    266.             f06=(g*c*c*d)/(l0*l0);    267.      

111、       268.         else    269.             270.             f01=-(g*d/l0);     

112、;                    /縱向集中力的固端反力    271.             f02=0.0;    272.       

113、0;     f03=0.0;    273.             f04=-g*c/l0;    274.             f05=0.0;    275.     

114、        f06=0.0;    276.             277.         278.     279.     280. /*    281. /<功能:構(gòu)成坐標(biāo)變換矩陣> 

115、   282. /*    283. void zb(int e)    284.     285.     double ceta,co,si;    286.     int i,j;    287.     ceta=(gje*pi)/180;     

116、                        /角度變弧度    288.     co=cos(ceta);    289.     si=sin(ceta);    290. 

117、0;   t11=co;                                      /計算T右上角元素    291.    

118、; t12=si;    292.     t21=-si;    293.     t22=co;    294.     t33=1.0;    295.     for(i=1;i<=3;i+)    296.       &#

119、160; 297.         for(j=1;j<=3;j+)                            /計算T的左下角元素    298.   

120、0;         299.             ti+3j+3=tij;    300.             301.         302.     30

121、3.     304.     305.     306. /*    307. /<計算局部坐標(biāo)下單元剛度矩陣kd>    308. /*    309. void jdugd(int e)    310.        311.     dou

122、ble A0,l0,j0;    312.     int i;    313.     int j;    314.         315.         316.     A0=mje;   

123、                                    /面積    317.     l0=gce;     &

124、#160;                                 /桿長    318.     j0=gxe;       &#

125、160;                               /慣性鉅    319.     320.         321.     for(i=0;i<=6;i+)    322.         for(j=0;j<=6;j+)         &#

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論