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