ANSYS输出的单元和节点文件的C语言读入

 

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 


 

posted @ 2009-11-29 11:24  Walter L  阅读(2878)  评论(0编辑  收藏  举报