ABAQUS材料子程序学习(20年12月1日)

6 篇文章 35 订阅

ABAQUS材料子程序学习(20年12月1日)

前言

记录自己学习过程,本文针对《非线性本构关系在ABAQUS中的实现》第二章“动态回弹模量“本构的学习,书中自带程序可能由于转成PDF的原因有一些排版上的混乱,下文的UMAT子程序,有VS code编写,和书中例子基本相同。

umat子程序

      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,JSTEP,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),
     4 JSTEP(4)

C    局部变量
      DIMENSION SDEV(NTENS)
      REAL THETA, THETA0, TAUOC, TAUOC0, DNU, DK, DN, DM, PA
      LOGICAL SINGULAR
C     DNU:Poisson's ratio => PROPS(1)
C     DK: Material parameter, k1=> PROPS(2)
C     DN: Material parameter,k2=> PROPS(3)
C     DM: Material parameter,k3=> PROPS(4)
C     PA: atmo=> PROPS(5)
C     DL: Material parameter,k4=> PROPS(6)

      DNU=PROPS(1)
      DK=PROPS(2)
      DN=PROPS(3)
      DM=PROPS(4)
      PA=PROPS(5)
      DL=PROPS(6)

C     计算弹性常数
      ALPHA=DNU/(1-2.0*DNU)
      ALPHA_BAR=3.0*ALPHA+1
      DLL=1.0/DL
C     偏应力与等效偏应力
      THETA=STRESS(1)+STRESS(2)+STRESS(3)
      DO I=1,NDI
        SDEV(I)=STRESS(I)-THETA*0.333333
      ENDDO
      DO I=NDI+1,NTENS
        SDEV(I)=STRESS(I)
      ENDDO
      TAUOC=0.0
      DO I=1,NTENS
        TAUOC=TAUOC+SDEV(I)**2
      ENDDO
      TAUOC=SQRT(TAUOC/3.0)
      THETA0=THETA
      TAUOC0=TAUOC

      IF(THETA .GT. -0.01) THETA0=-0.01
      IF(TAUOC .LT. 0.00001) TAUOC0=0.00001

C     更新恢复模量(Resilient modulus)
      RMR=DK*PA*(-THETA0/PA)**DN*(DL*TAUOC0/PA+1)**DM
      STATEV(1)=RMR
      SINGULAR=.TRUE.
      DO I=1,NTENS
        IF (STRESS(I) .LT. -0.1) SINGULAR=.FALSE.
      ENDDO
      IF (SINGULAR) THEN
        A=ALPHA
        B=0.0
        C=0.0
        D=0.0
      ELSE
        XX=TAUOC+PA*DLL
        YY=1.0/(XX*(1.0-DN)-DM*TAUOC)
        A=XX*YY*ALPHA_BAR*DN/3.0+ALPHA
        B=ALPHA_BAR*DN*XX*YY/THETA
        C=THETA*DM*YY/(9*TAUOC)
      END IF
      DDSDDE=0.0
      DO I=1,NDI
        DDSDDE(I,I)=1.0
      ENDDO
      DO I=NDI+1,NTENS
        DDSDDE(I,I)=0.5
      ENDDO
      DO I=1,NDI
        DO J=1,NDI
          DDSDDE(I,J)=DDSDDE(I,J)+A+B*SDEV(I)+C*SDEV(J)
     &     +D*SDEV(I)*SDEV(J)
        ENDDO
      ENDDO
      DO I=1,NDI
        DO J=NDI+1,NTENS
          DDSDDE(I,J)=DDSDDE(I,J)+C*SDEV(J)+D*SDEV(I)*SDEV(J)
          DDSDDE(J,I)=DDSDDE(J,I)+C*SDEV(J)+D*SDEV(I)*SDEV(J)
        ENDDO
      ENDDO
      DO I=NDI+1,NTENS
        DO J=NDI+1,NTENS
          DDSDDE(I,J)=DDSDDE(I,J)+D*SDEV(I)*SDEV(J)
        ENDDO
      ENDDO
C     应力更新
      DO I=1,NTENS
        DO J=1,NTENS
          STRESS(I)=STRESS(I)+DDSDDE(I,J)*DSTRAN(J)
        ENDDO
      ENDDO
      RETURN
      END

DeBug

1)log文件中修改umat的语法错误

2)没有语法错误依旧出现:
Error in job Job-Lug: Abaqus/Standard Analysis exited with an error - Please see the message file for possible error messages if the file exists.
Job Job-load aborted due to errors
解决办法:1边界条件设置一定要从初始步开始
2.载荷施加设置分析步施加较小载荷提供缓冲
3.分析步的分析时间设置initial为更小的值(我这里0.05)

计算结果

在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
对于学习 Abaqus 子程序,你可以按照以下步骤进行: 1. 熟悉 Abaqus 宏命令语言(Abaqus Scripting Interface):子程序是通过宏命令编写的,因此了解宏命令语言对于学习子程序至关重要。你可以查阅 Abaqus 提供的宏命令语言文档,并阅读相关教程和示例代码。 2. 了解 Abaqus 子程序的工作原理:子程序是用于扩展 Abaqus 功能的用户自定义代码。它们可以用于自定义材料模型、边界条件、加载等。了解子程序的工作原理将帮助你理解如何编写和使用它们。 3. 学习子程序的编写和调试:编写子程序需要具备一定的编程知识和经验。你可以选择使用 Fortran 或 C/C++ 作为编程语言,并使用适当的开发环境(如 Visual Studio)来编写和调试你的代码。Abaqus 提供了一些示例子程序供参考。 4. 运行和验证子程序:在编写完成子程序后,你可以将其编译为动态链接库,并将其与 Abaqus 软件集成。通过定义材料参数、加载条件等,你可以在 Abaqus 中使用和验证你的子程序。 5. 深入学习和应用:一旦你掌握了基本的子程序编写技巧,你可以进一步学习和应用高级的子程序技术,如用户自定义本构模型、接触算法等。 需要注意的是,学习 Abaqus 子程序需要具备一定的数学、力学和编程基础。如果你刚开始学习 Abaqus,建议先掌握软件的基本功能和使用方法,然后再逐步学习和应用子程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值