88815725 发表于 2013-5-8 18:20:42

VUMAT中求解主应力子程序VSPRINC的问题

本帖最后由 88815725 于 2013-5-8 18:25 编辑

在VUMAT中已知了单元的应力张量,调用VSPRINC子程序计算主应力,这个VSPRINC应该是ABAQUS已经编号的子程序不需要用户自己编写吧?应该可以直接调用的吧?可是怎么总是显示编译错误呢?
在坛子里搜了一下,没有涉及到VSPRINC的,几乎都是umat中的SPRINC的。有没有高手用过VSPRINC的能解释一下啊,小弟先谢过了!
下面是调用的代码,计算出第一主应力用于单元删除的。

      call vsprinc(k,stressNew,eigVal,ndir,nshr)
c
C   单元删除
         if(eigVal(k,1).gt.2100000) then
         stateNew(k,15)=0
         else
         stateNew(k,15)=1
         end if

diesure 发表于 2013-6-3 18:37:36

lxzzwn1004 发表于 2013-6-1 19:52 static/image/common/back.gif
那你现在知道为什么不行了吗?
我需要用到的是 第一和第三主应变,不是主应力,这个你有什么看法吗? ...

找到上面帖子编程一个小错误
改成下面的就都对了(稍微有一点点误差 不过在可接受范围了)
I1(k)=stressNew(k,1)+stressNew(k, 2)+stressNew(k,3)
      I2(k)=stressNew(k,1)*stressNew(k,2)
   1      +stressNew(k,2)*stressNew(k,3)
   2      +stressNew(k,1)*stressNew(k,3)
   3      -stressNew(k,4)**2-stressNew(k,5)**2-stressNew(k,6)**2
      I3(k)=stressNew(k,1)*stressNew(k,2)*stressNew(k,3)
   1    -stressNew(k,1)*stressNew(k,5)**2
   2    -stressNew(k,2)*stressNew(k,6)**2
   3    -stressNew(k,3)*stressNew(k,4)**2
   4    +2*stressNew(k,4)*stressNew(k,5)*stressNew(k,6)
C
C calculate principal stress
      A(k)=I1(k)/3.0
      E1(k)=I1(k)**2-3.0*I2(K)
      IF(E1(k).GT.0.0001)THEN
         B=SQRT(E1(k))
      ELSE
C         WRITE(*,*) 'Warning: B is less than 0.01,set to 0'
         B(k)=0.0
      ENDIF
C      
      IF(B(k).GT.0)THEN
         E2(k)=(2.0*I1(k)**3-9.0*I1(k)*I2(k)+27.0*I3(k))/B(k)**3/2.0
         IF(E2(k).GT.1.0)THEN
C          WRITE(*,*) 'Warning:cos(Fai)>1,E2= ', E2, 'adjust to 1'
            E2(k)=1.0
         ELSEIF(E2(k).LT.-1.0)THEN
C         WRITE(*,*) 'Warning:cos(Fai)<-1,E2= ', E2, 'adjust to -1'
             E2(k)=-1.0
         ENDIF
         Fai(k)=ACOS(E2(k))/3.0
         SP1(k)=A(k)+2.0*B(k)*COS(Fai(k))/3.0
         SP2(k)=A(k)+2.0*B(k)*COS(Fai(k)+2.0*PI/3.0)/3.0
         SP3(k)=A(k)+2.0*B(k)*COS(Fai(k)+4.0*PI/3.0)/3.0
      ELSE
         SP1(k)=A(k)
         SP2(k)=A(k)
         SP3(k)=A(k)
      ENDIF
