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 


 

你可能感兴趣的:(C语言)