PROP 数组与 Abaqus FORTRAN UMAT 代码中的 PROPS 数组有什么关系?

How does the PROP array relate to the PROPS array in the Abaqus FORTRAN UMAT code?

我一直在研究公开可用的 crystal 可塑性 FORTRAN subroutine,但是,我无法理解输入 material 是如何通过子例程和函数传递的.

因此,在主 UMAT 中,变量 PROPS 指向输入文件中 *USER MATERIAL 选项中输入的 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 正在实现适当的 material 常量。

我无法理解 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,3), TERM2(3,3), INDX(3) 
      [...]

Fortran 的工作原理是 'pass-by-reference',即函数参数实际上接收指向内存中变量 'lives' 的指针。因此,子例程 ROTATION 将其第一个参数解释为 16 元素数组的(开始)地址 double-precision,而第二个参数是 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

当子例程完成时,其结果在数组 ROTATE 中,它在 L.569 收到。