找回密码
 注册
Simdroid-非首页
查看: 13988|回复: 171

【原创】如何在ANSYS中调用其他程序(matlab, C, fortran)和数据交换

[复制链接]
发表于 2006-3-17 13:34:25 | 显示全部楼层 |阅读模式 来自 美国
ANSYS虽然比较强大,但是不能象Femlab一样自定义模型方程。在某些情况下,必须用当前step的解作为条件,根据某些物理条件来改变单元的材料属性以及载荷,作为下一个step的初始条件。 用ANSYS自带的APDL可用于一般的流程控制,如果要实现特定的复杂物理模型就比较困难,而且速度极慢。可行的办法就是在ANSYS运行中把每一个step的结果传给外部程序,用来计算下一步的载荷和单元属性。

A. 和外部程序交换数据,首先要处理好协同问题,一般可用一下两种方法:
(1)ANSYS 和 外部程序同时运行 -- 需要建立一个flag文件。通过在ANSYS和程序中读其内容来判断对方是否在运行。在ANSYS和外部程序运行完一个step,改变flag,告诉对方自己当前运行结束,对方可以继续运行,否则必须等待。

(2)在ANSYS中调用/SYS命令执行外部程序。 此时ANSYS会暂时停止运行,直到外部程序结束运行,把执行权交还给ANSYS。

(1)适用与matlab等非编译语言。 (2)适用与C和Fortran等编译语言。

B. 如何在外部程序中告诉ANSYS改变单元属性和载荷变化:

在从ANSYS中导入数据后,外部程序一般可以根据具体物理模型来创建.mac文件,然后在此文件中写入MPCHG等APDL命令。例如用C创建一个"MD.mac"文本文件,用fsprintf(fp,"MPCHG %d,%d", element_num, Material_ID). 当程序结束运行,在ANSYS中用*use, MD.mac 来实现加载和单元属性的改变。

C. 如何在ANSYS和外部程序中传递数据。

一般在ANSYS中把当前结果写在数据文件中, 在外部程序中读取。一般常用的命令有*MOPER。*MOPER可以把节点(node)的结果例如T(x,y,z) 自动根据插值计算映射到用户自己定义的网络上。 然后可以用*MWRITE写入数据文件。例如,如果用free mesh, node 的 坐标可能是很混乱的。用MOPER可以把结果映射到特定的有序的网络 (x0->x1,dx;y0->y1,dy;z0->z1,dz).

附上一个例子结果: transient simulation of optical phase change recording.
模拟可擦写光盘的读写过程。用ANSYS模拟激光加热光盘,每一步matlab读取温度场,并用相变模型模拟出写的记录点形状,然后根据记录点形状来修改所对应的单元热属性和加载(激光吸收的能量),反馈给ANSYS做下一部计算。

上图是开始和最后的温度场(ANSYS), 下图是开始和最后光盘上记录的形状(Matlab)。激光从左向右移动。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

发表于 2006-3-18 18:44:31 | 显示全部楼层 来自 辽宁抚顺

Re:【原创】如何在ANSYS中调用其他程序(matlab, C, fortran)和数据交换

Simdroid开发平台
赞!很好的帖子,提供了很大的思维空间。
ANSYS中读取FLAG,可以。但是怎么在载荷步之间等待消息啊,ANSYS有等待命令吗?
 楼主| 发表于 2006-3-19 02:49:51 | 显示全部楼层 来自 美国

Re:【原创】如何在ANSYS中调用其他程序(matlab, C, fortran)和数据交换

所以在ANSYS中,一旦完成当前步运算,要设置flag,告诉matlab去处理结果,同时在ANSYS中立即进入一个loop,来判断matlab是否完成处理(reset flag in matlab)。 在matlab中也有相对应的loop.
发表于 2006-3-22 07:48:27 | 显示全部楼层 来自 湖北武汉

Re:【原创】如何在ANSYS中调用其他程序(matlab, C, fortran)和数据交换

两位好,我是从事选择性激光烧结研究的,我也存在每一个载荷步结束后,下一个载荷步的材料属性发生改变的问题,如上所示。
两位朋友给了我几个参考:
1.利用外部程序,如上例所示;
2.利用Ansys重启动功能;

我自己测试了Save-Resume方法,测试发现Resume命令不会从当前循环中跳出,位移的问题,就是Save到Resume之间的参数,工作等操作被丢弃,所以,本人在

在整个计算过程中不变的操作(几何模型、材料、单元、划分等)
SAVE
.
.
.
*DO,I,1,NSTEP
PARSAVE,ALL
RESUME
PARRES,...
!/SOLU分析类型
!载荷步选项
!载荷(各种边界条件)
!SOLVE求解
!/POST1输出结果(PGR/FILE)
*ENDDO
!***********************************************************!
我正在测试采用物理文件法PHYSICS解决上述问题...
w_biermann 该用户已被删除
发表于 2006-4-15 00:21:50 | 显示全部楼层 来自 陕西西安
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2006-10-30 16:55:13 | 显示全部楼层 来自 大连理工大学
牛  !!!!!!!!!!!!
要好好学习 超过版主
发表于 2007-3-10 00:23:52 | 显示全部楼层 来自 美国

谢谢斑竹

斑竹真牛,仰慕。。
好好学习,向斑竹学习压
发表于 2007-3-10 10:31:42 | 显示全部楼层 来自 湖北武汉

感谢

斑竹能否把您的APDL代码与协同调用完整代码贴上来共享,先感谢斑竹的奉献和大公无私精神!
发表于 2007-3-30 10:34:35 | 显示全部楼层 来自 天津
我都好想知道他们之间怎么转化
觉得斑竹好厉害的
发表于 2007-3-30 17:14:17 | 显示全部楼层 来自 江苏南京
Good!!!
发表于 2007-4-5 16:35:37 | 显示全部楼层 来自 江苏南京
excellent
发表于 2007-4-15 16:46:42 | 显示全部楼层 来自 上海交通大学闵行校区
好!bucuo!
发表于 2007-4-16 21:49:30 | 显示全部楼层 来自 上海
给人提供想象的空间
发表于 2007-7-3 21:28:30 | 显示全部楼层 来自 云南昆明
好贴子,但是apdl怎么使用呢?
回复 不支持

使用道具 举报

发表于 2007-9-13 21:52:32 | 显示全部楼层 来自 浙江杭州
lz的方法很好,ansys自带求解器速度实在不能忍受,cpu利用率只有10%,我来尝试一下楼主的方法
回头反馈
回复 不支持

使用道具 举报

发表于 2007-9-23 12:09:56 | 显示全部楼层 来自 北京海淀
版主这样的高手不是一般人能达到的,感谢你给我们提供了一个无止境的奋斗目标。
回复 不支持

使用道具 举报

发表于 2007-9-27 20:22:51 | 显示全部楼层 来自 江苏南京
太牛了,顶一下
回复 不支持

使用道具 举报

发表于 2007-10-30 19:33:27 | 显示全部楼层 来自 北京朝阳
好帖子!! 谢谢!支持!
回复 不支持

使用道具 举报

发表于 2007-12-15 01:17:08 | 显示全部楼层 来自 北京
好帖子!!
回复 不支持

使用道具 举报

发表于 2008-3-30 09:37:32 | 显示全部楼层 来自 安徽合肥
请问用 *Moper 进行网格间结果映射时,是不是只能在二维网格进行,三维的做不了啊?
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-3-28 18:15 , Processed in 0.061449 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表