微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Abaqus FORTRAN UMAT代码中,PROP数组与PROPS数组有何关系?

如何解决在Abaqus FORTRAN UMAT代码中,PROP数组与PROPS数组有何关系?

我一直在研究可公开获得的晶体可塑性FORTRAN subroutine,但是,我不明白输入材料如何通过子例程和函数传递。

因此,在主UMAT中,变量PROPS指向在输入文件的* USER MATERIAL选项中输入的材料常数。对于子例程,该值为125。

现在,由UMAT调用的子例程定义了另一个变量PROP,它具有不同的值,例如

1430行中;

    C            PROP(1) - PROP(3) -- direction of the first vector in 
    C                       local cubic crystal system

第2167行中,(对于i = 1)

C     PROP   -- material constants characterizing the self- and latent-
C               hardening law (INPUT)
C
C               For the HYPER SECANT hardening law 
C               PROP(1,i) -- initial hardening modulus H0 in the ith 
C                            set of slip systems
C               PROP(2,i) -- saturation stress TAUs in the ith set of  
C                            slip systems
C               PROP(3,i) -- initial critical resolved shear stress 
C                            TAU0 in the ith set of slip systems

虽然我在代码中找不到PROPS和PROP之间的任何关系,但我可以看到PROP正在实现适当的材质常量。

我无法理解PROP如何从输入文件获取属性常量?有人可以解释它的工作原理吗?

fortran code

解决方法

ROTATION子例程在L.1404中定义(为清楚起见删除了注释):

SUBROUTINE ROTATION (PROP,ROTATE)
      IMPLICIT REAL*8 (A-H,O-Z)
      DIMENSION PROP(16),ROTATE(3,3),TERM1(3,TERM2(3,INDX(3) 
      [...]

Fortran遵循``传递引用''的原理工作,即函数参数实际上接收指向变量在内存中的任何位置的指针。因此,子例程ROTATION将其第一个参数解释为16元素双精度数组(的起始地址),而第二个参数则是3x3双精度数组的地址。

在L.569上,您看到该函数被调用:

CALL ROTATION (PROPS(57),ROTATE)

因此,给出的地址PROPS的第57个元素的地址。这意味着子例程实际上可以访问PROPS(57)-PROPS(72)的内容。根据开始时的评论(L.385),

PROPS(57) - PROPS(72) -- parameters characterizing the initial 
C                                orientation of a single crystal in 
C                                global system

子例程结束时,其结果在L.569接收的数组ROTATE中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。