haohaosir 发表于 2006-4-18 19:51

[原创]提供Ansys计算结果(比如加速度值)写成fre文件的命令流

将Ansys计算结果(比如加速度值)写成fre文件的命令流。位移值更简单。/POST26

NSOL,2,10,U,Y,UY_2 ! 定义第二个变量为UY_2,值为10号节点Y方向的位移,节点可任选,但要保证其值非0
XVAR,1 ! 定义时间变量为坐标横轴
PLVAR,2
*GET,num_var,VARI,0, NSETS ! 将变量长度值赋给变量num_var
k=num_var

*DIM,SYSNOISE_TITLE,CHAR,5,4
SYSNOISE_TITLE(1,1)='SYSNOISE '
SYSNOISE_TITLE(1,2)=' ACCELER '
SYSNOISE_TITLE(1,3)='ATIONS '
SYSNOISE_TITLE(1,4)=' FILE'

SYSNOISE_TITLE(2,1)='Rev 5.5 '
SYSNOISE_TITLE(2,2)=' IBM P2E '
SYSNOISE_TITLE(2,3)='SSL 11'
SYSNOISE_TITLE(2,4)='-AUG-02 '

SYSNOISE_TITLE(3,1)='ACCELERA'
SYSNOISE_TITLE(3,2)='TION_St'
SYSNOISE_TITLE(3,3)='ructure '
SYSNOISE_TITLE(4,1)='11-AUG-2002 '
SYSNOISE_TITLE(4,2)=' 10:07 '
SYSNOISE_TITLE(4,3)=':13 '

SYSNOISE_TITLE(5,1)='TIME'
*CFOPEN,ACCE,fre ! 定义数据结果文件,ACCE.fre

*VWRITE,SYSNOISE_TITLE(1,1) ,SYSNOISE_TITLE(1,2) ,SYSNOISE_TITLE(1,3) ,SYSNOISE_TITLE(1,4)
%C%C%C%C

*get,nmax,node,,num,max, !得到节点编号的最大数

*DIM,T_U,ARRAY,k,4! 定义保存时间历程结果的矩阵T_U,有num_var行,4列
VGET,T_U(1,1,1),1 ! 矩阵的第一列保存第一个时间历程变量(默认为TIME)

*dim,num_t,,1,5 !定义一个数组

*DIM,SYSNOISE_SUBT1,CHAR,1,4
SYSNOISE_SUBT1(1,1)='NODAL AC'
SYSNOISE_SUBT1(1,2)='CELERATI '
SYSNOISE_SUBT1(1,3)='ON VALU'
SYSNOISE_SUBT1(1,4)='ES'

*do,i,1,k,1
num_t(1,1)=T_U(i,1,1) !按次序取TIME值
*VWRITE,num_t(1,1)
%20.8E

*VWRITE,SYSNOISE_SUBT1(1,1) ,SYSNOISE_SUBT1(1,2) ,SYSNOISE_SUBT1(1,3) ,SYSNOISE_SUBT1(1,4)
%C%C%C%C

*do,j,1,nmax,1

NSOL,2,j,U,X,UX ! 定义第二个变量为UX,值为j号节点X方向的位移
DERIV,3,2,1,,,,,1 ! 将位移对时间求导,得到速度,存为变量3
DERIV,4,3,1,,,,,1 ! 将速度对时间求导,得到加速度,存为变量4

VGET,T_U(1,2,1),4 ! 矩阵的第2列保存第四个时间历程变量,j号节点X方向的加速度时间历程结果
num_t(1,2)=T_U(i,2,1) !将与i对应的j节点的X加速度值赋给num_t的第2列

NSOL,5,j,U,Y,UY ! 定义第5个变量为UY,值为j号节点Y方向的位移
DERIV,6,5,1,,,,,1 ! 将位移对时间求导,得到速度,存为变量6
DERIV,7,6,1,,,,,1 ! 将速度对时间求导,得到加速度,存为变量7

