CAPITOLO 7 IMPLEMENTAZIONE DEL MODELLO NLCD
7.2 Le subroutine in Abaqus
7.2.2 La subroutine UMAT
La Figura 7.3 illustra la sequenza di azioni che caratterizza il processo svolto da Abaqus dall’inizio dell’analisi al termine dello step; a lato del diagramma di flusso sono riportati i nomi delle subroutine, in base alla fase del processo in cui intervengono.
Figura 7.3: Diagramma di flusso di un'analisi in Abaqus/Standard
All’interno di ciascun incremento, la subroutine UMAT si inserisce nella definizione del legame costitutivo per ciascuna iterazione; in particolare essa consente la costruzione della matrice jacobiana e del tensore di tensione. Lo schema in Figura 7.4 riporta con maggiore dettaglio le fasi che caratterizzano la singola iterazione.
Alla prima iterazione di ciascun incremento la subroutine viene richiamate due volte: durante la prima chiamata viene formata la matrice di rigidezza iniziale utilizzando la configurazione del
Le subroutine in Abaqus
125
modello all’inizio dell’incremento corrente, mentre durante la seconda viene creata la nuova matrice di rigidezza, basata sulla configurazione aggiornata del modello. Nelle iterazioni successive la subroutine viene invece richiamata una sola volta, poiché le correzioni alla configurazione del modello vengono apportate basandosi sulla rigidezza al termine dell’iterazione precedente.
Figura 7.4: Diagramma di flusso dettagliato relativo ad una iterazione
7.2.2.1 Variabili a disposizione della subroutine
Le principali grandezze che la subroutine UMAT ha a disposizione sono elencate di seguito, riportando anche il nome che esse assumono nella scrittura del codice.
Variabili all’inizio dell’incremento:
TIME valore complessivo del tempo;
TEMP valore della temperatura (non considerata nella presente trattazione);
STRESS vettore delle tensioni;
STRAIN vettore delle deformazioni;
DFGRD0 matrice del gradiente di deformazione; STATEV variabili dipendenti dalla soluzione (SDV);
PROPS vettore delle costanti del materiale, definito dall’utente. Variabili incrementate:
DTIME incremento temporale;
DTEMP incremento temperatura (non considerato nella presente trattazione);
DSTRAIN vettore degli incrementi di deformazione; DROT matrice dell’incremento di rotazione;
Implementazione del modello NLCD
126
Oltre a queste, sono presenti altre variabili, che forniscono ulteriori informazioni:
NDI numero delle componenti di tensione dirette;
NSHR numero delle componenti di tensione di taglio;
NTENS dimensione dei vettori contenenti le componenti di tensione e di deformazione;
NSTATV numero delle SDV (definito nell’opzione DEPVAR del materiale in Abaqus);
NPROPS numero delle costanti del materiale definito dall’utente. Infine, si hanno:
KSTEP numero di step corrente;
KINC numero di incremento corrente;
NOEL numero di elemento;
NPT numero di punto di integrazione.
Si osserva che in Abaqus tensioni e deformazioni sono memorizzate come vettori; la convenzione adottata dal programma nella definizione delle componenti di tensione per elementi tridimensionali è la seguente:
- componenti dirette: σ11, σ22, σ33; - componenti di taglio: τ12, τ13, τ23.
Le componenti di deformazione vengono ordinate in modo del tutto analogo.
7.2.2.2 Variabili da definire nella subroutine
Le grandezze che devono necessariamente essere definite attraverso la scrittura della subroutine UMAT sono elencate di seguito, riportando anche il nome che esse assumono nella scrittura del codice.
DDSDDE matrice jacobiana del modello costitutivo; STRESS vettore delle tensioni alla fine dell’incremento;
STATEV variabili dipendenti dalla soluzione (SDV) alla fine dell’incremento. 7.2.2.3 Costruzione del legame costitutivo
Il metodo agli elementi finiti utilizza l’approccio agli spostamenti, determinando, a partire da un campo di spostamenti congruenti, il corrispondente campo tensionale equilibrato. Per passare da termini infinitesimi a termini finiti e realizzare la trasformazione della legge costitutiva differenziale in un’equazione incrementale si ricorre ad uno dei metodi alle differenze finite.
Secondo lo schema alle differenze in avanti si ha:
Le subroutine in Abaqus
127
dove il valore di ∆¨ viene letto dalla subroutine direttamente dal modello in Abaqus, attraverso la variabile DSTRAN utilizzata nella scrittura del codice, mentre C è la matrice jacobiana, che deve essere costruita opportunamente all’interno della subroutine UMAT.
Per i problemi nell’ambito delle piccole deformazioni o per quelli con grandi deformazioni, ma piccole variazioni di volume, come nel caso della plasticità nei metalli, la matrice jacobiana è definita come:
à «∆/«∆¨
dove ∆σ e ∆ε rappresentano rispettivamente l’incremento di tensione e di deformazione.
Adottando il metodo esplicito, la matrice jacobiana coincide con la matrice di elasticità D, tale che:
/ ¨
Anche se in letteratura tale matrice è solitamente denominata D, per evitare ambiguità con il simbolo utilizzato per il tensore di danno, nella presente trattazione si preferisce indicarla come C, dal momento che essa coincide anche con la matrice jacobiana.
Per materiale elastico lineare isotropo:
à á â â â â ム2äƒ ƒ 2äƒ ƒƒ 0 0 00 0 0 ƒ ƒ ƒ 2ä 0 0 0 0 0 0 ä 0 0 0 0 0 0 ä 0 0 0 0 0 0 äåæ æ æ æ ç con ä 2:1 è=o ƒ :1 è=:1 $ 2è=èo dove
o modulo di elasticità longitudinale o di Young; è coefficiente di contrazione trasversale o di Poisson; ä modulo di elasticità tangenziale o prima costante di Lamé; ƒ seconda costante di Lamé.
Implementazione del modello NLCD
128
La subroutine UMAT utilizza quindi il legame costitutivo elastico isotropo così definito, accoppiandolo al danneggiamento, anch’esso isotropo, introdotto attraverso la riduzione lineare del modulo di Young, utilizzato nelle espressioni precedenti.
o: Œ = 1 $ : Œ = o: =
7.2.2.4 Implementazione del metodo NLCD
Il calcolo dell’incremento di danno va effettuato al termine del ciclo di carico. Per individuare correttamente questa condizione si ricorre ad una funzione ausiliaria con andamento sinusoidale, avente periodo doppio rispetto a quella utilizzata nella subroutine UAMP; tale funzione si annulla pertanto in corrispondenza della fine del ciclo di carico.
Figura 7.5: Esempio di funzione sinusoidale che descrive l'andamento del carico e funzione ausiliaria
Data l’approssimazione del valore di π, di cui si è già parlato nel paragrafo 7.2.1 relativo alla UAMP, nuovamente si è fatto dipendere l’argomento del seno dal tempo dello step, a cui è stata sottratta la parte intera.
Per la costruzione delle grandezze necessarie al calcolo dell’incremento di danno, come 6Ð, jÌÌ e 'Ó, , si rendono necessarie operazioni di media e di individuazione del valore massimo di tali grandezze all’interno di un ciclo di carico. Per fare ciò il codice prevede di memorizzare, attraverso l’uso delle SDV, lo stato di tensione in corrispondenza dei punti di picco della sinusoide indicati in Figura 7.5 come stress1 e stress2, i quali non necessariamente corrispondono a tensioni di trazione e di compressione, e calcolare quindi i valori richiesti.
Il calcolo del rateo di danno e dello stato di danno aggiornato avviene seguendo le formule del Capitolo 6,in cui si è esposto il metodo NLCD dal punto di vista teorico.
Infine viene memorizzato in una SDV il nuovo valore della variabile di danno.
stress1 stress2 -1,5 -1 -0,5 0 0,5 1 1,5 0 0,2 0,4 0,6 0,8 1 1,2 carico UAMP funz ausiliaria
Validazione dell’implementazione
129 7.2.2.5 Controllo dei risultati
Nell’impostazioni dell’analisi si richiede che il programma fornisca i risultati ogni 0,25 dell’unità temporale, in modo da controllare la corretta applicazione del carico e l’effetto che esso produce sul modello.
Per verificare che la subroutine funzioni correttamente, alla parte strettamente necessaria per l’implementazione si è aggiunta una sezione finale nella quale si esaminano i risultati ottenuti dall’analisi con riferimento ad un elemento di controllo.
Si è scelto di scrivere gli output nel message file (.msg) di Abaqus/Standard, corrispondente all’unità 7 associata al comando write in Fortran.