He estado pasando por la subrutina de plasticidad de cristal disponible públicamente, sin embargo, No podía entender cómo se pasaban los materiales de entrada a través de las subrutinas y funciones.

Entonces, en el UMAT principal, la variable PROPS apunta hacia las constantes de material ingresadas en la opción * USER MATERIAL en el archivo de entrada. Para la subrutina, este valor es 125.

Ahora las subrutinas que llama UMAT han definido otra variable PROP, que toma diferentes valores como

En línea 1430 ;

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

Mientras está en la línea 2167 , (para 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

Si bien no pude encontrar ninguna relación entre PROPS y PROP en el código, pude ver que PROP estaba implementando las constantes de material apropiadas.

¿No puedo entender cómo PROP puede obtener las constantes de propiedad del archivo de entrada? ¿Alguien puede explicar cómo funciona esto?

El código de fortran.

0
Ddsdde 27 ago. 2020 a las 04:37

1 respuesta

La mejor respuesta

La subrutina ROTATION se define en L.1404 (comentarios eliminados para mayor claridad):

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 funciona según el principio de 'pasar por referencia', es decir, los argumentos de la función en realidad reciben punteros a donde sea que la variable 'viva' en la memoria. Por lo tanto, la subrutina ROTATION interpreta su primer argumento como la dirección de (el comienzo de) una matriz de precisión doble de 16 elementos, mientras que el segundo argumento es la dirección de una matriz de precisión doble 3x3.

En L.569 verá que se llama a la función:

CALL ROTATION (PROPS(57), ROTATE)

Por tanto, la dirección que se le está dando es la del elemento 57 de PROPS. Esto significa que la subrutina efectivamente tiene acceso al contenido de PROPS(57) - PROPS(72). Según el comentario al principio (L.385),

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

Cuando finaliza la subrutina, su resultado está en la matriz ROTATE que recibió en L.569.

0
avid 27 ago. 2020 a las 07:05