VGET,T_U(1,3,1),7 ! 矩阵的第3列保存第7个时间历程变量,j号节点Y方向的加速度时间历程结果
num_t(1,3)=T_U(i,3,1) !将与i对应的j节点的Y加速度值赋给num_t的第3列

NSOL,8,j,U,Z,UZ ! 定义第8个变量为UZ,值为j号节点Z方向的位移
DERIV,9,8,1,,,,,1 ! 将位移对时间求导,得到速度,存为变量9
DERIV,10,9,1,,,,,1 ! 将速度对时间求导,得到加速度,存为变量10

VGET,T_U(1,4,1),10 ! 矩阵的第4列保存第10个时间历程变量,j号节点Z方向的加速度时间历程结果
num_t(1,4)=T_U(i,4,1) !将与i对应的j节点的Z加速度值赋给num_t的第4列

num_t(1,5)=j

*VWRITE,num_t(1,5),num_t(1,5),num_t(1,2),0,num_t(1,3) ! 将时间历程结果数据写到数据结果文件中,0为虚部及旋转加速度值
%10I%10I%20.8E%20.8E%20.8E

*VWRITE,0,num_t(1,4),0
(20X,E20.8,E20.8,E20.8)

*VWRITE,0,0,0
(20X,E20.8,E20.8,E20.8)

*VWRITE,0,0,0
(20X,E20.8,E20.8,E20.8)

*enddo

*IF,i,EQ,k,THEN
*EXIT
*ENDIF

*VWRITE,SYSNOISE_TITLE(1,1) ,SYSNOISE_TITLE(1,2) ,SYSNOISE_TITLE(1,3) ,SYSNOISE_TITLE(1,4)
%C%C%C%C

*enddo

*CFCLOS

FINISH其中参考了yiby的一部分,谢谢

yiby 发表于 2006-4-19 09:40

haohaosir能否提供更多的有关fre文件格式?

frogfish 发表于 2006-4-19 14:02

ansys版也提供了一个程序http://forum.vibunion.com/thread-10631-1-1.html

haohaosir 发表于 2006-4-19 14:43

第2种方法将Ansys计算结果(比如加速度值)写为fre文件的命令流
/POST26

NSOL,2,231,U,Z,UY_2 ! 定义第二个变量为UY_2,值为10号节点Y方向的位移,节点可任选,但要保证其值非0
XVAR,1 ! 定义时间变量为坐标横轴
PLVAR,2
*GET,num_var,VARI,0, NSETS ! 将变量长度值赋给变量num_var
k=num_var

*DIM,SYSNOISE_TITLE,CHAR,5,4
SYSNOISE_TITLE(1,1)='SYSNOISE '
SYSNOISE_TITLE(1,2)=' ACCELER '
SYSNOISE_TITLE(1,3)='ATIONS '
SYSNOISE_TITLE(1,4)=' FILE'

SYSNOISE_TITLE(2,1)='Rev 5.5 '
SYSNOISE_TITLE(2,2)=' IBM P2E '
SYSNOISE_TITLE(2,3)='SSL 11'
SYSNOISE_TITLE(2,4)='-AUG-02 '

SYSNOISE_TITLE(3,1)='ACCELERA'
SYSNOISE_TITLE(3,2)='TION_St'
SYSNOISE_TITLE(3,3)='ructure '
SYSNOISE_TITLE(4,1)='11-AUG-2002 '
SYSNOISE_TITLE(4,2)=' 10:07 '
SYSNOISE_TITLE(4,3)=':13 '

SYSNOISE_TITLE(5,1)='TIME'
*CFOPEN,ACCE1,fre ! 定义数据结果文件,ACCE.fre

*VWRITE,SYSNOISE_TITLE(1,1) ,SYSNOISE_TITLE(1,2) ,SYSNOISE_TITLE(1,3) ,SYSNOISE_TITLE(1,4)
%C%C%C%C

*get,nmax,node,,num,max, !得到节点编号的最大数
kk=nmax*3+1

