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

[子程序/二次开发] 子程序介绍一:单元生死子程序active例子及说明(高手就不用进了)

[复制链接]
发表于 2010-3-19 10:56:00 | 显示全部楼层 |阅读模式 来自 北京海淀
本帖最后由 mlj0016 于 2010-3-25 11:25 编辑

挺长时间没上了,看到不少人问关于单元生死的问题,看来工作找的差不多,总算想起来要做毕设了,呵呵。之前稍微做过一点,有点经验,跟大家分享一下。高手就不用看了,最简单的例子而已。如下所示。

     subroutine uactive(m,n,mode,irststr,irststn,inc,time,timinc)
      include 'C:\MSC.Software\MSC.Marc\2005\marc2005\common/implicit'
      dimension m(2)
c
c     user routine to activate or deactivate an element
c
c     m(1)     - user element number
c     m(2)     - master element number for local adaptivity
c     n        - internal elsto number
c     mode=-1  - deactivate element and remove element from post file
c     mode=-11 - deactivate element and keep element on post file
c     mode=2   - leave in current status
c     mode=1   - activate element and add element to post file
c     mode=11  - activate element and keep status on post file
c     irststr  - reset stresses to zero
c     irststn  - reset strains to zero
c     inc      - increment number
c     time     - time at begining of increment
c     timinc   - incremental time
c
      dimension temp(8)
do i=1,8
CALL ELMVAR (9,M(1),i,1,temp(i))
tt=tt+temp(i)
enddo
tt=tt/8
if(tt.ge.660)then
mode=-1
endif
return
end

简单讲解一下吧。这个子程序的意思是,将温度大于660度的单元杀死。首先需要提取单元各节点的温度,也就是call... 这一句。
然后对其求平均值,是tt=tt+temp(i)和tt=tt/8这两句。
然后对得到的单元温度进行判断,看其是否大于660度,若大于,则杀死;否则不作处理。是从if...到end if这几句。

这个子程序非常简单,但对于新手还是有几个地方容易犯错。

首先就是fortran和marc之间没有连上,至于这个问题,就不细说了,大伙可以查一下以前的贴子。若是都有这个问题的话,我可以再开一个贴子介绍。

另外一个问题在 include 'C:\MSC.Software\MSC.Marc\2005\marc2005\common/implicit'这句上。很多人调试不成功,是因为你的这句可能还写着"...\common\implicit",或者你写的不是你的marc安装路径。

另外,再说明一下。如果你想在高温的时候把单元杀死,等降到低温后再激活,这是不太好实现的。因为在杀死单元之后,该单元就不再参与计算了,所以其温度保持在被杀死时候的温度,无法降温至你所设置的低温激活温度。或许有别的方法实现,大伙可以自己想一下。

再另外,在你开始编子程序之前,请仔细看一下该此程序中的说明。那些前面标了"c"的代码虽然不参与运算,但却是该子程序的重点。通过这些说明,你可以发现该子程序为我们提供了那些参数可以直接使用,那些参数是必须要设置的。活用这些参数,会让你事半功倍的。

好了,就不再另外了。大家有什么问题可以提出来,互相交流一下。

评分

1

查看全部评分

 楼主| 发表于 2010-3-23 20:57:52 | 显示全部楼层 来自 北京海淀
Simdroid开发平台
前两天回帖的时候说,可以沿着空间路径设置生死单元,空口无凭,贴张图片吧。是一个非常简单的空间路径——螺旋线,但也足够说明问题了。

本帖子中包含更多资源

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

×
回复 1 不支持 0

使用道具 举报

发表于 2010-3-19 20:06:48 | 显示全部楼层 来自 北京海淀
谢谢了!感谢分享!
回复 不支持

使用道具 举报

 楼主| 发表于 2010-3-23 20:58:23 | 显示全部楼层 来自 北京海淀
不是很清楚,凑活着看吧
回复 不支持

使用道具 举报

发表于 2010-3-23 22:56:38 | 显示全部楼层 来自 湖北宜昌
经验分享
谢谢
回复 不支持

使用道具 举报

发表于 2010-3-25 09:26:33 | 显示全部楼层 来自 北京海淀
太帅了,看了楼主的帖子才知道人外有人天外有天,感慨万千至于,对楼主的崇拜之情犹如滔滔江水连绵不绝,一发不可收拾
回复 不支持

使用道具 举报

 楼主| 发表于 2010-3-27 12:00:26 | 显示全部楼层 来自 黑龙江哈尔滨
以后严禁师弟穿个马甲在这里恶心师兄。



6# feihuafeiwu
回复 不支持

