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

请问一下怎么在命令流中实现函数编辑器的功能?

[复制链接]
发表于 2005-5-12 17:54:12 | 显示全部楼层 |阅读模式 来自 湖南长沙
现在有一个载荷,比较复杂,所以只能用函数编辑器进行定义,但是现在做的问题的重复次数比较多,所以必须要用命令流进行迭代循环.所以就想通过命令流直接实现函数编辑器的功能,但是我把用gui方式调用函数编辑器的命令流文件导出后,发现基本上看不懂,而且直接使用的话,也不正确.请高手帮我.
以下是我导出的命令流
*DEL,_FNCNAME   
*DEL,_FNCMTID   
*SET,_FNCNAME,'asd'
! /INPUT,myload_1.func  
*DIM,%_FNCNAME%,TABLE,6,23,1
!   
! Begin of equation: 8000*exp(-2*({X}^2+{Y}^2)/0.002^2)/({PI}*0.002)
*SET,%_FNCNAME%(0,0,1), 0.0, -999   
*SET,%_FNCNAME%(2,0,1), 0.0
*SET,%_FNCNAME%(3,0,1), 0.0
*SET,%_FNCNAME%(4,0,1), 0.0
*SET,%_FNCNAME%(5,0,1), 0.0
*SET,%_FNCNAME%(6,0,1), 0.0
*SET,%_FNCNAME%(0,1,1), 1.0, -1, 0, 0, 0, 0, 0  
*SET,%_FNCNAME%(0,2,1), 0.0, -2, 0, 1, 0, 0, -1
*SET,%_FNCNAME%(0,3,1),   0, -3, 0, 1, -1, 2, -2
*SET,%_FNCNAME%(0,4,1), 0.0, -1, 0, 2, 0, 0, -3
*SET,%_FNCNAME%(0,5,1), 0.0, -2, 0, 1, -3, 3, -1
*SET,%_FNCNAME%(0,6,1), 0.0, -1, 0, 2, 0, 0, 2  
*SET,%_FNCNAME%(0,7,1), 0.0, -3, 0, 1, 2, 17, -1
*SET,%_FNCNAME%(0,8,1), 0.0, -1, 0, 2, 0, 0, 3  
*SET,%_FNCNAME%(0,9,1), 0.0, -4, 0, 1, 3, 17, -1
*SET,%_FNCNAME%(0,10,1), 0.0, -1, 0, 1, -3, 1, -4   
*SET,%_FNCNAME%(0,11,1), 0.0, -3, 0, 1, -2, 3, -1   
*SET,%_FNCNAME%(0,12,1), 0.0, -1, 0, 0.002, 0, 0, 0
*SET,%_FNCNAME%(0,13,1), 0.0, -2, 0, 2, 0, 0, -1
*SET,%_FNCNAME%(0,14,1), 0.0, -4, 0, 1, -1, 17, -2  
*SET,%_FNCNAME%(0,15,1), 0.0, -1, 0, 1, -3, 4, -4   
*SET,%_FNCNAME%(0,16,1), 0.0, -1, 7, 1, -1, 0, 0
*SET,%_FNCNAME%(0,17,1), 0.0, -2, 0, 8000, 0, 0, -1
*SET,%_FNCNAME%(0,18,1), 0.0, -3, 0, 1, -2, 3, -1   
*SET,%_FNCNAME%(0,19,1), 0.0, -1, 0, 3.14159265358979310, 0, 0, 0   
*SET,%_FNCNAME%(0,20,1), 0.0, -2, 0, 0.002, 0, 0, -1
*SET,%_FNCNAME%(0,21,1), 0.0, -4, 0, 1, -1, 3, -2   
*SET,%_FNCNAME%(0,22,1), 0.0, -1, 0, 1, -3, 4, -4   
*SET,%_FNCNAME%(0,23,1), 0.0, 99, 0, 1, -1, 0, 0
! End of equation: 8000*exp(-2*({X}^2+{Y}^2)/0.002^2)/({PI}*0.002)  
!-->
发表于 2005-5-12 20:49:44 | 显示全部楼层 来自 美国

