您的位置:网站首页 > Ansys教程

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

时间:2011-01-27 09:12:45 来源:未知

 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

  2 #include

  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==' ')linenum++;

  31 }

  32 rewind(fp);

  33 printf("节点数是%d ",linenum);

  34 //读入节点的坐标

  35 while(fgets(buffer,200,fp)!=NULL)

  36 {

  37 xx[0]='';

  38 yy[0]='';

  39 sscanf(buffer,NodeFormat,xx,yy);

  40 printf("%f,%f ",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==' ')linenum++;

  49 }

  50 rewind(fp);

  51 printf("单元数是%d ",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 ",a[0],a[1],a[2],mat);

  57 }

  58 fclose(fp);

  59

  60

  61 return 0;

  62 }

  63