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

ANSYS数据处理小技巧

时间:2010-01-01 19:37:16 来源:

  前一阵做了一个小分析,需要的结果不仅是应力的最值与分布,还要具体到“最值的位置坐标”。要怎么才能最好的做到这一点呢?我想到了3个方法:
1.使用excel帮忙——最简单、最笨的方法
这就需要得到ansys关于解答的list,这个好办,直接用list相关命令就好了。不过有个问题,默认情况下,list之后的数据有这样的格式:
      36    2.1000     0.50000E-01  0.0000        0.00    0.00    0.00
      37    2.4000     0.50000E-01  0.0000        0.00    0.00    0.00
      38    2.7000     0.50000E-01  0.0000        0.00    0.00    0.00
      39    3.0000     0.50000E-01  0.0000        0.00    0.00    0.00
      40    3.3000     0.50000E-01  0.0000        0.00    0.00    0.00
   NODE        X           Y                      Z               THXY THYZ   THZX
      41    3.6000     0.50000E-01  0.0000        0.00    0.00    0.00
      42    3.9000     0.50000E-01  0.0000        0.00    0.00    0.00
      43    4.2000     0.50000E-01  0.0000        0.00    0.00    0.00
      44    4.5000     0.50000E-01  0.0000        0.00    0.00    0.00
 
往往是隔若干行,就出现了断档,严重影响到向excel导入的过程,不过有一个命令可以解决它,那就是/page
/PAGE, ILINE, ICHAR, BLINE, BCHAR
ILINE
每屏显示的行数,最少为11行,默认为24行;
ICHAR
单行字符数,41至132,默认为80;
BLINE
每页显示行数,最少为11,默认为56;
BCHAR
每行字符数,41至240,默认为132。与ichar不同的是,此项是由系统而定的。
通过它,可以导出一个格式相当规范的数据文件,然后用excel2007打开。我曾用excel2003尝试过,的确不如2007功能强大,2007在导入的过程中可以自定义数据列,这样就避免在导入后手动修理了。
之后的事情当然好办了,譬如选择一列,然后排序好了。
2.使用sort相关命令——最常用的方法
比如节点排列命令:
NSORT, Item, Comp, ORDER, KABS, NUMB, SEL
Item、Comp
排序对象的标签与项目,如LOC,U,S,PRES等,具体内容请查看帮助;
ORDER
排序选项:
0—降序排列。
1—升序排列。
KABS
绝对值选项:
0—按真实数值排列。
1—按绝对值排列。
NUMB
指定一个数量值,排序数据数量在达到这个值以后则停止,其他数据则仍然保持未排序的状态
SEL
允许在序列里选择操作
空值—默认为不选择
SELECT—选择序列中的节点
 多了就不必说了吧~
3.自己编辑小程序,比如下面我顺手写的:
!定义数组
*GET,NMAX,NODE,0,COUNT
*DIM,OJD,,NMAX
*DIM,JDUX,,NMAX
*DIM,JD,,NMAX
*GET,NOD1,NODE,0,NUM,MIN
!对选择的节点根据节点编号大小排序
OJD(1)=NOD1
*DO,I,2,NMAX
OJD(I)=NDNEXT(OJD(I-1))
*ENDDO
!记录每个节点的x最大位移
*DO,I,1,NMAX
JDUX(I)=UX(OJD(I))
*ENDDO
!找出最大值,这里没有用排序
*DO,I,2,NMAX
*IF,JDUX(I),EQ,JDUX(I-1),THEN
  T=JDUX(I)
*ELSEIF,JDUX(I),GT,JDUX(I-1),THEN
  T=JDUX(I)
*ELSEIF,JDUX(I),LT,JDUX(I-1),THEN
  T=JDUX(I-1)
*ENDIF
*ENDDO
!主要的问题是要找出出现最值的节点编号,而且有时最值的节点不止一个
*DO,I,1,NMAX
*IF,T,EQ,JDUX(I)
JD(I)=OJD(I)
*ENDIF
*ENDDO
!显示数组,不是最大值的项目被系统赋予一个很小的值
*STATUS,JD,
 
    这里要说明一下,以上的程序只是表明了一个思路,实践过程中也没有用到(因为似乎不必要^_^),况且貌似写的比较罗唆,希望有朋友交流一下。
总结:
    方法2是最好的,尽可能多地把数据处理的任务交给ansys自己完成是我的宗旨;对英文仍然不习惯的朋友可以用用方法1,毕竟使用熟悉的excel能做的事情还有很多;至于方法3么,建议打算练练手的同学考虑,很多时候不需要这样麻烦的~