C
Cmake sure SP1>=SP2>=SP3   
      IF((SP1(k).GT.SP2(k)).and.(SP2(k).GT.SP3(k)))THEN
      SSP1(k)=SP1(k)
      SSP2(k)=SP2(k)
      SSP3(k)=SP3(k)
      ELSEIF ((SP1(k).GT.SP3(k)).and.(SP3(k).GT.SP2(k)))THEN
      SSP1(k)=SP1(k)
      SSP2(k)=SP3(k)
      SSP3(k)=SP2(k)
      ELSEIF ((SP2(k).GT.SP1(k)).and.(SP1(k).GT.SP3(k)))THEN
      SSP1(k)=SP2(k)
      SSP2(k)=SP1(k)
      SSP3(k)=SP3(k)
      ELSEIF ((SP2(k).GT.SP3(k)).and.(SP3(k).GT.SP1(k)))THEN
      SSP1(k)=SP2(k)
      SSP2(k)=SP3(k)
      SSP3(k)=SP1(k)
      ELSEIF ((SP3(k).GT.SP1(k)).and.(SP1(k).GT.SP2(k)))THEN
      SSP1(k)=SP3(k)
      SSP2(k)=SP1(k)
      SSP3(k)=SP2(k)
      ELSEIF ((SP3(k).GT.SP2(k)).and.(SP2(k).GT.SP1(k)))THEN
      SSP1(k)=SP3(k)
      SSP2(k)=SP2(k)
      SSP3(k)=SP1(k)
      ENDIF

88815725 发表于 2013-5-8 19:00:05

又查了一下,貌似有人说VUMAT中没有求解主应力的子程序,哎。。。

lxzzwn1004 发表于 2013-5-27 09:52:21

88815725 发表于 2013-5-8 19:00 static/image/common/back.gif
又查了一下,貌似有人说VUMAT中没有求解主应力的子程序,哎。。。

请问您的问题解决了吗?
我现在也遇到同样的问题,我需要的是最大、最小 主应变~!

diesure 发表于 2013-5-30 23:13:47

我也在用这个程序vsprinc算最大主应力 然后删除单元
vsprinc算出来显示结果和后处理直接输出的主应力结果不一样
楼主的编译错误显示是什么?我的能运行

diesure 发表于 2013-5-31 05:01:12

在Vumat里
do k=1:nblock
CALL vsprinc(k, stressnew, eigVal, 3, 3)
          stateNew(k,1)=eigVal(k,1)
          stateNew(k,2)=eigVal(k,2)
          stateNew(k,3)=eigVal(k,3)
end do

我用这个测试了一下 11是最大主应力 后面两个算出来的都对不上。。。
而且使用了一些equation约束之后最大主应力算的就有很多点和abaqus直接出来的不一样了
继续尝试中 需要和大家多交流呀

diesure 发表于 2013-5-31 17:01:37

lxzzwn1004 发表于 2013-5-27 09:52 static/image/common/back.gif
请问您的问题解决了吗?
我现在也遇到同样的问题,我需要的是最大、最小 主应变~! ...

http://forum.simwe.com/forum.php?mod=viewthread&tid=1045736&highlight=%E4%B8%BB%E5%BA%94%E5%8A%9B
这个贴子里也遇到了同样的情况 他这个小程序算出来的和abaqus直接输出的已经很接近了
不知道是不是abaqus后处理输出的就有问题呀

lxzzwn1004 发表于 2013-6-1 19:52:51

diesure 发表于 2013-5-31 17:01 static/image/common/back.gif
http://forum.simwe.com/forum.php?mod=viewthread&tid=1045736&highlight=%E4%B8%BB%E5%BA%94%E5%8A%9B
...

那你现在知道为什么不行了吗?
我需要用到的是 第一和第三主应变,不是主应力,这个你有什么看法吗?

88815725 发表于 2013-6-2 21:24:12

diesure 发表于 2013-5-30 23:13 static/image/common/back.gif
我也在用这个程序vsprinc算最大主应力 然后删除单元
vsprinc算出来显示结果和后处理直接输出的主应力结果 ...

我的显示的就是编译问题:Problem during compilation - C:\Temp\MHJC.for,相当于FORTRAN的语法错误,我当时认为的是VUMAT中没有自带vsprinc的算法,貌似要自己编

88815725 发表于 2013-6-2 21:27:15

lxzzwn1004 发表于 2013-5-27 09:52 static/image/common/back.gif
请问您的问题解决了吗?
我现在也遇到同样的问题,我需要的是最大、最小 主应变~! ...

最后用的还是在论坛上找的别人编的计算主应力的代码放在子程序里面的。VUMAT里面主应力、主应变貌似是一样计算的

lxzzwn1004 发表于 2013-6-2 21:41:20

