You are on page 1of 8

3 SUBRUTINA UMAT DE ABAQUS

P
ara poder implementar el comportamiento de la interfase descrito en el capítulo 2 en el código de
elementos finitos ABAQUS, se ha utilizado la subrutina UMAT. Gracias a esta subrutina podemos
implementar cualquier modelo de comportamiento que el usuario desee y que no esté incluido en la
librería de materiales de ABAQUS.
La subrutina UMAT define el comportamiento mecánico del material. Si se deseara definir el otro tipo de
comportamiento del material (térmico, electromagnético, etc.) se debería de acudir a otros tipos de subrutinas.
Además de la subrutina UMAT, el comportamiento del material puede implementarse en la subrutina
VUMAT. La subrutina UMAT se utiliza en el caso en que estemos utilizando la librería tipo ABAQUS
Standard. Al utilizar este tipo de librería nos aseguramos que en cada iteración se compruebe que se cumple el
equilibrio. Por otro lado, la subrutina VUMAT es equivalente a la UMAT en el caso que estemos usando las
librerías tipo ABAQUS Implicit, al utilizar este tipo de librerías no se comprueba que la solución este en
equilibrio para todas las iteraciones, por lo que habrá que verificar la solución final.
En este capítulo describiremos brevemente las variables utilizadas en la subrutina y el funcionamiento de la
subrutina. Para una información más detallada del funcionamiento de la subrutina UMAT acudir a [1].Al final
de este capítulo se detallará la programación del modelo elástico lineal frágil (LEBIM) en la UMAT.

3.1 Variables
A continuación se van a explicar las principales variables de la UMAT que se van utilizan en la
implementación del comportamiento de nuestra interfase. En primer lugar definiremos algunas de las variables
que tendremos que definir. Estas variables pueden tener un valor inicial asignado el cual deberá de ser
actualizado, para luego devolvérselo a ABAQUS:
 DDSDDE (NTENS, NTENS): Matriz jacobiana del modelo del material. En nuestro modelo
supondremos pequeñas deformaciones de la interfase por lo que la matriz jacobiana puede ser
expresada como C     , donde  es el incremento de tensiones, y  es el incremento
de las deformaciones. Los componentes de la matriz DDSDDE (I, J) se pueden entender como el
cambio sufrido en la tensión i-ésima al final del incremento, causado por una perturbación
infinitesimal en la componente j-ésima del vector de deformación En ABAQUS/Standard se utilizará
sólo la parte simétrica de DDSDDE, a no ser que se habilite la resolución de ecuaciones no-simétricas
para el material definido.
 STRESS (NTENS): Es un vector el cuál contiene el tensor de tensiones en la notación reducida de
Voight al comienzo de la subrutina, y tiene que actualizarse en la subrutina para ser el tensor tensiones
al final de la iteración. Las tensiones tendrán las direcciones locales del elemento.
 STATEV (NSTATEV): Es un vector donde podremos guardar una variable que dependa de la
solución de las variables de estado (tensión y deformación). Existe una variable STATEV por cada
punto de integración del modelo, y el valor al comienzo de una iteración es el valor del incremento
anterior, a no ser que se modifique con unas de las subrutinas USDFLD o UEXPAN. El tamaño de
este vector se define usando la orden DEVPAR (en el archivo inp al llamar al material). También hay

15
16  Subrutina UMAT de ABAQUS

que tener en cuenta que las variables STATEV, se mostraran en el archivo de salida (odb) con el
nombre de SDVs (solution-dependnt variables)

Variables que se pasan como información


 STRAN (NTENS): Un vector el cuál contiene el tensor de deformaciones en la notación reducida de
Voigh total al principio del incremento. Estas deformaciones tendrán la dirección local del elemento.
 DSTRAN (NTENS): Vector que contiene las variaciones de las deformaciones. Este incremento de
deformaciones tendrán la dirección local del elemento.
 NTENS: Número de componentes del pseudovector de Tensiones, el cual depende del tipo de