Re:请问一下怎么在命令流中实现函数编辑器的功能?

Simdroid开发平台
using paremeters ARG1,ARG2...  to substitue the value...
e.g.  

define: q*exp(-2*({X}^2+{Y}^2)/r^2)/({PI}*r)

instead of:

8000*exp(-2*({X}^2+{Y}^2)/0.002^2)/({PI}*0.002)

The simplest way is:

find all 8000 in the code, replace them with ARG1
find all 0.002 in the code, replace them with ARG2
发表于 2005-5-13 10:51:22 | 显示全部楼层 来自 陕西西安

Re:请问一下怎么在命令流中实现函数编辑器的功能?

记得以前有不少关于高斯热源的讨论!
楼主可以搜索一下看看
发表于 2005-5-13 10:55:15 | 显示全部楼层 来自 陕西西安

Re:请问一下怎么在命令流中实现函数编辑器的功能?

以前看到的一段命令流,忘了是谁的原创了,看看对楼主可否有帮助!
没有侵权的意思哦!
num_x=pf_en+1
num_y=phl_en+1
num_time=timend/tinc+1
   
*dim,flux3,table,num_x,num_y,num_time,x,y,time
   
/com: timstep=pf_es/v !每个加热区单元的尺寸
/com: phl_en !加热区的单元数
   
radius=pfw_hr/2 !高斯热源作用的半径
   
*do,k,1,num_time,1
   
   *do,j,1,num_y,1 !列y赋值
     
     flux3(0,j,k)=(j-1)*pf_es
     
   *enddo
     
   *do,ii,1,num_x,1 ! !行x赋值
     
     flux3(ii,0,k)=-0.5*(pf_en*pf_es)+(ii-1)*pf_es
     
   *enddo
     
   ydist=v*(k-1)*tinc
     
     *do,j,0,timend,tinc
       *do,i,1,num_x,1 !x坐标
           
         ycoor=v*j
                                 
         xcoor=-0.5*(pf_en*pf_es)+(i-1)*pf_es
           
         r=sqrt((ycoor-ydist)**2+xcoor*xcoor)
           
         *if,r,le,radius,then
            
           gauss=qmax/exp(k*r*r/1000000)
           flux3(i,j/tinc+1,k)=gauss !*10e5
           
         *endif
      
       *enddo
     *enddo
      
   flux3(0,0,k)=(k-1)*tinc !页time赋值
     
*enddo
 楼主| 发表于 2005-5-13 15:40:59 | 显示全部楼层 来自 湖南长沙

Re:请问一下怎么在命令流中实现函数编辑器的功能?

谢谢斑竹,仔细研究一下.
 楼主| 发表于 2005-5-14 08:28:21 | 显示全部楼层 来自 湖南长沙

Re:请问一下怎么在命令流中实现函数编辑器的功能?

iomega兄,你提的建议很好,我仔细想了一下,可以把定义的函数式直接作为一个变量的值,不过这样做的关键在于怎样取得要加载的节点的坐标值,当然可以利用*get函数来取,不过我不知道节点的编号啊.于是我想了一下,能不能这样,先通过nsel命令选择坐标值在一定范围内的节点,然后利用一个命令得到选中的节点个数.然后利用*do.........*enddo循环,逐个取得选中的节点的坐标,再分别代入定义的函数表达式,分别加载.循环完成后,区域内的节点也已经加上了不同的载荷,然后一起求解.
呵呵,这样的想法应该是可行的,不过还是有一个问题,就是我怎么样才能获得我选中的节点的数量?
有一本书上这样做:
nsel,all     !选择所有节点
*get,nnode,node,,num,max  !提取节点数目并存储到变量nnode
我实际做了一下,并看了一下帮助文档,感觉上述语句只是把所有节点中编号的最大值取了出来.同样这条命令也能把编号的最小值取出来.呵呵,如果在我的问题中,区域内节点的编号是连续的就好了,但很可惜,节点的编号并不连续,有5000多的,也有90000多的.
所以想请教一下,所选择的节点数量怎么得到?用命令流.
发表于 2005-5-14 17:27:01 | 显示全部楼层 来自 江苏镇江

