3 LS-DYNA 自定义材料模型如何编写隐式运算部分?

目前有已编好混凝土材料模型 umat 仅支持显式运算,想进一步改写此模型使其支持隐式运算,了解大概理论,需要编写 utan 部分添加 tangent stiffness modulus 计算部分内容,但尚未搞清楚具体操作流程。希望各位有相关经验的大神可以指点一二,也可有偿咨询,不需要代做,只想了解相关流程和思路。

  • 223
请先 登录 后评论

1 个回答

匿名
擅长:LS-DYNA

这个回答,比较的冗长,从隐式分析的一般概念,到编写刚度矩阵。

1. 隐式分析介绍

编写隐式分析的 UMAT 子程序,可以了解一下用户手册中的附录 A,关于隐式分析的说明。

这是一个弹性问题的隐式分析用户子程序 UMAT41 案例,也调用了用户子程序 utan41, 访问链接 ,后文附上 K 文件精简版。dyn21.f 中有多种的 utan xx 的调用示例。

进行隐式分析,不同单元的切线刚度矩阵子程序的入口:

  • urtanh:体单元的三维材料模型
  • urtans:壳单元的二维平面应力材料模型
  • urtanb:三种不同的梁单元模型

这三个入口子程序根据各自的单元特点处理后,具体进入切线刚度矩阵 utan41~50,或者相应的矢量版子程序 utan41v~50v。

精简的 K 文件如下:

$ uses built-in umat41
$ To converge in static would likely require more transverse constraint
*keyword
*PART            
umat41
2,1,1
$mat_001
$2,1,2
*control_implicit_dynamics
1
*control_implicit_auto
1
$---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
*CONTROL_IMPLICIT_GENERAL
$#  imflag       dt0    imform      nsbs       igs     cnstn      form      
$         1  0.001000   
1,.0002
$---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
*CONTROL_TIMESTEP
    0.0000    0.9000  
*CONTROL_TERMINATION
0.0100E+00
$---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
*DATABASE_BINARY_d3plot
0.0010E+00          
*DATABASE_NODAL_FORCE_GROUP
         6                          
*DATABASE_HISTORY_SOLID_SET
         3
*DATABASE_ELOUT
0.0001E+00 
*DATABASE_NODFOR
0.0001E+00
$---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
*mat_elastic
2,7.89e-9, 2.1e5, .3
$---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
*MAT_USER_DEFINED_MATERIAL_MODELS
$#     mid        ro        mt       lmc       nhv    iortho     ibulk        ig
         1 7.890E-09        41         4         0         0         3         4
$#   ivect     ifail    itherm    ihyper      ieos      
$         1         0         0         

$#      p1        p2        p3        p4        p5        p6        p7        p8
 2.100E+05  0.300000   175.0e3  80.769e3
$---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
*MAT_Plastic_kinematic
        11 7.890E-09 2.100E+05 3.000E-01 4.400E+02 1.700E+03 1.000E+00 

$---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
*SECTION_SOLID      
         1         1       
$---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
*SET_NODE_LIST                       
         5
$ for prescribed displacement
       173       174       175       176       177       178       343       344
       347       349       351       353
*SET_NODE_LIST                         
         6
$ for constraint
        17        18        19        20        25        26       187       188
       191       193       195       197
$---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
$ elements at center
*SET_SOLID                        
         3
        71        72        73        74        75        76        77        78
        79        80
$---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
$ line of center nodes for load
*SET_NODE_LIST                         
         2
       277       278       279       280       281       282
$---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
*DEFINE_CURVE
        10
0.00000000000000E+00 0.0000000000000E+00
0.01000000000000E+00 10.000000000000E+00
*BOUNDARY_PRESCRIBED_MOTION_SET
         5         1         2        10 1.000E-00
$---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
*BOUNDARY_SPC_SET
         6         0         1         1         1         1         1         1
$---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
*NODE
       1 10.000000000000 16.000000000000 0.0000000000000
       2 10.000000000000 12.000000000000 0.0000000000000
       3 10.000000000000 8.0000000000000 0.0000000000000
       4 10.000000000000 4.0000000000000 0.0000000000000
$
*ELEMENT_SOLID
       1       2      25      17       1      27     187     188     189     190
       2       2      17      18       2       1     188     191     192     189
       3       2      18      19       3       2     191     193     194     192
*END

2. 编写刚度矩阵

如何编写用户自定义材料的切线刚度矩阵?从 R102784 开始(2015),之后的版本,可以在 umatXXc 中定义切线刚度矩阵。

而对于之前的版本,这可参考如下的内容:

在子程序中包括以下两个公共块及其 threadprivate/TASKCOMMON 声明:

common/vect8loc/dsave(nlq,6,6)
common/bki03iloc/lnodim(nlq,48),ndofpn,nnpke,melemt,imlft,imllt,
     &                 is17loc,is18loc,imp_mxe
c$omp threadprivate (/vect8loc/)
c$omp threadprivate (/bki03iloc/)

可以在 dyn211b.f 或者其他文件的子程序的 usrsld 找到这些声明。

然后在你的代码中,检查 is17loc.eq.1,如果为 true,则填充 vect8loc 中的 dsave 数组,刚度方向在对角线上,非对角元素为 0。

if (is17loc.eq.1) then
        do i=lft,llt
          dsave(i,1,1)=stifr(i)
          dsave(i,2,1)=0.
          dsave(i,3,1)=0.
          dsave(i,1,2)=0.
          dsave(i,2,2)=stifs(i)
          dsave(i,3,2)=0.
          dsave(i,1,3)=0.
          dsave(i,2,3)=0.
          dsave(i,3,3)=stift(i)
        enddo
      endif

其中 stiff、stifs 和 stift 是刚度在两个平面中的方向 r 和 s 以及法向 t,分别进行合理定义。

请先 登录 后评论