求助-混凝土VUMAT子程序软化段计算的实现问题
本帖最后由 CADTJ 于 2012-8-30 17:32 编辑我在编制混凝土单轴材料子程序中,无法实现混凝土硬变软换段的计算。在子程序中我才用了如下的本构:
其数学表达式为
以此为依据我编制了子程序。建立了一个单轴受压梁模型,施加顶部位移荷载,提取了如下结果:
应力-时程图
应变-时程图
应力-应变图
通过查看这三张图片,发现计算到达压应力和压应变峰值点后,无法进入软化段。我自己试了很多方法,但依然毫无头绪。在万般无奈之下,特发此贴,希望各路高人各显神通,为我指点迷津。为了方便解决问题特意上传INP文件和FOR文件。
本帖最后由 yuminhust2005 于 2012-9-9 17:09 编辑
CADTJ 发表于 2012-9-8 16:16 http://forum.simwe.com/static/image/common/back.gif
版主对模型进行了修改,只建立一个单元,我曾试过,能实现软化段。但是为什么采用多个单元时就不行呢?我 ...
为什么单元数多了,就不能出现下降段?这个问题一开始的确让我也困惑。
经过和对应umat程序的比较我发现:
这主要是因为采用vumat计算的是动力问题,存在惯性力,这导致不同单元的内力不一致。当内力较大的单元超过峰值应变后,材料无法保存内力平衡,而快速进入下降段,压缩变形迅速加大。而另一部分单元为了保持位移的协调,则出现了卸载的情况。
这也就可以解释你先前提取的曲线为什么没有出现下降段,反而是卸载过程(由于你的程序中没有设定卸载的准则,加载和卸载的曲线相同)。
当提取所有单元的应力-应变曲线,你会发现其中一部分单元的应力-应变曲线是有下降段,而另外的就是你先前提取的没有下降段的曲线。
由于设计算例的目的是要验证材料应力-应变关系是否按设定的本构进行。
因此,对于显式动力计算,最好采用单个单元测试。对于静力计算,单个和多个单元就无所谓了。
自己踩踩 加点人气 等待高人指点 本帖最后由 yuminhust2005 于 2012-9-8 15:25 编辑
错误地方:判断应变在哪个状态的语句错误;
错误原因:AND的优先级高于 LE, GT等
修改方法:加括号
因此程序中对应部分改为:
*第一受压阶段
*
ELSE IF( (STATENEW(I,3) .LE. ZERO) .AND.
* (STATENEW(I,3) .GT. YIM0) ) THEN
和
*第二受压阶段
*
ELSE IF((STATENEW(I,3) .LE. YIM0). AND.
* (STATENEW(I,3) .GT. YIMU))THEN
根据你的判断应变的过程来看,还可以更简单些:
*第一受压阶段
*
ELSE IF( STATENEW(I,3) .GT. YIM0 ) THEN
和
*第二受压阶段
*
ELSE IF(STATENEW(I,3) .GT. YIMU )THEN
理由:
在第一个IF的条件不成立下,第二个IF中的(STATENEW(I,3) .LE. ZERO)自动成立,不需要重复;
在第二个IF的条件不成立下,第三个IF中的(STATENEW(I,3) .LE. YIM0)自动成立,也不需要重复;
yuminhust2005 发表于 2012-9-6 17:06 static/image/common/back.gif
错误地方:判断应变在哪个状态的语句错误;
错误原因:AND的优先级高于 LE, GT等
修改方法:加括号
谢谢人心的版主 我按照版主的建议,对子程序进行了修改 还是不能进入下降段。有一奇怪的现象,如果认为将本构曲线BC段的斜率改为正直,这样进行计算就能进入BC段!是否是因为这种软化段引起显示计算应变的突变? 本帖最后由 yuminhust2005 于 2012-9-8 15:26 编辑
CADTJ 发表于 2012-9-7 10:17 http://forum.simwe.com/static/image/common/back.gif
谢谢人心的版主 我按照版主的建议,对子程序进行了修改 还是不能进入下降段。有一奇怪的现象,如果认为将 ...
你说的认为是正值是什么意思,具体对应程序的那句?
不排除还有其它的问题。
yuminhust2005 发表于 2012-9-7 15:21 static/image/common/back.gif
你说的认为是正值是什么意思,具体对应程序的那句?
就如我要实现的本构如下图所示
D:\2012\单元数对软化段影响分析0904\2-5.png
更改原本构曲线BC段,使其在坐标系中指向左下方,不管加还是不加括号,都能进入BC段。
而当BC段在坐标系中指向左上方时,按斑竹所讲 加上括号后不能进入BC段。
斑竹有没有进行加括号后的试算,其结果如何? 图片没有附上
本帖最后由 yuminhust2005 于 2012-9-8 15:42 编辑
程序另一个有误的地方:
TS1=YS*FC*( TWO*STATENEW(I,3)/(YS*YIM0) -
* (STATENEW(I,3)/(YS*YIM0))**2)
改为:
TS1=YS*FC*( TWO*STATENEW(I,3)/YIM0 -
* (STATENEW(I,3)/YIM0)**2)
原因:变量YIM0中已经包含了系数YS,这个地方又重复乘上一遍。
上面说是vumat程序中隐藏的一些小问题。
现在看来:最主要的问题还不在子程序上,而是用来验证本构的算例模型设计不是很合理。
修改后的模型和vumat源程序见
计算得到的结果见:
久违的下降段出现了,哈哈
yuminhust2005 发表于 2012-9-8 14:32 static/image/common/back.gif
程序另一个有误的地方:
TS1=YS*FC*( TWO*STATENEW(I,3)/(YS*YIM0) -
* ...
版主对模型进行了修改,只建立一个单元,我曾试过,能实现软化段。但是为什么采用多个单元时就不行呢?我也用过两个单元来计算,也没有下降段?这是什么原因?
两个单元也能实现软化段的呀。
TWOMU = EC/(ONE+XNU)
ALAMDA= TWOMU*XNU/(ONE-TWO*XNU)
STRAIN2 = (-XNU)*STRAIN1
STRAIN2 = (-XNU)*STRAIN1
TRACE = STRAIN1+STRAIN2+STRAIN3
loveflowers 发表于 2012-9-8 18:16 static/image/common/back.gif
两个单元也能实现软化段的呀。
TWOMU = EC/(ONE+XNU)
ALAMDA= TWOMU*XNU/(ONE-TWO ...
那多个呢? 本帖最后由 CADTJ 于 2012-9-9 20:29 编辑
yuminhust2005 发表于 2012-9-9 16:33 http://forum.simwe.com/static/image/common/back.gif
为什么单元数多了,就不能出现下降段?这个问题一开始的确让我也困惑。
经过和对应umat程序的比较我发现 ...
谢谢版主这些天热心的答复 问题解决了 yuminhust2005 发表于 2012-9-9 16:33 static/image/common/back.gif
为什么单元数多了,就不能出现下降段?这个问题一开始的确让我也困惑。
经过和对应umat程序的比较我发现 ...
最佳答案 yuminhust2005 发表于 2012-9-6 17:06 static/image/common/back.gif
错误地方:判断应变在哪个状态的语句错误;
错误原因:AND的优先级高于 LE, GT等
修改方法:加括号
:handshake向版主学习
怎么程序没有加载、卸载? CADTJ 发表于 2012-9-9 20:16 static/image/common/back.gif
谢谢版主这些天热心的答复 问题解决了
额,多个单元后怎么解决的?我现在遇到同样的问题,希望指点一下 greenteasong 发表于 2013-7-18 23:43 static/image/common/back.gif
额,多个单元后怎么解决的?我现在遇到同样的问题,希望指点一下
多个单元还没有解决 我认为这是因为显示算法不遵循力的平衡的基本假设 CADTJ 发表于 2013-7-19 11:04 static/image/common/back.gif
多个单元还没有解决 我认为这是因为显示算法不遵循力的平衡的基本假设
这是不是意味着不可以用VUMAT来计算复杂的结构?可是看文献中很多人都做了这方面的工作,不知道其原因是什么 greenteasong 发表于 2013-7-19 13:04 static/image/common/back.gif
这是不是意味着不可以用VUMAT来计算复杂的结构?可是看文献中很多人都做了这方面的工作,不知道其原因是什 ...
只能说误差大 当单元足够多 计算时间步短才能保证精度