*DIM,T_U,ARRAY,k,kk! 定义保存时间历程结果的矩阵T_U,有num_var行,kk列
VGET,T_U(1,1,1),1 ! 矩阵的第一列保存第一个时间历程变量(默认为TIME)

*dim,num_t,,1,5 !定义一个数组

*DIM,SYSNOISE_SUBT1,CHAR,1,4
SYSNOISE_SUBT1(1,1)='NODAL AC'
SYSNOISE_SUBT1(1,2)='CELERATI '
SYSNOISE_SUBT1(1,3)='ON VALU'
SYSNOISE_SUBT1(1,4)='ES'
s=1
*do,j,1,nmax,1

NSOL,2,j,U,X,UX ! 定义第二个变量为UX,值为j号节点X方向的位移
DERIV,3,2,1,,,,,1 ! 将位移对时间求导,得到速度,存为变量3
DERIV,4,3,1,,,,,1 ! 将速度对时间求导,得到加速度,存为变量4
s=s+1
VGET,T_U(1,s,1),4 ! 矩阵的第s列保存第四个时间历程变量,j号节点X方向的加速度时间历程结果

NSOL,5,j,U,Y,UY ! 定义第5个变量为UY,值为j号节点Y方向的位移
DERIV,6,5,1,,,,,1 ! 将位移对时间求导,得到速度,存为变量6
DERIV,7,6,1,,,,,1 ! 将速度对时间求导,得到加速度,存为变量7
s=s+1
VGET,T_U(1,s,1),7 ! 矩阵的第s列保存第7个时间历程变量,j号节点Y方向的加速度时间历程结果

NSOL,8,j,U,Z,UZ ! 定义第8个变量为UZ,值为j号节点Z方向的位移
DERIV,9,8,1,,,,,1 ! 将位移对时间求导,得到速度,存为变量9
DERIV,10,9,1,,,,,1 ! 将速度对时间求导,得到加速度,存为变量10
s=s+1
VGET,T_U(1,s,1),10 ! 矩阵的第s列保存第10个时间历程变量,j号节点Z方向的加速度时间历程结果

*enddo

*do,i,1,k,1
num_t(1,1)=T_U(i,1,1) !按次序取TIME值
*VWRITE,num_t(1,1)
%20.8E

*VWRITE,SYSNOISE_SUBT1(1,1) ,SYSNOISE_SUBT1(1,2) ,SYSNOISE_SUBT1(1,3) ,SYSNOISE_SUBT1(1,4)
%C%C%C%C

s=1
*do,j,1,nmax
s=s+1
num_t(1,2)=T_U(i,s,1) !将与i对应的j节点的X加速度值赋给num_t的第2列
s=s+1
num_t(1,3)=T_U(i,s,1) !将与i对应的j节点的Y加速度值赋给num_t的第3列

s=s+1
num_t(1,4)=T_U(i,s,1) !将与i对应的j节点的Z加速度值赋给num_t的第4列

num_t(1,5)=j

*VWRITE,num_t(1,5),num_t(1,5),num_t(1,2),0,num_t(1,3) ! 将时间历程结果数据写到数据结果文件中,0为虚部及旋转加速度值
%10I%10I%20.8E%20.8E%20.8E

*VWRITE,0,num_t(1,4),0
(20X,E20.8,E20.8,E20.8)

*VWRITE,0,0,0
(20X,E20.8,E20.8,E20.8)

*VWRITE,0,0,0
(20X,E20.8,E20.8,E20.8)

*enddo

*IF,i,EQ,k,THEN
*EXIT
*ENDIF

*VWRITE,SYSNOISE_TITLE(1,1) ,SYSNOISE_TITLE(1,2) ,SYSNOISE_TITLE(1,3) ,SYSNOISE_TITLE(1,4)
%C%C%C%C

*enddo

*CFCLOS

FINISH