88815725 发表于 2013-6-2 21:27 static/image/common/back.gif
最后用的还是在论坛上找的别人编的计算主应力的代码放在子程序里面的。VUMAT里面主应力、主应变貌似是一 ...

那请问你是在哪里看到的?
或者方便发给我一下吗,谢谢!!
1607325822

88815725 发表于 2013-6-2 21:44:35

lxzzwn1004 发表于 2013-6-2 21:41 static/image/common/back.gif
那请问你是在哪里看到的?
或者方便发给我一下吗,谢谢!!
1607325822

就是论坛里面搜的,哪一个不记得了。你自己找下。
貌似http://forum.simwe.com/thread-1045736-1-3.html就可以吧,自己编写的。加到子程序代码里面就好了

lxzzwn1004 发表于 2013-6-2 21:45:45

88815725 发表于 2013-6-2 21:44 static/image/common/back.gif
就是论坛里面搜的,哪一个不记得了。你自己找下。
貌似http://forum.simwe.com/thread-1045736-1-3.html ...

从你的程序里 复制一下这几句代码可以吗?
怕我自己找不到谢谢

88815725 发表于 2013-6-2 21:47:39

lxzzwn1004 发表于 2013-6-2 21:45 static/image/common/back.gif
从你的程序里 复制一下这几句代码可以吗?
怕我自己找不到谢谢

我那台电脑现在不在旁边,不好意思。。。
找到程序还是自己看下的好,变量要对应起来的

lxzzwn1004 发表于 2013-6-2 22:00:12

88815725 发表于 2013-6-2 21:47 static/image/common/back.gif
我那台电脑现在不在旁边,不好意思。。。
找到程序还是自己看下的好,变量要对应起来的 ...

哦 好的 谢谢了
想问一下 你是用的vsprinc这个用户程序吧 ?

88815725 发表于 2013-6-2 22:06:04

lxzzwn1004 发表于 2013-6-2 22:00 static/image/common/back.gif
哦 好的 谢谢了
想问一下 你是用的vsprinc这个用户程序吧 ?

vsprinc这个子程序没有用成功。我是自己编了VUMAT,想调用vsprinc计算3个主应力,但是发现调用的时候出现编译问题。论坛上搜了下有人说ABAQUS中没有现成的vsprinc子程序,要自己编写。没办法就找了别人的小程序加到自己的VUMAT里面计算主应力了,也不知道对不对。。。

lxzzwn1004 发表于 2013-6-2 22:07:38

88815725 发表于 2013-6-2 22:06 static/image/common/back.gif
vsprinc这个子程序没有用成功。我是自己编了VUMAT,想调用vsprinc计算3个主应力,但是发现调用的时候出现 ...

哦,好的。谢谢了。
好像从6.10开始 就有vsprinc这个用户子程序了。但是论坛上确实很少人用对过也没有说过经验

diesure 发表于 2013-6-3 17:18:12

88815725 发表于 2013-6-2 21:24 static/image/common/back.gif
我的显示的就是编译问题:Problem during compilation - C:\Temp\MHJC.for,相当于FORTRAN的语法错误,我 ...

6.10 后的才有这个命令 能计算但算的和最后abaqus输出的不大一样
我最后用别人用的计算方法 算出的最大主应力和abaqus后处理输出的一样 另外两个和abaqus的有些相似 但都不一样...

diesure 发表于 2013-6-3 17:19:34

lxzzwn1004 发表于 2013-6-1 19:52 static/image/common/back.gif
那你现在知道为什么不行了吗?
我需要用到的是 第一和第三主应变,不是主应力,这个你有什么看法吗? ...

没找到原因看来还是自己完全按公式编一个吧

140414 发表于 2014-7-12 18:25:58

lxzzwn1004 发表于 2013-6-2 22:07
哦,好的。谢谢了。
好像从6.10开始 就有vsprinc这个用户子程序了。但是论坛上确实很少人用对过也没有说 ...

你的vsprinc应用成功了吗?我的VUMAT(abaqus6.11)子程序中一旦用vsprinc和其它Utility Routines就会报错,不知为什么。
页: [1] 2
查看完整版本: VUMAT中求解主应力子程序VSPRINC的问题