elemento que se utilice. En elementos de tensión plana el número de componentes es de 3, en el caso
de deformación plana son 4 y para el caso tridimensional es de 6.
 NSTATEV: Número de variables dependientes de las variables de solución
 NOEL: Número del elemento
 NPT: Número del punto de integración
 KSTEP: Número del step
 KINC: Número del incremento.

3.2 Funcionamiento
A continuación se detallará, brevemente, el funcionamiento de la subrutina. En primer lugar hay que tener en
cuenta como ABAQUS resuelve los modelos de MEF. Supondremos que estamos ante modelos de un solo
“step”. Un “step” se puede entender como un caso de carga, ya que a cada “step” se le asocia unas
condiciones de contorno y unas cargas. Pero además de esto podemos hacer que un nuevo “step” obtenga las
características modificadas del modelo por otro “step”, por el ejemplo supongamos que estamos ante un
modelo con un comportamiento elasto-plástico y sometemos al modelo a un “step” que produce la
plastificación de cierta zona del modelo, podríamos crear un step que siguiera al anterior con lo que el nuevo
“step” tendría plastificada esa zona del modelo.
Al “step” se le asigna un tiempo, el cual tiene significado físico si estamos en un caso dinámico, pero como el
análisis que realizaremos es un análisis estático este tiempo carece de alguna relación con el tiempo físico. Los
steps están compuestos por incrementos, y en cada incremento se aplica un “incremento” de las cargas
aplicadas. En cada incremento se realizan una serie de iteraciones para llegar al equilibrio con las cargas
correspondientes a este incremento. En el caso que se haya utilizado el máximo de iteraciones permitidas y el
problema no llegue a converger, se desecha la solución que no alcanzó el equilibrio y se realiza un nuevo
incremento con un paso de carga menor al que se ha dado anteriormente. Toda esta información es mostrada
en los archivos con la terminación “.sta”.
En la Figura 3-1 podemos ver un esquema del proceso que sigue ABAQUS para resolver los problemas, y
donde llama a la subrutina UMAT. Si bien el esquema indicado puede mostrar de una forma sencilla el
funcionamiento de ABAQUS y donde se ejecuta la subrutina UMAT, no es válido para la primera iteración de
cualquier elemento. En esta primera iteración la subrutina UMAT es llamada dos veces, en la primera llamada
la matriz de rigidez es montada usando la configuración de la situación inicial en el incremento. En la segunda
llamada se actualiza la rigidez basándose en la configuración actualizada de la iteración anterior. En las demás
iteraciones la configuración inicial estará basada en la iteración anterior.
En cada iteración que se realiza para buscar el equilibrio y para cada punto de integración de cada elemento se
ejecuta la subrutina UMAT. En la Figura 3-2 podemos ver un esquema donde se muestra el traspaso de
variables existente en ABAQUS, el usuario y la subrutina. Las variables que se muestran en esta figura son
utilizadas para definir la rigidez del elemento Kel y el criterio de fallo definido en el capítulo 2.
Para cada iteración ABAQUS pasa a la subrutina las tensiones al comienzo de la iteración, las deformaciones
al comienzo de la iteración y el incremento de deformaciones previstos. A partir de los datos que hemos
introducido a la subrutina debemos devolverle a ABAQUS la matriz jacobiana y las tensiones actualizadas.
17

Figura 3-1 Esquema del funcionamiento de ABAQUS/Standard al utilizar la subrutina UMAT.


18  Subrutina UMAT de ABAQUS

Figura 3-2 Esquema del intercambio de valores que se produce al usar la subrutina UMAT

3.3 Formato de la subrutina


La subrutina tiene que ser programada usando el lenguaje de programación Fortran. Por lo que durante este
capítulo se mostraran varias sentencias de programación en Fortran, si bien el nivel de dificultad de las
sentencias de programación usada durante el proyecto no es muy elevado, se supondrá que el lector conoce el
lenguaje de programación Fortran y no se explicará los comandos de Fortran utilizados. Respecto a la
subrutina UMAT programada se muestra en el Anexo A.
El encabezado de la subrutina debe de ser como se muestra en los códigos del siguiente párrafo, ya que la
definición de esas variables son obligatorias para el funcionamiento de la subrutina.

SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
1 RPL,DDSDDT,DRPLDE,DRPLDT,
2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,
3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,
4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CMNAME
REAL*8 STRESS(NTENS),
1 DDSDDE(NTENS,NTENS),
2 DDSDDT(NTENS),DRPLDE(NTENS),STATEV(nstatv),
3 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1),
4 PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3)

Como podemos ver en el código se incluye un archivo llamado ABA_PARAM.INC, el contenido de este
archivo es:
implicit real*8(a-h,o-z)
parameter (nprecd=2)
Por lo que se podrá eliminar la llamada a este archivo incluyendo la definición que hay dentro de este archivo.
Respecto a la llamada de la subrutina, esta se realiza en el archivo .inp a la hora de llamar el material se
utilizará la siguiente línea de código
19


*Material, name=material1
*USER MATERIAL, CONSTANTS=0
*Depvar
1,
**

Con el comando Depvar definimos cuantas variables dependientes de las soluciones queremos definir, en
nuestro caso es sólo una. En el código mostrado vemos que se define CONSTANTS=0, es decir que no se le
suministra ninguna constante a la subrutina. Si quisiéramos suministrarle alguna constante el código a utilizar
debería de ser parecido a este:

*Material, name=material1
*USER MATERIAL, CONSTANTS=3
constante1, constante2, constante3,
*DEPVAR
1,
**

En la subrutina podríamos usar estos valores usando las variables “ props(1), props(2), props(3)…,” que serán
las constante 1, 2, 3 respectivamente.

3.4 Implementación del LEBIM en la subrutina UMAT.


A continuación se describirá como se ha realizado la implementación del LEBIM, el cuál ha sido explicado en
el capítulo 2. Para exponer la programación de la interfase de una forma sencilla y clara se ha utilizado el
diagrama de flujo de la Figura 3-3, utilizando el nombre de las variables que se ha utilizado en el código
UMAT. Pasamos a explicar el significado de las variables utilizadas.
 Kinc: cómo ya se dijo en las variables definidas por ABAQUS en la subrutina, esta variable nos
indica en el número de incremento donde nos encontramos.
 idano: es la variable de daño que utilizaremos en el código, su valor será 1 en el caso en que la
interfase no esté dañada, y 2 cuando el daño se haya producido. Existe una variable idano para cada
punto de integración del modelo.
 DDS(i,j): es una variable que hemos defino, y en la que guardamos la matriz jacobiana del material.
 STRESS(i): es el vector de tensiones que nos proporciona ABAQUS
 DSTRAN(i): es el incremento de deformaciones que sufre el material en la iteración y es
proporcionado por ABAQUS.
 DSTRESS(i): variable que hemos definido para obtener las tensiones que generan el incremento de
deformaciones bajo el supuesto comportamiento de nuestro material. Subapartado (3.1)
 t: es la tensión equivalente que se utilizó en el apartado (3.1) para aplicar el criterio de rotura, su
expresión es (3.5)
 tc:. Su expresión es (3.6). Si se alcanza esta tensión equivalente en algún punto de la interfase,
implicará la rotura de la misma.
 Knn: es la rigidez en la dirección radial de la interfase.
 σnn: tensión en la dirección normal de la interfase.
20  Subrutina UMAT de ABAQUS

 DDSDDE(i,j): Como se indico en el subapartdo 3.1 es la matriz Jacobiana la cual debemos de


devolver a ABAQUS.
 STATEV: variable que se utiliza para pasar valores de una iteración a otra.

Figura 3-3 Diagrama de flujo de la implementación del modelo LEBIM usando la subrutina UMAT
21

En la Figura 3-3 se muestra el diagrama de flujo de la UMAT. La subrutina se ejecuta para cada iteración en
cada punto de integración. El primer paso en cada iteración será inicializar las variables que hemos definido y
asignar los valores de entrada con las variables correspondientes.
Luego si nos encontramos en el primer incremento del step, asignamos el valor 1 a la variable de daño. Si nos
encontramos en un incremento diferente al primer el valor de la variable de daño será igual al valor de la
iteración anterior gracias que utilizamos la variable STATEV para pasar el valor de la variable de daño de una
iteración a otra.
En la segunda condición “if” comprobamos si la variable de daño nos indica que la interfase está rota. Si la
interfase está dañada, la matriz jacobiana ya esta inicializada a cero por lo que pasaríamos al siguiente proceso
de control. Si la interfase no está dañada calculamos las rigidices de la interfase y a través de ella la matriz
jacobina del material:
 c2 knn