该方法与上次传的相比:计算量大大减少、因此速度要快!
因为第一种方法每写一步数据,变量需要计算一次。第2种方法是变量一次计算完毕,然后将结果保存在数组里,需要写时再提取。但其缺点是当时间步很多、而且模型节点数庞大时需要非常大的数据存储空间。

frogfish 发表于 2006-4-19 14:44

哇,好厉害,多谢多谢

haohaosir 发表于 2006-4-19 15:05

将Ansys瞬态计算的加速度值写为fre文件后,在Sysnoise里通过FEA可以加上加速度边界条件,然后进行时域计算。
但Sysnoise时域计算好象不能求解场点声压值?不知为何?

suibianba 发表于 2008-1-4 21:19

请问为什么命令流进行到*VWRITE,SYSNOISE_TITLE(1,1) ,SYSNOISE_TITLE(1,2) ,SYSNOISE_TITLE(1,3) ,SYSNOISE_TITLE(1,4)
%C%C%C%C就提示错误%C%C%C%C不是可识别的后处理命令?怎么会出现这种情况,困扰很久了!

whyingpost 发表于 2008-2-2 12:26

请问这种方法导出的fre文件,可以直接作为sysnoise的边界条件文件输入么?

w89986581 发表于 2008-2-2 12:45

你可以试试,不过在计算之前,抽取一些节点出来,检查边界条件是否加载正确。

whyingpost 发表于 2008-2-2 12:49


请问sysnoise边界条件文件类型有要求么?
我记得好像在哪见过要用rst文件

w89986581 发表于 2008-2-2 14:24

那个是转换程序(论坛上有),一般个人编写的程序通用性比较差,要用的话必须知道他的思路,加以修改以后才能使用.

whyingpost 发表于 2008-2-2 14:56

sysnoise不能直接import ansys的谐响应结果么?

w89986581 发表于 2008-2-2 15:50

不可以的,尤其是不同版本ansys导出的文件格式还不同.
sysnoise计算流固耦合是比较有特点的,对于表面边界条件都已知的情况,计算辐射声场时可以自己写程序算啊,什么内存限制问题都没有拉,呵呵.

[ 本帖最后由 w89986581 于 2008-2-2 15:55 编辑 ]

whyingpost 发表于 2008-2-2 23:08

计算辐射声场时可以自己写程序算啊,

你是指自己编fortran代码那样的程序嘛?
原以为用sysnoise算,能省力些:@L

[ 本帖最后由 whyingpost 于 2008-2-3 00:01 编辑 ]

whyingpost 发表于 2008-2-2 23:13

SYSNOISE DISPLACEMENTS FILE                                                      
Rev 5.2 SGI IRIX   21-APR-95                                                   
Set number         4(Elements)                            18-JUN-1996 09:30:25
18-JUN-1996 10:57:09                                                            
FREQUENCY                                                                        
      0.10000000E+01                                                            
NODAL DISPLACEMENT VALUES                                                      
         1         1   -0.17373156E-05      0.10418802E-05      0.30898480E-05
                         -0.46854776E-05      0.00000000E+00      0.00000000E+00
                        0.00000000E+00      0.00000000E+00      0.00000000E+00
                        0.00000000E+00      0.17498594E-04      0.10095929E-05
         2         2   -0.30714280E-05      0.96336395E-06      0.28785498E-05
                         -0.46979131E-05      0.00000000E+00      0.00000000E+00
                        0.00000000E+00      0.00000000E+00      0.00000000E+00
                        0.00000000E+00      0.17026132E-04      0.10225364E-05
         

这是sysnoise自带的example里面的2Dcar中作为位移边界条件的一个文件
请问你知道它这个矩阵是怎么排列的嘛?
为什么每个节点号后面跟的位移值都有4行3列这么多阿?
这3列是代表xyz三个方向嘛?
如果是的话
那么4行又代表什么呢?

[ 本帖最后由 whyingpost 于 2008-2-2 23:14 编辑 ]
页: [1] 2
查看完整版本: [原创]提供Ansys计算结果(比如加速度值)写成fre文件的命令流