ANSYS中使用EWRITE來輸出當前選擇的單元到檔案。他的參數為
EWRITE, Fname, Ext, --, KAPPND, Format
其中前兩個分別是檔案名稱和尾碼,KAPPND表明是否清空單元檔案來進行輸出(用0和1 表示),Format則是說明輸出文
件的位寬,其中SHORT是預設選項,表示用六位位寬輸出,而LONG是表示8為位寬輸出。
同樣的,ANSYS使用NWRITE來輸出當前選擇的節點到檔案。其輸入參數與EWRITE的輸入參數的含義相同,只不過沒有位寬
的選項。但是節點的輸出檔案的中第一列為節點號位寬是8位,而第二到第四列為節點座標,各20為位寬,各列之間沒
有空格。
在使用C語言讀入網格資料的時候,可以使用上述的檔案來讀入.通常比較方便的做法是知道節點個數,和單元個數然後
在依次讀入C程式中。但是上述輸出的單元和節點的檔案並沒有提供這個資訊。
不過可已通過一下方式來產生這種檔案:在APDL中先讀取單元數和節點數,分別寫入對應的單元和節點檔案,然後以追
加方式寫節點和單元檔案。
下面是一個簡單的用C語言讀取二維的三角網格的例子(沒有寫入單元和節點的個數,而是通過計算行數來得到的)
1 #include <stdio.h>
2 #include <stdlib.h>
3 //ANSYS 's element output format
4
5 char NodeFormat[]="%*8c%20s%20s"; //節點的行格式
6 char ELongFormat[]="%8d%8d%8d%*40c%8d";//單元檔案三角網格的長格式
7 char EShortFormat[]="%6d%6d%6d%*30c%6d";//單元檔案三角網格的短格式
8
9
10
11
12 int main(int argc, const char *argv[])
13 {
14 FILE* fp;
15 char buffer[200];
16 char xx[21];
17 char yy[21];
18 int ch;
19 int mat,num;
20 int linenum=0;
21 int a[3]={0};
22 char NodeFile[]="nodelist1.n";//節點檔案
23 char ElemFile[]="elemlist1.e";//單元檔案
24
25 fp=fopen(NodeFile,"r");
26
27 //計算節點數目
28 while((ch=fgetc(fp))!=EOF)
29 {
30 if(ch=='\n')linenum++;
31 }
32 rewind(fp);
33 printf("節點數是%d\n",linenum);
34 //讀入節點的座標
35 while(fgets(buffer,200,fp)!=NULL)
36 {
37 xx[0]='\0';
38 yy[0]='\0';
39 sscanf(buffer,NodeFormat,xx,yy);
40 printf("%f,%f\n",atof(xx),atof(yy));
41 }
42 fclose(fp);
43
44 fp=fopen(ElemFile,"r");
45 int linenum=0;//計算單元的數目
46 while((ch=fgetc(fp))!=EOF)
47 {
48 if(ch=='\n')linenum++;
49 }
50 rewind(fp);
51 printf("單元數是%d\n",linenum);
52 //讀入單元
53 while(fgets(buffer,200,fp)!=NULL)
54 {
55 sscanf(buffer,EshortFormat,&a[0],&a[1],&a[2],&mat);
56 printf("%8d %8d %8d %8d\n",a[0],a[1],a[2],mat);
57 }
58 fclose(fp);
59
60
61 return 0;
62 }
63