24小时热门版块排行榜    

查看: 2898  |  回复: 6

xiaoyueriyue

金虫 (正式写手)

[求助] ANSYS后处理*vput的使用 已有1人参与

Sample Text
各位在ANSYS有限元模拟后处理时候有用到*vput命令吗?
我的问题是这样的,一个热模拟结束之后,我建立了温度的单元表,使用etable命令,然后建立一个数组,维数跟单元表的单元数目相同,使用*get命令把单元表中的数据转入到数组中,然后对数组进行数值运算,想把运算结果显示出来,按照ANSYS的帮助文档,应该使用*vput命令流,但是弹出以下提示信息:
Data record dose not exist for *vput of some Elem entities requested。用Pletab得到的结果也不是运算的数组的结果。请问大家有人遇到这种情况吗?

大家对数据输出是怎么处理的呢?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

htbbzzg

铁杆木虫 (著名写手)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
xiegangmai: 金币+2, 谢谢参与! 2013-05-02 23:10:23
1  在执行 *vput 前,应当先执行一次:  /GRAPHICS, FULL,否则结果是不对的 (见帮助文件);
2  可以先用 GUI 方式执行一下,看结果如何:
       Utility Menu > Parameters > Array Operations > Put Array Data
2楼2013-05-02 09:04:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiaoyueriyue

金虫 (正式写手)

我试过了,GUI和命令流的方法都使用过,都弹出一样的warning
命令流如下:
*VPUT,TSV_migration_thermal(1),ELEM,,ETAB,TSV_CO_1, , ,2
3楼2013-05-02 22:20:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

htbbzzg

铁杆木虫 (著名写手)

【答案】应助回帖

★ ★ ★
xiegangmai: 金币+3, 谢谢参与! 2013-05-03 23:38:43
你没有给出该语句之前的操作情况,只能比较一下 *vput 语句的格式以及你所用的语句,
*VPUT,        ParR,            Entity, ENTNUM, Item1,   IT1NUM,  Item2, IT2NUM, KLOOP
*VPUT,TSV_migration_thermal(1),  ELEM,       ,  ETAB  ,TSV_CO_1,       ,      ,   2

你的语句中没有给 ENTNUM 赋值 (对于你的情况,应该是单元表中的单元个数),但是 KLOOP 为 2,表示是按 ENTNUM 进行循环,是否此处有问题?

也可能是你定义的单元表有问题,或者没有给单元表赋值。
4楼2013-05-03 08:28:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiaoyueriyue

金虫 (正式写手)

试过了,命令流改成
*VPUT,TSV_migration_thermal(1),  ELEM,   elenum    ,  ETAB  ,TSV_CO_1,       ,      ,   2
(elenum 是所有单元的总数)也没有得到应该要的结果
之前先定义了一个单元表 TSV_co_1,是用来做备份的,在数组计算后就把数组中的数据存入这个单元表中,想法是覆盖以前定义的单元表TSV_co_1,然后就这个单元表显示出来就得到了运算后数组的输出结果。
具体的命令流如下:
!*************table of temperature distribution******
etable,TSV_temp,temp
!*************备份一个单元表,以备此后的*vput使用*******
etable,TSV_co_1,temp
!*************table of temperature gradient distribution******
etable,TSV_tg,TG,SUM
!*************table of current density distribution*********
etable,TSV_js,JS,SUM
!******define some arrays**********
!******define the array of temperature********
*dim,temp_TSV,array,elenum
!******define the array dot of current density and temperature gradient******
*dim,js_tg_TSV,array,elenum
!******define the square of current density*******
*dim,js2_TSV,array,elenum
!******put the element table into the array defined******
*do,i,1,elenum,1
   
        *get,temp_TSV(i),elem,i,etab,TSV_temp
        *get,js_tg_TSV(i),elem,i,etab,TSV_jt
*enddo
!*******calculation of the div(Jm))**********
*voper,TSV_temp_daoshu,1,div,temp_TSV,
*voper,TSV_temp_1,TSV_temp_daoshu,mult,TSV_temp_daoshu
*voper,TSV_temp_2,TSV_temp_1,mult,Ea
。。。。。。

*voper,TSV_migration_electronic,TSV_temp_14,mult,TSV_temp_10
*VPUT,TSV_migration_thermal(1),ELEM,elenum,ETAB,TSV_CO_1, , ,2
!******finish of the calculation of electromigration due to EWN*******
pletab,TSV_co_1,noav
5楼2013-05-03 09:59:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

woshigengen

银虫 (初入文坛)

【答案】应助回帖

*V系列的命令 k循环项的控制 是从指定的编号开始 以1为单位递增 通常取出来的某一部分单元 编号并不是连续的 有种说法是把想取结果的部分先画网格以图编号连续 但我觉这是治标不治本
我曾经以为 这一限制 使得*v命令的过程 只能通过do循环+*get来解决 而*get所需要的单元编号 可以选完单元之后定义一个单元编号数组 这个数组纬度是所选择的全部单元数目(比如100,但并不代表所选单元编号也是1~100)
直到在网上看到了*vmask这个命令 它的作用是定义一个标识数组 里面标识出对于编号为1~n的单元 哪些被选上了 哪些没被选 这样后面的*vput、*vget命令 即可从最小编号开始做 没被选上的会跳过(实际不是跳过去 而是赋0值) 这样的话 可以任何数组读入到单元表里 与单元表结果做各种运算 或者更灵活的 是将单元表结果取出 外处理后再读进去
dnsol、desol也可以改节点结果、单元结果,但无奈都是直接结果或导出结果 并不如单元表结果那样完整
分享一个网址 单元表与数组交互信息在tips64
http://home.cogeco.ca/~pbudgell/ANSYS_tips.html#T62

ps.借此提个问题:单元表如果list的话 会看到是按所选单元编号由小到大顺序排序的 假设b列是我定义的结果列 可用esort对该列排序 我的问题是 排好序之后 第一个数据就是最大或最小值了 怎么在程序里把这个数取出来?因为*get和*vget都需要告诉命令单元号 但排序结束后的单元号是不知道的 我目前的方法是不用esort 直接把编号列和b列导出数组 用循环和判断来排序 但既然有esort了 再写程序就可臃肿了
6楼2014-07-17 11:14:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

田七525

铁杆木虫 (小有名气)

Ph. D

引用回帖:
6楼: Originally posted by woshigengen at 2014-07-17 11:14:59
*V系列的命令 k循环项的控制 是从指定的编号开始 以1为单位递增 通常取出来的某一部分单元 编号并不是连续的 有种说法是把想取结果的部分先画网格以图编号连续 但我觉这是治标不治本
我曾经以为 这一限制 使得*v命 ...

可以用*GET, Par, ELEM,  0, NUM, IT1NUM,MIN;
获得被选中的单元中单元的最小编号
艹他妈的假学术
7楼2017-03-31 14:18:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 xiaoyueriyue 的主题更新
信息提示
请填处理意见