Fortran Coder

查看: 10998|回复: 2
打印 上一主题 下一主题

[求助] 使用fortran编写abaqus用户子程序

[复制链接]

2

帖子

1

主题

0

精华

新人

F 币
23 元
贡献
11 点
跳转到指定楼层
楼主
发表于 2020-8-13 23:31:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人使用fortran编写abaqus用户子程序,该程序在fortran中提示没有错误,但是在abaqus中会提示Problem during linking - Abaqus/Standard User Subroutines.   This error may be due to a mismatch in the Abaqus user subroutine arguments.   These arguments sometimes change from release to release, so user subroutines   used with a previous release of Abaqus may need to be adjusted.Job Job-4 aborted due to errors. 最初怀疑是安装用户子程序问题,但是我尝试编写了几个书本上的子程序发现可以正常计算, 说明是我子程序出了问题,但是这几天一直调试也不清楚到底是那里出了错,因此想求助一下大佬
[Fortran] 纯文本查看 复制代码
      SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
     1 RPL,DDSDDT,DRPLDE,DRPLDT,
     2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,
     3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,
     4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)
C
      INCLUDE 'ABA_PARAM.INC'
C
      CHARACTER*80 CMNAME
      DIMENSION STRESS(NTENS),STATEV(NSTATV),
     1 DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),
     2 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1),
     3 PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3)
      double precision E, v, lambda, mu
      INTEGER i,j
             double precision qTr, equPlasticStrain, dEquPlasticStrain,
     1                   yieldn, yieldn1, hydorStaticPressure, H, Sm,
     2                   Tm, yita, K, Ym
             real*8 m
             double precision, DIMENSION(NTENS):: flow
             
C
C      user coding to define DDSDDE, STRESS, STATEV, SSE, SPD, SCD
C      and, if necessary, RPL, DDSDDT, DRPLDE, DRPLDT, PNEWDT
                    E=PROPS(1)
                    v=PROPS(2)
                    yield0=PROPS(3)
                    yield0strain=PROPS(4)
                    yieldx=PROPS(5)
                    yieldxstrain=PROPS(6)
                    R=PROPS(7)
                    yita0=PROPS(8)
                    X=PROPS(9)
                    Kb=PROPS(10)
                    omiga=PROPS(11)
                    a=PROPS(12)
                    v0=PROPS(13)
                    T=PROPS(14)
                    C=PROPS(15)
          
          
          
         lambda=E*v/((1+v)*(1-2*v))
         mu=E/(2*(1+v))
             K=E/3*(1-2*v)
      do i=1,NDI
         do j=1,NDI
            DDSDDE(i,j)=lambda
         enddo
         DDSDDE(i,i)=lambda+2*mu
         DDSDDE(i+NDI,i+NDI)=mu
      enddo
      do i=1,NTENS
         do j=1,NTENS
            STRESS(i)=STRESS(i)+DDSDDE(i,j)*DSTRAN(j)
         enddo
      enddo
             qTr=0
             do i=1,NDI
                    if (i==NDI) then
                    j=1
                    else
                        j=i+1
                    End if                
                qTr=qTr+(STRESS(i)-STRESS(j))**2
             enddo
             do i=NDI+1, NTENS
                 qTr=qTr+6*STRESS(i)**2
             enddo
             qTr=sqrt(qTr/2)
             equPlasticStrain=STATEV(1)
         dEquPlasticStrain=0          
      call UMATHard(PROPS,NPROPS, equPlasticStrain+dEquPlasticStrain, 
     1     yieldn, H)
             if (qTr>yieldn) then
c          branch2
                    hydorStaticPressure=0
                    do i=1,NDI
                     hydorStaticPressure=hydorStaticPressure+STRESS(i)
                    enddo
                     hydorStaticPressure=hydorStaticPressure/3
                    do i=1,NDI
                     flow(i)=(STRESS(i)-hydorStaticPressure)/qTr
                    enddo
                    do i=NDI+1, NTENS
                      flow(i)=STRESS(i)/qTr
                    enddo
c
c                yingbianzengliang
c
            Sm=(2/3)*((1+v)/(1-v))*mu
                    Tm=sqrt((1/2)*Sm*Sm)
                    yita=COSH((Tm*omiga)/(2*Kb))-1
                    yita=yita*((2*a*Kb*T)/(Sm*v0*yita0))-1
                    yita=(1/X)*R*EXP(((-1)*a)/yita0)-(C*hydorStaticPressure)/K
                    Ym=SINH((Tm*omiga)/(2*Kb*T))
                    Ym=EXP(((-1)*a)/yita0)*Ym
                    Ym=2*R*Ym
            m=1/2
                    dEquPlasticStrain=sqrt(m)*Ym*flow(i)+(1/3)*yita
             call UMATHard(PROPS,NPROPS,
     1         equPlasticStrain+dEquPlasticStrain, yieldn1, H)
             do i=1, NDI
                   STRESS(i)=yieldn1*flow(i)+ hydorStaticPressure
                    enddo
                    do i=NDI+1, NTENS
                    STRESS(i)= yieldn1*flow(i)
                    enddo
             else
c          branch1
                dEquPlasticStrain=0
                
             end if
              STATEV(1)=equPlasticStrain+dEquPlasticStrain
          
          
             RETURN
         END
          
             SUBROUTINE UMATHard(PROPS,NPROPS, equPlasticStrain, yield, H)
             INCLUDE 'ABA_PARAM.INC'
             DIMENSION PROPS(NPROPS)
             double precision equPlasticStrain, yield, yield0, H
             INTEGER NPROPS
             yield0=PROPS(3)
             H=(PROPS(5)-PROPS(3))/(PROPS(6)-PROPS(4))
             yield=yield0+H*equPlasticStrain
         END



分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

4

帖子

1

主题

0

精华

入门

F 币
36 元
贡献
13 点
沙发
发表于 2020-8-14 21:43:54 | 只看该作者
之前也遇到过,记忆中似乎是因为FORTRAN编译器和ABAQUS没有配置好。可以运行一下Abaqus的verification,看看FORTRAN编译器和ABAQUS有没有配置好。

2

帖子

1

主题

0

精华

新人

F 币
23 元
贡献
11 点
板凳
 楼主| 发表于 2020-8-15 11:59:10 | 只看该作者
leehow 发表于 2020-8-14 21:43
之前也遇到过,记忆中似乎是因为FORTRAN编译器和ABAQUS没有配置好。可以运行一下Abaqus的verification,看 ...

我之前也想到过会是这个问题,所以我自己找了几个简单代码去试了试 发现abaqus可以运行 因此也就排除了这种可能性,感觉更多的问题是我fortran编码出了问题,因此想在这里发帖看看有没有什么建议。我刚才也试了是运行verification  里面显示的fortran以及用户子程序都是pass。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-23 00:55

Powered by Tencent X3.4

© 2013-2024 Tencent

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