使用道具 举报

发表于 2010-4-23 17:09:47 | 显示全部楼层 来自 天津
高手,怎么样用MARC做多层焊接的模拟。能不能详细指点一下??
回复 不支持

使用道具 举报

 楼主| 发表于 2010-4-25 16:58:24 | 显示全部楼层 来自 黑龙江哈尔滨
关于多层多道焊的论文还是很多的,你可以查一下。生死单元也不是一个非常完善的技术,存在着很多问题,例如,由于工件的变形,会造成未激活单元的inside out。你先试着单层的焊接,在此基础上很容易做多层多道的。不过多层多道相对而言,比单层难以收敛的多。肯定需要好好的调调程序。
回复 不支持

使用道具 举报

发表于 2010-6-4 22:45:02 | 显示全部楼层 来自 香港
感谢楼主的分享。

用户手册c卷对于函数Elmvar()的code变量的值的说明的时候,写“Code 1~6”,对应的返回值是Components of strain。请问各位,如果希望得到单元的应变分量的话,应该如何选用code的值?

请指点。

谢谢。
回复 不支持

使用道具 举报

发表于 2010-6-8 14:15:53 | 显示全部楼层 来自 香港
目前还在尝试之中。初步认为是对应单元坐标的6个自由度的。
回复 不支持

使用道具 举报

发表于 2010-6-11 15:17:36 | 显示全部楼层 来自 香港
感谢楼主的分享,经过这段时间的尝试,基本算是理解这个子程序的使用了。

再向楼主还有各位请教一个问题:参数mode设置的问题。

按说明,mode=1   - activate element and add element to post file;mode=11  - activate element and keep status on post file。也就是说,mode赋值为-1或-11对计算的影响应该是相同的,所区别的只是在计算结果的显示而已。

我这段时间做了多个尝试,发现当mode=-11时,那些被deactivated的单元还是参与了计算。想不明白问题的所在。

请楼主和各位指点。

谢谢。
回复 不支持

使用道具 举报

发表于 2010-7-5 19:02:58 | 显示全部楼层 来自 黑龙江哈尔滨
师兄,新版本的marc生死单元在Coupled分析中可以只杀死应力部分,而不杀死温度部分,我试过了,不过好像只能使用一次,杀死之后再激活就不行了。
回复 不支持

使用道具 举报

发表于 2010-7-6 17:26:31 | 显示全部楼层 来自 河北石家庄
高手就是高手,可惜俺不会,要编写子程序怎么学起啊?请教
回复 不支持

使用道具 举报

 楼主| 发表于 2010-7-6 19:23:17 | 显示全部楼层 来自 黑龙江哈尔滨
编写子程序的基础当然是fortran语言。但fortran仅仅是个工具,重点还在于一些专业性的基础知识。比如使用film、flux这两个子程序,最好懂传热学的基本原理;而要使用hypela,一定要学一下弹塑性力学。
回复 不支持

使用道具 举报

发表于 2010-7-7 13:32:21 | 显示全部楼层 来自 江苏南京
好东西,谢谢!
回复 不支持

使用道具 举报

发表于 2010-7-8 08:12:25 | 显示全部楼层 来自 江苏常州
太强大了,楼主厉害!榜样啊!
回复 不支持

使用道具 举报

发表于 2010-7-8 09:23:06 | 显示全部楼层 来自 天津
学习一下,谢谢楼主
回复 不支持

使用道具 举报

发表于 2010-7-9 15:45:36 | 显示全部楼层 来自 黑龙江哈尔滨
谢谢楼主!学习下!
回复 不支持

使用道具 举报

发表于 2010-7-26 14:53:15 | 显示全部楼层 来自 黑龙江哈尔滨
师兄:
      麻烦一下,我编了一个单元死活子程序,激光热源用子程序,用热分析时没有问题,单元能逐渐激活,热机耦合分析时退出号是13,如果子程序去掉死活部分也能正常算。耦合算时只要加热就不能算退出号一律为13。OUTPUT FILE中的错误是这样的,
***error - element type     4 used in boundary condition face1   is not supported by table input format
             *** error - incorrect load on element        8 type   10 iface   3
             *** error - incorrect load on element        9 type   10 iface   2
             *** error - incorrect load on element       11 type   10 iface   3
             .............
只要是热源都是这个问题。师兄以前算过热机耦合单元死活的例子没有,电脑中是否还留着?

另外还有个问题,我在你的电脑上三核并行运算,算了一半退出号是2006,说是系统错误。不知道是什么问题。
回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 17:20 , Processed in 0.079052 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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