abaqus有关裂纹扩展的问题?

浏览:780 回答:1
abaqus有关裂纹扩展的问题?的图1
abaqus有关裂纹扩展的问题?的图2


模拟xfem裂纹扩展,在deepseek里面编辑了有关裂纹损伤准则的子程序,然后结合黄永刚老师的umat进行运行。上面的图是我预设裂纹一开始的图,下面的图是我运行之后产生的裂纹扩展的图。请问为什么我的裂纹每次扩展碰到我的网格边界就会出现这种报错?请问这种应该怎么解决,是不是编译的子程序(子程序在下面)出现了问题?感谢


abaqus有关裂纹扩展的问题?的图3

以下是我结合deepseekb编写的用户损伤子程序

       SUBROUTINE UDMGINI(FINDEX, NFINDEX, FNORMAL, NDI, NSHR, NTENS,
     1                   PROPS, NPROPS, STATEV, NSTATEV, STRESS, STRAIN,
     2                   STRAINEE, LXFEM, TIME, DTIME, TEMP, DTEMP,
     3                   PREDEF, DPRED, NFIELD, COORDS, NOEL, NPT,
     4                   LAYER, KSPT, KSTEP, KINC, KDIRCYC, KCYCLELCF,
     5                   TIMECYC, SSE, SPD, SCD, SVD, SMD, JMAC, JMATYP,
     6                   MATLAYO, LACCFLA, CELENT, DROT, ORI)

      INCLUDE 'ABA_PARAM.INC'

      DIMENSION FINDEX(NFINDEX), FNORMAL(NDI, NFINDEX), COORDS(*),
     1          STRESS(NTENS), STRAIN(NTENS), STRAINEE(NTENS),
     2          PROPS(NPROPS), STATEV(NSTATEV), PREDEF(NFIELD),
     3          DPRED(NFIELD), TIME(2), JMAC(*), JMATYP(*),
     4          DROT(3, 3), ORI(3, 3)

      ! 参数定义
      INTEGER, PARAMETER :: NSLPTL = 12         ! 滑移系统总数(根据UMAT注释)
      REAL*8,  PARAMETER :: CRITICAL_ICSS = 0.0001D0  ! 临界累积剪切应变

      ! 变量声明
      REAL*8 :: ICSS(NSLPTL), MAX_ICSS
      INTEGER :: I, ACTIVE_SLIP

      ! 初始化输出参数
      FINDEX(1:NFINDEX) = 0.0D0
      FNORMAL(1:NDI, 1:NFINDEX) = 0.0D0

      ! 从STATEV中读取滑移系的累积剪切应变(SDV109-SDV120)
      DO I = 1, NSLPTL
          ICSS(I) = STATEV(108 + I)
      END DO

      ! 找到最大ICSS及其对应的滑移系
      MAX_ICSS = MAXVAL(ICSS)
      ACTIVE_SLIP = MAXLOC(ICSS, DIM=1)

      ! 判断是否触发裂纹扩展
      IF (MAX_ICSS >= CRITICAL_ICSS) THEN
          FINDEX(1) = 1.0D0  ! 触发损伤

          ! 获取对应滑移面的法线方向(根据UMAT注释,法线存储在STATEV的6*NSLPTL+1之后)
          ! 每个滑移系法线占3个变量,例如:
          ! STATEV(6*NSLPTL + 3*(ACTIVE_SLIP-1) + 1 : 6*NSLPTL + 3*ACTIVE_SLIP)
          ! 例如:NSLPTL=12时,滑移系1的法线为STATEV(73-75),滑移系2为STATEV(76-78),以此类推
          ! 请根据实际UMAT代码确认索引位置
          IDX_NOR = 3*NSLPTL + 3*(ACTIVE_SLIP-1) + 1
          FNORMAL(1:3, 1) = STATEV(IDX_NOR : IDX_NOR+2)

          ! 投影到全局坐标系(假设法线已存储在全局坐标系中)
          ! 若法线存储为晶体坐标系,需用ROTATE矩阵转换:
          ! CALL MATMUL(ORI, FNORMAL(1:3,1), TEMP_NOR)
          ! FNORMAL(1:3,1) = TEMP_NOR
      END IF

      RETURN
      END


邀请回答 我来回答

全部回答

(1)
默认 最新
SnowWave02
用EMM插件调试一下
4月10日
评论 点赞

没解决?试试专家一对一服务

换一批
    App下载
    技术邻APP
    工程师必备
    • 项目客服
    • 培训客服
    • 平台客服

    TOP