标签:
手机博客杂谈 |
分类: ANSYS |
一、输入格式要求
ANSYS的APDL语言其语法等各方面均与Fortran有很大的共通之处。在数据的输入输出格式方面也可以参考Fortran。对于初学者来说,输入数据时更容易引发错误,所以下面谈几点在这方面的小认识。
APDL 从外部文件输入数据,一般是采用*vread命令实现,而输入格式一般是在此命令的下一行定义,关于此命令的具体应用,可参见ANSYS帮助。
在输入格式方面与Fortran不同:
(1)APDL在数值方面没有整型(I)、G型描述符,字符型数据采用A描述符,没有H描述符。
(2)在Fortran中如果数据是整数,但是输入格式采用实数(如单精度浮点型F),则系统可以按指定格式自动为数据加上小数点,但在APDL中如输入数据为整数,如:6,则格式 Fw.d中的d只能为零,否则会出现读入错误;而如果是6.则Fw.d中的d可以不为0。
另外在输入时还容易引起输入错误的是:
(1) 输入格式的长度大于数据长度(指前一个数据的起至紧接的下一个数据的起始前一位,小数点和负号均占一位),如6._ _ _ _-5.6,前面的数据长度应为6,如果输入格式Fw.d中的w>6,则会出现读入错误;
(2) 格式语句应置于*vread的下一行,两行之间可以有空行,但不能有其它语句,甚至是注释语句也不能有。
二、输出格式
输出与输入在格式方面基本一致,用*vwrite执行,但也有不同之处:
输出时可以使用%c控制字符输出,%wI控制整数输出;%w.pF或%w.pE或%w.pG控制实数输出;
不能加括号。如格式语句: (F6.0,F5.2,A3),对应于:%6.0F%5.2F%3c;
应注意后一种格式中没有用逗号相隔开,也没有用括号括起,如有逗号,逗号也将一并输出。
注意:输入输出格式最好从一行的开始写,前面不要有空格
用%号(%wI)的这种格式可以输出整型数字 。
%这种控制语句也应 紧接 *vwrite行,可以有空行,但不能有其它语句夹在中间(注释也不行)。
应当指出的是,%这种控制语句不能用在控制输入中。
三、一个例子
*GET , ELEMENTNUM,ELEMENT,0,COUNT
*GET , NODENUM,NODE,0,COUNT
*CFOPEN ,c:\tecplot,plt !!tecplot的输出文件
*VWRITE
('TITLE="Ansys to Tecplot FOR TETRAHEDRON MESH"')
*VWRITE
('VARIABLES="X","Y","Z"')
*VWRITE , NODENUM,ELEMENTNUM
ZONE N=%5I,E=%7I,F=FEPOINT,ET=TETRAHEDRON
*DO , I,1,NODENUM,1
*VWRITE , NX(I),NY(I),NZ(I)
(3F12.6)
*ENDDO
*DO , I,1,ELEMENTNUM,1
*VWRITE , NELEM(I,1),NELEM(I,2),NELEM(I,3),NELEM(I,5)
%7I%7I%7I%7I
*ENDDO
*CFCLOS
finish
/clear
Item='Weight'
data=234.56
Unit='Kg'
*Dim,AA,Array,4,1,1
AA(1)=10.2,324.5,123.7,908
*Dim,BB,Char,3,1,1
BB(1)='I am','a good','man'
*CFopen,'G:\ANSYSUser\abc','txt'
*vwrite,
(5X,'*Vwrite Demo')
*vwrite,
('******************************************************')
*vwrite,Item,data,Unit
(A8,F10.2,A8)
*vwrite
(/'*********** Array Parameter Output Demo**************')
*Vwrite,
('Float Format /SEQU Keyword:')
*vwrite,SEQU,AA(1)
(F3.0,4F10.4)
*vwrite,AA(1),AA(2),AA(3),AA(4)
(//'Float /x Format:'/F4.1,2X,F10.4,2X,F10.4,2X,F10.4)
*vwrite,AA(1),AA(2),AA(3),AA(4)
(//'Float Format:'/4F10.4)
*vwrite,AA(1),AA(2),AA(3),AA(4)
(//'Double Format:'/D13.5,/D15.6,/D18.10,/D10.3)
*vwrite,
(/'****************char parametric output demo*******')
*vwrite,BB(1),BB(2),BB(3)
(3A6)
*CFclos
输出结果为:
*Vwrite Demo
******************************************************
Weight 234.56Kg
*********** Array Parameter Output Demo**************
Float Format /SEQU Keyword:
1. 10.2000
2. 324.5000
3. 123.7000
4. 908.0000
Float /x Format:
10.2 324.5000 123.7000 908.0000
Float Format:
10.2000 324.5000 123.7000 908.0000
Double Format:
0.10200D+02
0.324500D+03
0.1237000000D+03
0.908D+03
****************char parametric output demo*******
I am a goodman
几点说明:
1.使用*VWrite命令把数据输出到文件时,必须要使用*CFOpen命令事先打 开一个 文件;*CFOpen命令必须和*CFClos命令配对使用;
2.*Vwrite命令后面必须紧跟输出格式说明;
例如:
*Vwrite,a,b,c
(格式说明)
3.格式说明中Fw.d,w的数值不能太小,以至于输出的数据丢失了整数部分的 精度;
例如:a=123.4,
Fw.d中的w至少要为5,否则在ANSYS中运行时报错;这样的非语法类错误,很难发现;为了避免此类错误发生,
w应该至少设置为输出数据的所有数字个数+1(小数点)
附: 常用格式说明: ***********************************************************************************************
1.''(一对单引号):用于在输出数据的时候,输出注释字符串,常常用来增加一些说明文字,增加可读性;
比如:
*Vwrite,Widh,Length,Height
('宽度为:',F6.3,'长度为:',F6.3,'高度为:',F6.3)
2.nX:输出n个空格;
比如:在输出的a,b,c3个数据之间加入2个空格;
*vwrite,a,b,c
(F6.3,2X,F6.3,2X,F6.3)
3./:结束当前行的输出,转到下一行输出;如果两个//连续出现,则添加一个空行;
实数及数组的 输出 与示例
一、实数的输出
①实数的输出比较简单,类似 FORTRAN 的可采用 D/E//F/G 格式 输出。例如:
*CFOPEN,MYFILE,TXT
X1=4.56
X2=12345.678
X3=1.23E-6
*VWRITE,X1,X2,X3
(3d15.6)
*VWRITE,X1,X2,X3
(3E15.6)
*VWRITE,X1,X2,X3
(3f15.6)
*VWRITE,X1,X2,X3
(3g15.6)
*CFCLOSE
文件 MYFILE.TXT 如下 :
0.456000D+01
0.123457D+05
0.123000D-05
0.456000E+01
0.123457E+05
0.123000E-05
4.560000
12345.678000
0.000001
4.56000
12345.7
0.123000E-05
② 当采用科学计数时,输出格式的第一位都是“0”开头 ,如上文中的 0.123457E+05 ,假如我们希望写成1.234568E+04或12.345678E+03的格式时,可采用如下格式:1PE15.6或2PE15.6。则上文中的 命令 流可改为:
*VWRITE,x1,x2,x3
(3(1pe15.6))
或
*VWRITE,x1,x2,x3
(1pe15.3,3pe15.4,1pe15.6)
③采用C格式输出实数
C 格式也有d-整型、f-浮点、e-科学、g-任意、c-字符、s-字符串等格式,均采用%w.dx形式,而%/则为回车换行。例如:
*CFOPEN,MYFILE,TXT
X1=4.56
X2=12345.678
X3=1.23E-6
*VWRITE,X1,X2,X3,4567
%14.6f%15.6e%16.6g%10d
*CFCLOSE
文件 MYFILE.TXT 如下 :
4.560000
1.234568E+04
1.230000E-06
4567
二、数组的输出
( 一)VWRITE方法
数组输出格式同上,但其输出控制却有很多种形式,且ANSYS按列输出数组。
设有数组(矩阵形式,这里不用插图了):
|1.1 2.1 3.1|
|1.2 2.2 3.2|
ABC(5,3)=|1.3 2.3 3.3|
|1.4 2.4 3.4|
|1.5 2.5 3.5|
*VWRITE 命令如下几种方式:
① 与矩阵写法类同的按列输出: 利用ANSYS的输出特点,分别写出各列表示符即可,而行则从1到最终的5。
② 同上格式,但按矩阵元素输出 用一对()将矩阵表达式括起来变为矩阵元素,这样用循环输出,如命令流中所示。
③当列很多时不可能写出每个列字符表达式,此时可采用$字符格式 $ 字符表示连续输出,没有回车符号,当一行写完后,增加一个非$格式语句即可。但是这里增加了一个临时数组,以存储某行的 数据 。
上述输出格式便于导入EXCELL中处理数据。
( 二)MWRITE命令
数组最好采用*MWRITE命令输出,不管是否按类似矩阵格式输出,此命令均可较好 解决 。当矩阵列数较少时,可以采用类似行列输出;当矩阵列数很大时,可以按每行N个数据控制输出。
以上4种方法的命令流如下:
*DIM,ABC,,5,3
! 数组赋值
*DO,I,1,5
*DO,J,1,3
ABC(I,J)=J+I/10
*ENDDO
*ENDDO
!VWRITE 数组输出
*CFOPEN,MYFILE,TXT
! ①格式1-按行列输出(行数从1~最终的5,列不变)
*VWRITE,ABC(1,1),ABC(1,2),ABC(1,3)
(3F6.1)
! ② 格式 2- 按矩阵元素输出
*DO,I,1,5
*VWRITE,(ABC(I,1)),(ABC(I,2)),(ABC(I,3))
(3F6.2)
*ENDDO
! ③ 格式 3- 多列时按行列输出
*DIM,TELS,,3
*DO,I,1,5
*DO,J,1,3
TELS(J)=ABC(I,J)
*ENDDO
*VWRITE,TELS(1)
(F6.3,$)
*VWRITE
('
')
*ENDDO
*CFCLOSE
! ④MWRITE 输出数组
!ABCD(I,J,K)
*DIM,ABCD,,50,30
! 数组赋值
*DO,I,1,50
*DO,J,1,30
ABCD(I,J)=j+i/100
*ENDDO
*ENDDO
*MWRITE,ABCD,MYFILE1,TXT,,JIK,30,50
(30F9.4)
! 也可采用(10f9.4)格式,以输出150行*10个的数据。
文件 MYFILE.TXT 可以通过记事本查看。
1.1 2.1 3.1
1.2 2.2 3.2
1.3 2.3 3.3
1.4 2.4 3.4
1.5 2.5 3.5
1.10 2.10 3.10
1.20 2.20 3.20
1.30 2.30 3.30
1.40 2.40 3.40
1.50 2.50 3.50
1.100 2.100 3.100
1.200 2.200 3.200
1.300 2.300 3.300
1.400 2.400 3.400
1.500 2.500 3.500
文件 MYFILE1.TXT 的内容可通过 EXCELL 打开 : EXCELL> 打开 ( 所有文件 )> 选择 MYFILE1.TXT> 选择 分隔符 > 下一步 > 选择空格 > 完成,该表为 50 行 *30 列的数据表。
ANSYS的APDL语言其语法等各方面均与Fortran有很大的共通之处。在数据的输入输出格式方面也可以参考Fortran。对于初学者来说,输入数据时更容易引发错误,所以下面谈几点在这方面的小认识。
APDL 从外部文件输入数据,一般是采用*vread命令实现,而输入格式一般是在此命令的下一行定义,关于此命令的具体应用,可参见ANSYS帮助。
在输入格式方面与Fortran不同:
(1)APDL在数值方面没有整型(I)、G型描述符,字符型数据采用A描述符,没有H描述符。
(2)在Fortran中如果数据是整数,但是输入格式采用实数(如单精度浮点型F),则系统可以按指定格式自动为数据加上小数点,但在APDL中如输入数据为整数,如:6,则格式 Fw.d中的d只能为零,否则会出现读入错误;而如果是6.则Fw.d中的d可以不为0。
另外在输入时还容易引起输入错误的是:
(1) 输入格式的长度大于数据长度(指前一个数据的起至紧接的下一个数据的起始前一位,小数点和负号均占一位),如6._ _ _ _-5.6,前面的数据长度应为6,如果输入格式Fw.d中的w>6,则会出现读入错误;
(2) 格式语句应置于*vread的下一行,两行之间可以有空行,但不能有其它语句,甚至是注释语句也不能有。
二、输出格式
输出与输入在格式方面基本一致,用*vwrite执行,但也有不同之处:
输出时可以使用%c控制字符输出,%wI控制整数输出;%w.pF或%w.pE或%w.pG控制实数输出;
不能加括号。如格式语句: (F6.0,F5.2,A3),对应于:%6.0F%5.2F%3c;
应注意后一种格式中没有用逗号相隔开,也没有用括号括起,如有逗号,逗号也将一并输出。
注意:输入输出格式最好从一行的开始写,前面不要有空格
用%号(%wI)的这种格式可以输出整型数字 。
%这种控制语句也应 紧接 *vwrite行,可以有空行,但不能有其它语句夹在中间(注释也不行)。
应当指出的是,%这种控制语句不能用在控制输入中。
三、一个例子
*GET , ELEMENTNUM,ELEMENT,0,COUNT
*GET , NODENUM,NODE,0,COUNT
*CFOPEN ,c:\tecplot,plt !!tecplot的输出文件
*VWRITE
('TITLE="Ansys to Tecplot FOR TETRAHEDRON MESH"')
*VWRITE
('VARIABLES="X","Y","Z"')
*VWRITE , NODENUM,ELEMENTNUM
ZONE N=%5I,E=%7I,F=FEPOINT,ET=TETRAHEDRON
*DO , I,1,NODENUM,1
*VWRITE , NX(I),NY(I),NZ(I)
(3F12.6)
*ENDDO
*DO , I,1,ELEMENTNUM,1
*VWRITE , NELEM(I,1),NELEM(I,2),NELEM(I,3),NELEM(I,5)
%7I%7I%7I%7I
*ENDDO
*CFCLOS
finish
/clear
Item='Weight'
data=234.56
Unit='Kg'
*Dim,AA,Array,4,1,1
AA(1)=10.2,324.5,123.7,908
*Dim,BB,Char,3,1,1
BB(1)='I am','a good','man'
*CFopen,'G:\ANSYSUser\abc','txt'
*vwrite,
(5X,'*Vwrite Demo')
*vwrite,
('******************************************************')
*vwrite,Item,data,Unit
(A8,F10.2,A8)
*vwrite
(/'*********** Array Parameter Output Demo**************')
*Vwrite,
('Float Format /SEQU Keyword:')
*vwrite,SEQU,AA(1)
(F3.0,4F10.4)
*vwrite,AA(1),AA(2),AA(3),AA(4)
(//'Float /x Format:'/F4.1,2X,F10.4,2X,F10.4,2X,F10.4)
*vwrite,AA(1),AA(2),AA(3),AA(4)
(//'Float Format:'/4F10.4)
*vwrite,AA(1),AA(2),AA(3),AA(4)
(//'Double Format:'/D13.5,/D15.6,/D18.10,/D10.3)
*vwrite,
(/'****************char parametric output demo*******')
*vwrite,BB(1),BB(2),BB(3)
(3A6)
*CFclos
输出结果为:
*Vwrite Demo
******************************************************
Weight 234.56Kg
*********** Array Parameter Output Demo**************
Float Format /SEQU Keyword:
1. 10.2000
2. 324.5000
3. 123.7000
4. 908.0000
Float /x Format:
10.2 324.5000 123.7000 908.0000
Float Format:
10.2000 324.5000 123.7000 908.0000
Double Format:
0.10200D+02
0.324500D+03
0.1237000000D+03
0.908D+03
****************char parametric output demo*******
I am a goodman
几点说明:
1.使用*VWrite命令把数据输出到文件时,必须要使用*CFOpen命令事先打 开一个 文件;*CFOpen命令必须和*CFClos命令配对使用;
2.*Vwrite命令后面必须紧跟输出格式说明;
例如:
*Vwrite,a,b,c
(格式说明)
3.格式说明中Fw.d,w的数值不能太小,以至于输出的数据丢失了整数部分的 精度;
例如:a=123.4,
Fw.d中的w至少要为5,否则在ANSYS中运行时报错;这样的非语法类错误,很难发现;为了避免此类错误发生,
w应该至少设置为输出数据的所有数字个数+1(小数点)
附: 常用格式说明: ***********************************************************************************************
1.''(一对单引号):用于在输出数据的时候,输出注释字符串,常常用来增加一些说明文字,增加可读性;
比如:
*Vwrite,Widh,Length,Height
('宽度为:',F6.3,'长度为:',F6.3,'高度为:',F6.3)
2.nX:输出n个空格;
比如:在输出的a,b,c3个数据之间加入2个空格;
*vwrite,a,b,c
(F6.3,2X,F6.3,2X,F6.3)
3./:结束当前行的输出,转到下一行输出;如果两个//连续出现,则添加一个空行;
实数及数组的 输出 与示例
一、实数的输出
①实数的输出比较简单,类似 FORTRAN 的可采用 D/E//F/G 格式 输出。例如:
*CFOPEN,MYFILE,TXT
X1=4.56
X2=12345.678
X3=1.23E-6
*VWRITE,X1,X2,X3
(3d15.6)
*VWRITE,X1,X2,X3
(3E15.6)
*VWRITE,X1,X2,X3
(3f15.6)
*VWRITE,X1,X2,X3
(3g15.6)
*CFCLOSE
文件 MYFILE.TXT 如下 :
0.456000D+01
0.123457D+05
0.123000D-05
0.456000E+01
0.123457E+05
0.123000E-05
4.560000
12345.678000
0.000001
4.56000
12345.7
0.123000E-05
② 当采用科学计数时,输出格式的第一位都是“0”开头 ,如上文中的 0.123457E+05 ,假如我们希望写成1.234568E+04或12.345678E+03的格式时,可采用如下格式:1PE15.6或2PE15.6。则上文中的 命令 流可改为:
*VWRITE,x1,x2,x3
(3(1pe15.6))
或
*VWRITE,x1,x2,x3
(1pe15.3,3pe15.4,1pe15.6)
③采用C格式输出实数
C 格式也有d-整型、f-浮点、e-科学、g-任意、c-字符、s-字符串等格式,均采用%w.dx形式,而%/则为回车换行。例如:
*CFOPEN,MYFILE,TXT
X1=4.56
X2=12345.678
X3=1.23E-6
*VWRITE,X1,X2,X3,4567
%14.6f%15.6e%16.6g%10d
*CFCLOSE
文件 MYFILE.TXT 如下 :
4.560000
1.234568E+04
1.230000E-06
4567
二、数组的输出
( 一)VWRITE方法
数组输出格式同上,但其输出控制却有很多种形式,且ANSYS按列输出数组。
设有数组(矩阵形式,这里不用插图了):
|1.1 2.1 3.1|
|1.2 2.2 3.2|
ABC(5,3)=|1.3 2.3 3.3|
|1.4 2.4 3.4|
|1.5 2.5 3.5|
*VWRITE 命令如下几种方式:
① 与矩阵写法类同的按列输出: 利用ANSYS的输出特点,分别写出各列表示符即可,而行则从1到最终的5。
② 同上格式,但按矩阵元素输出 用一对()将矩阵表达式括起来变为矩阵元素,这样用循环输出,如命令流中所示。
③当列很多时不可能写出每个列字符表达式,此时可采用$字符格式 $ 字符表示连续输出,没有回车符号,当一行写完后,增加一个非$格式语句即可。但是这里增加了一个临时数组,以存储某行的 数据 。
上述输出格式便于导入EXCELL中处理数据。
( 二)MWRITE命令
数组最好采用*MWRITE命令输出,不管是否按类似矩阵格式输出,此命令均可较好 解决 。当矩阵列数较少时,可以采用类似行列输出;当矩阵列数很大时,可以按每行N个数据控制输出。
以上4种方法的命令流如下:
*DIM,ABC,,5,3
! 数组赋值
*DO,I,1,5
*DO,J,1,3
ABC(I,J)=J+I/10
*ENDDO
*ENDDO
!VWRITE 数组输出
*CFOPEN,MYFILE,TXT
! ①格式1-按行列输出(行数从1~最终的5,列不变)
*VWRITE,ABC(1,1),ABC(1,2),ABC(1,3)
(3F6.1)
! ② 格式 2- 按矩阵元素输出
*DO,I,1,5
*VWRITE,(ABC(I,1)),(ABC(I,2)),(ABC(I,3))
(3F6.2)
*ENDDO
! ③ 格式 3- 多列时按行列输出
*DIM,TELS,,3
*DO,I,1,5
*DO,J,1,3
TELS(J)=ABC(I,J)
*ENDDO
*VWRITE,TELS(1)
(F6.3,$)
*VWRITE
('
')
*ENDDO
*CFCLOSE
! ④MWRITE 输出数组
!ABCD(I,J,K)
*DIM,ABCD,,50,30
! 数组赋值
*DO,I,1,50
*DO,J,1,30
ABCD(I,J)=j+i/100
*ENDDO
*ENDDO
*MWRITE,ABCD,MYFILE1,TXT,,JIK,30,50
(30F9.4)
! 也可采用(10f9.4)格式,以输出150行*10个的数据。
文件 MYFILE.TXT 可以通过记事本查看。
1.1 2.1 3.1
1.2 2.2 3.2
1.3 2.3 3.3
1.4 2.4 3.4
1.5 2.5 3.5
1.10 2.10 3.10
1.20 2.20 3.20
1.30 2.30 3.30
1.40 2.40 3.40
1.50 2.50 3.50
1.100 2.100 3.100
1.200 2.200 3.200
1.300 2.300 3.300
1.400 2.400 3.400
1.500 2.500 3.500
文件 MYFILE1.TXT 的内容可通过 EXCELL 打开 : EXCELL> 打开 ( 所有文件 )> 选择 MYFILE1.TXT> 选择 分隔符 > 下一步 > 选择空格 > 完成,该表为 50 行 *30 列的数据表。
前一篇:ANSYS非线性分析(控制选

加载中…