本文探討了使用ANSYS APDL和C語(yǔ)言實(shí)現(xiàn)混合編程的相關(guān)內(nèi)容。
本文討論的不是利用C語(yǔ)言為ANSYS寫擴(kuò)展(或者說是用戶子程序),而是討論結(jié)合APDL對(duì)ANSYS的現(xiàn)有的計(jì)算程序進(jìn)行復(fù)用,例如對(duì)ANSYS強(qiáng)大的前后處理程序,包括網(wǎng)格剖分,計(jì)算結(jié)果顯示等,或者利用有限元計(jì)算部分的模塊,使用ANSYS方便的邊界條件加載,方程組求解等。
0. 為什么進(jìn)行混合編程
既然ANSYS已經(jīng)提供了APDL這么強(qiáng)大的編程語(yǔ)言,為什么還要用C語(yǔ)言來與APDL混合編程呢?下面的幾個(gè)原因,首先是前處理建模的要求,APDL并不能應(yīng)對(duì)實(shí)際中非常復(fù)雜的模型的構(gòu)建,本文的出發(fā)點(diǎn)之一就是復(fù)合材料分析中的幾何模型構(gòu)建問題,由于材料中的增強(qiáng)體為隨機(jī)的顆粒,每一次模擬中,顆粒都是隨機(jī)生成的,使用APDL并不方便;其次就是利用ANSYS的計(jì)算資源的考慮,比如上述問題,就可以利用C語(yǔ)言來生成模型的數(shù)據(jù),利用APDL來構(gòu)建幾何模型,以及剖分有限元網(wǎng)格,用于自己的計(jì)算程序;還有在一些問題中,其邊界條件,載荷等也是通過程序算出來的話,也可以通過混合編程對(duì)問題求解;另外,可以發(fā)揮C語(yǔ)言的優(yōu)勢(shì),比如說計(jì)算效率,現(xiàn)有的庫(kù)等,總而言之,混合編程能更充分利用ANSYS的計(jì)算程序以及C語(yǔ)言的優(yōu)勢(shì),并且可以實(shí)現(xiàn)計(jì)算機(jī)上的自動(dòng)化計(jì)算。
1. 混合編程的原理
ANSYS與C語(yǔ)言混合編程的原理很簡(jiǎn)單,實(shí)際上就是用C語(yǔ)言生成ANSYS的apdl命令流文件,然后通過命令行調(diào)用ANSYS進(jìn)行計(jì)算。這個(gè)過程同樣可以使用其他的編程語(yǔ)言(比如FORTRAN,Python等)來進(jìn)行,可以發(fā)揮各種語(yǔ)言的優(yōu)勢(shì)以及對(duì)現(xiàn)有的程序庫(kù)的使用。
2. 如何使用C語(yǔ)言的實(shí)現(xiàn)
知道了混合編程的原理,那么就很簡(jiǎn)單了,其過程無非就是利用C語(yǔ)言打開一個(gè)文件,寫入命令流,關(guān)閉文件,調(diào)用ANSYS進(jìn)行計(jì)算。
文件操作需要使用的函數(shù)有
1 fp=fopen("mac.inp","r"); //打開文件
2 fprintf(fp, "APDL_Commands,%f",SomeData); //寫入文件
3 fclose(fp); //關(guān)閉文件
調(diào)用ANSYS的命令行計(jì)算則使用
system("D:\Progra~1\AnsysI~1\v100\ANSYS\bin\intel\ansys100 -b -i temp.inp -o mesh.log");
3. 實(shí)例
下面給幾個(gè)APDL和C語(yǔ)言混合編程的實(shí)例
3.1 復(fù)合材料中的圓性顆粒網(wǎng)格剖分
圖中的顆粒是隨機(jī)C語(yǔ)言中隨機(jī)生成的圓形,結(jié)果如圖所示:
相應(yīng)的生成上述網(wǎng)格的函數(shù)為
1 /*調(diào)用ANSYS生成網(wǎng)格*/
2 void GenMesh(struct circle0 *circle,double xmax,double xmin,double ymax,double ymin)
3 {
4
5 FILE* ansysfile;
6 ansysfile=fopen("temp.inp","w");
7
8 fprintf(ansysfile,"/CLEAR,NOSTART");
9 fprintf(ansysfile,"/PREP7");
10
11 //創(chuàng)建基體
12 fprintf(ansysfile,"RECTNG,%f,%f,%f,%f,",xmin,xmax,ymin,ymax);
13
14 //創(chuàng)建顆粒
15 for (int i=0; i
16 {
17 if (circle[i].r<0.00000001)
18 {
19 continue;
20 }
21 fprintf(ansysfile,"K,%d,%f,%f",i+1000,
22 circle[i].centre_x,circle[i].centre_y);
23 fprintf(ansysfile,"CIRCLE,%d,%f",i+1000,circle[i].r);
24 }
25 fprintf(ansysfile,"ASBL,1,ALL");
26 fprintf(ansysfile,"AGLUE,All");
27
28 //創(chuàng)建單元類型
29 fprintf(ansysfile,"ET,1,PLANE42");
30 //創(chuàng)建材料
31 fprintf(ansysfile,"MP,DENS,1,0.1");//材料一
32 fprintf(ansysfile,"MP,DENS,2,10");//材料二
33 //為基體賦一號(hào)材料值
34 fprintf(ansysfile,"ASEL,S,AREA,,ARINQR(0,14)");
35 fprintf(ansysfile,"AATT,1");
36
37 //為顆粒賦二號(hào)材料值
38 fprintf(ansysfile,"ASEL,ALL");
39 fprintf(ansysfile,"ASEL,U,AREA,,ARINQR(0,14)");
40 fprintf(ansysfile,"AATT,2");
41 fprintf(ansysfile,"ALLSEL,ALL");
42
43 //生成網(wǎng)格
44 //網(wǎng)格尺寸
45 fprintf(ansysfile,"SMRT,3");
46 //fprintf(ansysfile,"AESIZE,ALL,0.6,
");
47
48 fprintf(ansysfile,"MSHAPE,1,2D");
49 fprintf(ansysfile,"MSHKEY,0");
50 //開始劃分網(wǎng)格
51 fprintf(ansysfile,"AMESH,ALL");
52
53 //輸出網(wǎng)格
54 // fprintf(ansysfile,"/INPUT,ExportMesh,inp
");
55
56 fclose(ansysfile);
57 //---------------調(diào)用ANSYS生成網(wǎng)格
58 system("D:\Progra~1\AnsysI~1\v100\ANSYS\bin\intel\ansys100 -b -i temp.inp -o mesh.log");
59 // system("tec360 tecplot.plt");
60 }
3.2 復(fù)合材料中的圓性顆粒網(wǎng)格剖分
對(duì)于橢圓形顆粒,網(wǎng)格剖分結(jié)果如圖所示
生成上述網(wǎng)格的代碼為
1
2 //生成顆粒是橢圓時(shí)的網(wǎng)格
3 //橢圓的數(shù)據(jù)結(jié)構(gòu)是下面的struct
4 //Genmesh函數(shù)是調(diào)用ANSYS生成網(wǎng)格的函數(shù)
5 void GenMesh(struct elliptic0 *ellipse,int ellipsenum,double xmax,double xmin,double ymax,double ymin)
6 {
7
8 FILE* ansysfile;
9 ansysfile=fopen("temp.inp","w");
10 fprintf(ansysfile,"FINISH");
11 fprintf(ansysfile,"/CLEAR,NOSTART");
12 fprintf(ansysfile,"/PREP7");
13
14 //創(chuàng)建基體
15 fprintf(ansysfile,"RECTNG,%f,%f,%f,%f,",xmin,xmax,ymin,ymax);
16
17 //創(chuàng)建橢圓顆粒
18 for (int i=0; i
19 {
20 //把工作平面移到橢圓圓心。
21 fprintf(ansysfile,"wpave,%f,%f",ellipse[i].center_x,ellipse[i].center_y);
22 //旋轉(zhuǎn)工作平面
23 fprintf(ansysfile,"wprota,%f",180.0/pi*ellipse[i].theta);
24 //激活當(dāng)前活動(dòng)坐標(biāo)系為工作平面
25 fprintf(ansysfile,"csys,4");
26 //生成上半個(gè)橢圓
27 fprintf(ansysfile,"k,%d,%f",2*i+1000,ellipse[i].a);
28 fprintf(ansysfile,"k,%d,%f",2*i+1001,-ellipse[i].a);
29 fprintf(ansysfile,"cswpla,%d,2,%f",2000+2*i,(ellipse[i].b/ellipse[i].a));
30 fprintf(ansysfile,"l,%d,%d",2*i+1000,2*i+1001);
31 fprintf(ansysfile,"reflect_line=_return");//記錄線的編號(hào)
32 fprintf(ansysfile,"csys,4"); //切換活動(dòng)坐標(biāo)系為工作平面
33 fprintf(ansysfile,"lsymm,y,reflect_line");//反射生成橢圓
34 //調(diào)整工作平面使其與整體坐標(biāo)系重合
35 fprintf(ansysfile,"wprota,%f",-180.0/pi*ellipse[i].theta);
36 fprintf(ansysfile,"CSYS,0");
37 fprintf(ansysfile,"WPAVE,0,0,0");
38 }
39
40 fprintf(ansysfile,"ASBL,1,ALL");
41 fprintf(ansysfile,"AGLUE,All");
42
43 //創(chuàng)建單元類型
44 fprintf(ansysfile,"ET,1,PLANE42");
45 //創(chuàng)建材料
46 fprintf(ansysfile,"MP,DENS,1,0.1");//材料一
47 fprintf(ansysfile,"MP,DENS,2,10");//材料二
48 //為基體賦一號(hào)材料值
49 fprintf(ansysfile,"ASEL,S,AREA,,ARINQR(0,14)");
50 fprintf(ansysfile,"AATT,1");
51 //為顆粒賦二號(hào)材料值
52 fprintf(ansysfile,"ASEL,ALL");
53 fprintf(ansysfile,"ASEL,U,AREA,,ARINQR(0,14)");
54 fprintf(ansysfile,"AATT,2");
55 fprintf(ansysfile,"ALLSEL,ALL");
56 //生成網(wǎng)格
57 //網(wǎng)格尺寸
58 fprintf(ansysfile,"SMRT,3");
59 //fprintf(ansysfile,"AESIZE,ALL,0.6,
");
60
61 fprintf(ansysfile,"MSHAPE,1,2D");
62 fprintf(ansysfile,"MSHKEY,0");
63 //劃分網(wǎng)格
64 fprintf(ansysfile,"AMESH,ALL");
65
66 //輸出網(wǎng)格
67 fprintf(ansysfile,"/INPUT,ExportMesh,inp");//輸出網(wǎng)格到Tecplot
68 fprintf(ansysfile,"EWRITE,elemlist1,txt");//輸出單元
69 fprintf(ansysfile,"NWRITE,nodelist1,txt");//輸出節(jié)點(diǎn)
70
71 fclose(ansysfile);
72 //---------------調(diào)用ANSYS生成網(wǎng)格
73 system("D:\Progra~1\AnsysI~1\v100\ANSYS\bin\intel\ansys100 -b -i temp.inp -o mesh.log");
74 system("tec360 tecplot.plt");
75 }
相關(guān)文章
- 2021-07-12Maya總動(dòng)員:動(dòng)畫編程篇 張寶貴等PDF下載
- 2021-01-01AutoCAD 2002 完全使用手冊(cè)PDF下載
- 2020-12-293D打印建模、打印、上色實(shí)現(xiàn)與技巧:AutoCAD篇PDF下載
- 2020-12-19AutoCAD 12.0繪圖軟件包的使用與二次開發(fā)技術(shù)PDF下載
- 2020-12-173ds MAXScript腳本語(yǔ)言安全學(xué)習(xí)手冊(cè)
- 2016-01-27tssd探索者字體XP/WIN7 cad鋼筋符號(hào)字體附使用教程
- 2013-05-23某船廠30t拉塢臺(tái)車3D圖免費(fèi)下載
- 2012-07-15467種CAD圖案填充(含使用說明)免費(fèi)下載
- 2012-06-12145種天棚吊頂造型CAD圖庫(kù)免費(fèi)下載
- 2012-05-25AutoCAD2010的使用提示與技巧.PDF下載