Re:请问一下怎么在命令流中实现函数编辑器的功能?

可以问一下怎么用函数编辑器编辑偏导形式的边界条件吗?
发表于 2005-5-15 00:22:16 | 显示全部楼层 来自 美国

Re:请问一下怎么在命令流中实现函数编辑器的功能?

*get,nnode,node,0,COUNT
!Number of nodes in the selected set
发表于 2005-5-15 00:33:57 | 显示全部楼层 来自 美国

Re:请问一下怎么在命令流中实现函数编辑器的功能?

*get,nnode,node,0,COUNT
!Number of nodes in the selected set
发表于 2005-5-15 00:35:34 | 显示全部楼层 来自 美国

Re:请问一下怎么在命令流中实现函数编辑器的功能?

看了大家的例子,都是用在某个时刻选择特定范围内点来施加热源,来实现移动热源。不知到大家为什么不把热源表示成速度的函数,这样既省得写一大段code,速度又快。 (ANSYS的循环语句是很慢的)。
例如:高斯热源在x方向以V移动,初始位置为(x0,y0):

q*exp(-(({X}-V*{TIME}-X0)^2+({Y}-Y0)^2)/r^2)
发表于 2005-5-15 00:37:57 | 显示全部楼层 来自 美国

Re:请问一下怎么在命令流中实现函数编辑器的功能?

看了大家的例子,都是用在某个时刻选择特定范围内点来施加热源,来实现移动热源。不知到大家为什么不把热源表示成速度的函数,这样既省得写一大段code,速度又快。 (ANSYS的循环语句是很慢的)。
例如:高斯热源在x方向以V移动,初始位置为(x0,y0):

q*exp(-(({X}-V*{TIME}-X0)^2+({Y}-Y0)^2)/r^2)
 楼主| 发表于 2005-5-15 08:43:56 | 显示全部楼层 来自 湖南长沙

Re:请问一下怎么在命令流中实现函数编辑器的功能?

iomega兄,把热源表示成速度的函数以后.在某个时刻,这时热源作用的区域的中心点的坐标可以通过定义的参数得到.不过这个时候,热源函数表达式中的{x}和{y}是作用区域内节点的坐标.这样的话,光是定义不同节点对应的热源函数表达式就比较麻烦了,何况最后还要把定义好的热源加载到节点上.
使用SF命令只能对一批节点加载相同的面载荷,不能对单个节点加载.
我觉得这里还是要使用一个表格类型的参数,用来定义不同节点对应的热源函数表达式,这样的话,在加载的时候,可以直接使用SF命令把这个表格型的面载荷加到作用区域内的节点上.不过函数定义好以后,如何与节点对应起来,我就不清楚了,现在正在仔细看参考书,希望能找到一点线索.
发表于 2008-12-20 10:15:23 | 显示全部楼层 来自 北京

!!!

函数编辑器的能把这个高斯热源变成函数表格?  请高人确认下?
回复 不支持

使用道具 举报

发表于 2010-4-13 15:53:23 | 显示全部楼层 来自 吉林长春
先分享一下,回头仔细研究!
回复 不支持

使用道具 举报

发表于 2010-4-22 15:48:06 | 显示全部楼层 来自 辽宁沈阳
先记录了,分享一下,回头仔细研究!
回复 不支持

使用道具 举报

发表于 2010-5-30 19:11:55 | 显示全部楼层 来自 陕西西安
很好的东西
回复 不支持

使用道具 举报

发表于 2011-5-18 17:00:45 | 显示全部楼层 来自 河北秦皇岛
先收藏了,有机会肯定用的上的好东西。
回复 不支持

使用道具 举报

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

本版积分规则

Simapps系列直播

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

GMT+8, 2024-9-20 08:50 , Processed in 0.055711 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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