knn  h k ss  0
2GIc 1018
(3.1)
k k
ktt  nn k33  nn18  0
4 10

 knn 0 0 0
0 kss 0 0 
DDS   (3.2)
0 0 k33 0
 
0 0 0 ktt 
Como la subrutina está pensada para el caso de deformación plana la matriz jacobiana es de dimensión 4x4 y
los vectores de tensión y deformación tienen 4 componentes, ya que se incluye la tensión perpendicular al
plano. Esta tensión se podría calcular, pero como no influye en nuestro modelo no la calcularemos, por lo que
tomaremos un valor de la rigidez próximo a 0. En la definición de la rigidez en dirección normal, knn se ha
tenido en cuenta que estamos ante una interfase o una capa de adhesivo de espesor h, y de esta forma se
obtiene las rigideces con unidades de MPa.
En LEBIM la rigidez en la dirección acimutal es 0, si bien no podemos poner esta rigidez igual a 0 porque
implicaría que el determinante de la matriz jacobiana fuera 0 con lo que tendríamos una matriz indeterminada.
La solución tomada en este caso para evitar este problema es tomar ceros numéricos, es decir números muy
pequeños comparados con los que no son cero. En nuestro caso se ha divido el valor knn entre 108.
Con la matriz jacobiana calculamos el incremento de tensiones sufrido en el modelo, y actualizamos las
tensiones, como se muestra en las ecuaciones (3.3) y (3.4). Además estas ecuaciones se particularizan y
desarrollan las matrices para el caso de deformación plana.
DSTRESS (i )  DDS (i , j ) * DSTRAN ( j )
   nn   k nn 0 0 0     nn 
    0 k ss 0 0     ss  (3.3)
 ss 

   33   0 0 k 33 0     33 
    
    0 0 0 k tt     tt 
STRESS (i )  STRESS (i )  DSTRESS (i )
 nn   nn     nn 
       (3.4)
 ss    ss    ss 

 33   33     33 
     
        
22  Subrutina UMAT de ABAQUS

A continuación calculamos la tensión equivalente, t, y la tensión equivalente crítica, tc, para saber si la
interfase está dañada. La expresión de t es la de la ecuación (3.5), y la de la tc es la de la ecuación (3.6) donde
σc(ψG) y τc(ψG) están expresados en las ecuaciones (2.18) y (2.19) del capítulo 2 .Si la interfase no está dañada
pasamos a la siguiente condición if. En cambio, si se ha alcanzado la tensión crítica mayor cambiamos el valor
de la variable de daño a 2.

t   2  2  STRESS(1)2  STRESS(4)2 (3.5)

tc  c (G )2 c (G )2 (3.6)

En la siguiente condición if vemos si la variable idano a alcanzado el valor 2, es decir si la interfase se ha


dañado. En el caso en que la interfase se haya roto, realizaremos los cambios en la matriz jacobiana y en las
tensiones dependiendo si la tensiones en la dirección radial son de compresión o de tracción. Si la interfase no
se ha dañado no realizamos ninguna operación.
Para el caso en que la interfase este rota y las tensiones normales son de tracción, según nuestro modelo
LEBIM todas las tensiones son ceros, y se pierde la rigidez en todas las direcciones. Como se explicó
anteriormente no podemos tener una matriz jacobiana indeterminada, por lo que igualamos las rigideces a
ceros numéricos.
En el caso de que las tensiones normales sean de compresión y la matriz este dañada, la única rigidez que es
diferente de 0 es la normal. Por lo que también la única tensión que es diferente de 0 será la normal, con lo que
la única tensión a actualizar es esta.
Una vez realizado todo ese proceso, sólo queda igualar la variable STATEV a la de daño para poder utilizarla
en la siguiente iteración y actualizar la matriz DDSDDE a la matriz jacobiana DDS.

You might also like