• Non ci sono risultati.

Capitolo 2 – Materiali e Metodi

2.1 Campioni e scansioni di micro-CT

2.2.1 Generazione del file di input per ABAQUS

Le immagini di micro-CT, ciascuna rappresentante una slice del campione in esame, sono state importate in ambiente di lavoro MATLAB al fine di generare un file (.inp) da utilizzare come input per il software ABAQUS con cui viene successivamente svolta l’analisi agli elementi finiti.

In MATLAB è stato sfruttato un codice, sviluppato nell’ambito di un precedente lavoro di tesi presso il Politecnico di Milano29, che permette di generare mesh voxel-based di solidi al fine di simularne il comportamento meccanico con il metodo degli elementi finiti. Spesso, però, si presenta il problema che la mesh contiene un numero molto elevato di nodi, portando ad elevati tempi computazionali: si rende, dunque, necessario restringere il dominio oggetto di analisi oppure utilizzare un algoritmo che comprima la mesh, aumentandone la dimensione dei voxel e quindi riducendone il numero. Si definisce voxel (volumetric pixel) un elemento tridimensionale, quindi volumetrico, rappresentante un colore in uno spazio 3D: può essere considerato infatti come l’analogo del pixel in uno spazio bidimensionale. Le mesh vengono generate a partire dalle immagini tomografiche con una procedura messa a punto in un altro lavoro di tesi30. Le immagini microtomografiche vengono importate in MATLAB, sottoposte a sogliatura ed impilate a formare una matrice tridimensionale binaria. Di tale matrice viene selezionato il più grande

67 sottodominio cubico e, mediante l’algoritmo, se ne producono tre versioni compresse con dimensione del lato diminuita di un fattore 2, 3, 6 e da queste vengono eliminati i gruppi di

voxel non connessi, in quanto non ammessi nelle analisi FEM. Vengono, quindi, generati i

descrittori geometrici delle mesh a voxel (posizione nello spazio cartesiano di ogni nodo, attribuzione dei nodi a ciascun elemento finito, insieme dei nodi appartenenti a ciascuna faccia della mesh cubica) che vengono scritti in un file di testo leggibile dal software ABAQUS per effettuare l’analisi FEM. La procedura di riduzione utilizzata dall’algoritmo prevede che ad ogni cubo di k x k x k voxel (con k = 2, 3, 6, imposto dall’utente) venga sostituito un unico voxel, ottenuto da tutti i voxel originari per approssimazione. La mesh compressa presenta, quindi, un minor numero di nodi e di elementi finiti e pertanto richiede un tempo computazionale inferiore per la simulazione FEM. L’esecuzione di una simulazione si traduce nella risoluzione di un sistema di Equazioni alle Derivate Parziali (EDP) con le relative condizioni al contorno. Tale problema matematico solo in casi molto semplici ammette soluzione analitica, e quando ciò avviene, richiederebbe calcoli manuali assai laboriosi. Per questo motivo si risolve sempre il problema con metodi numerici approssimati, delegando il compito al calcolatore: le EDP vengono discretizzate ed il problema, da continuo in EDP, diventa discreto in equazioni algebriche.

Il percorso che conduce dalle immagini acquisite tramite micro-CT alla realizzazione delle corrispondenti matrici a voxel compresse è il seguente:

1. Importazione delle immagini in ambiente MATLAB: il software legge ogni layer dell’immagine pixel per pixel e memorizza il livello di grigio tra 0 e 255 nel corrispondente elemento della matrice 2D in uscita dalla function imread;

2. Definizione del più grande sottodominio cubico partendo dal set di immagini del campione: operazione eseguita mediante apposita function30 che richiede l’inserimento del numero totale di pixel lungo l’asse x e lungo l’asse y delle immagini a disposizione, poi il numero totale di layer del campione. Successivamente si inseriscono gli “spostamenti” che devono essere effettuati lungo gli assi x e y per poter definire il sottodominio quadrato desiderato e determinare la lunghezza del lato espressa in numero di pixel (Figura 2.3): per il corretto funzionamento dell’algoritmo di compressione tale dimensione deve essere multipla del fattore di compressione k (dunque, poiché k = 2, 3, 6 è necessario

68 scegliere un numero n divisibile per 6 per evitare che rimangano voxel “in eccesso” non sufficienti a costituire un super-voxel marginale). Dal momento che si vuole realizzare una matrice cubica, è necessario scegliere un numero di layer pari al lato del quadrato, espresso in pixel. Quindi se dopo aver estratto un quadrato n x n non vi sono sufficienti livelli per costruire un cubo di n x n x n elementi, si sceglie come numero di livelli il massimo divisibile per 6 riducendo allo stesso numero anche le dimensioni del quadrato;

Figura 2.3 - Estrazione del più grande sotto-dominio quadrato da un’immagine 2D.

3. Binarizzazione (segmentazione) delle immagini: permette di distinguere il materiale (pixel bianchi, ”1”) dal vuoto (pixel neri, “0”). Occorre decidere se un pixel, dato il suo livello di grigio, rappresenti materiale o vuoto, il che corrisponde a collocare un EF nella mesh o meno. L’algoritmo di segmentazione utilizza il metodo di Otsu, un metodo basato sulla sogliatura che stabilisce una soglia sopra la quale i pixel sono arrotondati al bianco e sotto la quale sono arrotondati al nero31. Per fare questo MATLAB utilizza due funzioni: graythresh che calcola la soglia dell’immagine con il metodo Otsu ed imbinarize che segmenta l’immagine in base alla soglia passata in input, restituendo una matrice binaria in output;

4. Generazione della matrice 3D originale, non compressa: le immagini binarie vengono impilate a formare l’immagine 3D dell’oggetto;

5. Rimozione delle “isole”, ovvero dei gruppi di “1” della matrice 3D che non sono connessi al resto del continuo (il più grande gruppo di “1” della matrice) e conseguente generazione di una matrice originale erosa. Affinchè un gruppo di

69

voxel sia definito “isola” deve rispettare due condizioni: la connettività e la

definizione di “corpo centrale”. La connettività è un parametro che indica il numero di elementi finiti che un voxel ha attorno a sé e con cui ha in condivisione un vertice, uno spigolo o una faccia. In MATLAB la connettività può assumere 3 soli valori soglia (numero minimo di voxel che devono essere connessi ad un elemento finito centrale): 6, 18, 26. Il valore impostato nel codice utilizzato è 6 al fine di garantire una rimozione minima di materiale. Per definire, invece, il concetto di “corpo centrale” si ricorre alla function MATLAB bwconncomp che prende come parametri di ingresso la connettività desiderata e la matrice 3D binaria. In uscita si ottiene una struct contenente le informazioni degli oggetti della mesh originale, cioè tutti i gruppi di “1” con connettività-soglia pari a 6. Successivamente si individua l’oggetto costituito dal maggior numero di elementi finiti che è il “corpo centrale”. Tutti gli oggetti con un numero di voxel inferiore di almeno 1 a quello del corpo centrale sono da considerarsi isole potenzialmente rimuovibili: attraverso le due soglie, “connettività minima del singolo voxel” e “numero massimo di voxel dell’isola”, prese in input dalla function bwareaopen, vengono rimosse solo le isole che rispettano entrambe le condizioni;

6. Utilizzo dell’algoritmo di compressione della matrice 3D binaria originale non erosa (creazione del mesh): ad ogni cubo di più voxel (“super-voxel”) viene sostituito un unico voxel, avente un valore dipendente da quello dei singoli elementi che contiene. In questa fase è necessario scegliere il fattore di compressione k (inteso come dimensione del super-voxel), individuare le sotto- matrici o super-voxel di dimensione k x k x k all’interno della matrice originale e calcolare la media aritmetica degli elementi di ogni sotto-matrice. Inoltre, si deve scegliere un criterio per approssimare la media a “0” o “1” (“0” se la media < 1/2; “1” se la media ³ 1/2) per ottenere una matrice compressa binaria ed eliminare le isole nella matrice compressa per formare la matrice compressa erosa (Figura 2.4).

Dimensione i della matrice compressa = h-ijTk-UTj - Vjllm imno-pj Uo-q-Tmljr

70

Figura 2.4 – Esempio di compressione di un mesh 3D ed individuazione di un super-voxel (in rosso) per k=2.

7. Definizione della frazione solida e della porosità a livello locale (singolo super- voxel) e globale (intera matrice) per valutare quanto sia significativa l’approssimazione dovuta alla compressione. La porosità è data da:

ø = 𝑉𝑜𝑙𝑢𝑚𝑒 𝑑𝑖 𝑎𝑟𝑖𝑎 𝑉𝑜𝑙𝑢𝑚𝑒 𝑡𝑜𝑡𝑎𝑙𝑒 =

𝑁𝑢𝑚𝑒𝑟𝑜 𝑡𝑜𝑡𝑎𝑙𝑒 𝑑𝑖 0

𝑁𝑢𝑚𝑒𝑟𝑜 𝑡𝑜𝑡𝑎𝑙𝑒 𝑑𝑖 𝑒𝑙𝑒𝑚𝑒𝑛𝑡𝑖 𝑛𝑒𝑙𝑙𝑎 𝑚𝑎𝑡𝑟𝑖𝑐𝑒 e può anche essere ottenuta come:

ø = 1 − 𝐹𝑆

dove FS è la frazione solida della matrice (volume di materiale pieno diviso per il volume totale). La porosità globale è calcolata sull’intera matrice mentre quella locale si determina per ogni singola sotto-matrice;

8. Calcolo degli errori di approssimazione commessi durante la compressione (variazione della frazione solida locale della matrice compressa non ancora erosa e della porosità globale tra matrici erose);

9. Generazione del file di testo con i descrittori della mesh a voxel (input per ABAQUS) per la matrice compressa erosa. I descrittori della mesh sono: la Tabella

dei nodi, la Tabella delle incidenze e la lista “Node set di superficie”. La

generazione dei descrittori è preceduta tra 3 fasi:

§ Numerazione dei voxel all’interno della mesh: i voxel sono identificati dalla posizione del proprio baricentro e la numerazione avviene in maniera progressiva effettuando spostamenti unitari prima lungo l’asse i, poi lungo l’asse j ed infine lungo l’asse l;

71

Figura 2.5 - Numerazione progressiva dei nodi della mesh (Andriani et al., 2014).

§ Numerazione locale dei nodi (all’interno del singolo voxel): gli 8 nodi di un voxel vengono identificati mediante delle lettere (Figura 2.6);

Figura 2.6 - Identificazione dei nodi di un singolo voxel.

La Tabella delle incidenze è costituita da un numero di righe pari al numero di

voxel pieni della mesh e da nove colonne: la prima indica il numero del voxel in

esame mentre le altre otto elencano la numerazione degli 8 nodi appartenenti a tale elemento (Tabella 2.1).

Tabella 2.1 - Frammento di Tabella delle incidenze, necessaria alla ricostruzione della mesh a elementi finiti in ABAQUS.

72 La Tabella delle coordinate, invece, è costituita da un numero di righe pari al numero dei nodi appartenenti a tutti i voxel pieni della mesh e da quattro colonne: la prima indica il nodo secondo la numerazione globale, le altre tre indicano le tre coordinate spaziali del nodo stesso all’interno della mesh (Tabella 2.2);

Tabella 2.2 - Frammento di Tabella delle coordinate, necessaria alla ricostruzione della mesh a elementi finiti in ABAQUS.

Infine, la lista “Node set di superficie” è una lista in cui, per ciascuna delle sei facce della mesh cubica, sono elencati i nodi che vi appartengono secondo la numerazione globale. Individuare questi nodi è fondamentale per le simulazioni meccaniche in ABAQUS perchè è proprio su questi nodi che vengono applicate le condizioni al contorno imponendo opportuni vincoli alla mesh.

10. Applicazione dell’algoritmo di compressione e calcolo degli errori ai set di immagini di micro-CT per il fattore di compressione scelto (k = 2).

I descrittori della mesh compressa generati sono scritti in un file che costituisce l’input per il risolutore ABAQUS, che è in grado di leggere le tabelle ed organizzare i dati in modo da visualizzare la mesh e sottoporla ad un’analisi agli elementi finiti. Gli step realizzati per ottenere il file di input sono riassunti nello schema sottostante (Figura 2.7).

73

Figura 2.7 - Schema riassuntivo della generazione del file di input per ABAQUS.

Quanto appena esposto si traduce operativamente nell’importare in ambiente MATLAB il set di immagini di microtomografia computerizzata in cui è stato scansionato il campione ed impostare i parametri richiesti (Figura 2.8). Questi sono: il lato del cubo, il delta x, il delta y, il delta z ed il fattore di compressione k (che può essere pari a 2, 3, 6).

Figura 2.8 - Finestra di dialogo per l'inserimento dei parametri richiesti in MATLAB.

Il lato del cubo è stato imposto pari a 420 in quanto le immagini scansionate del campione sono 420 quindi questo valore rappresenta il valore massimo, divisibile per 6 (vincolo imposto dal codice MATLAB), che il lato può assumere nella direzione z e, conseguentemente, nelle altre due direzioni.

74 Delta x e Delta y rappresentano i valori delle coordinate x e y del vertice in alto a sinistra di ciascuno dei quattro sotto-quadrati in cui è stata suddivisa la sezione del campione (Tabella 2.3). Sono stati scelti 4 quadrati per poter ottenere una descrizione più completa del comportamento del campione in esame. Il lato di un sotto-quadrato (in azzurro nella figura sottostante) è dunque pari a 420 pixel mentre il lato del più grande quadrato (in verde) inscrivibile nella circonferenza, rappresentata dalla sezione del campione scansionato, è pari a L = r * 2 dove r è il raggio, espresso in pixel, della sezione del campione calcolato da una sua scansione di micro-CT (Figura 2.9).

Figura 2.9 - Rappresentazione dei 4 sotto-quadrati in cui è stato suddiviso il più grande quadrato (di lato L=raggio* 2) inscrivibile nella sezione del campione (il raggio è indicato nella figura a destra).

Tabella 2.3 - Coordinate del primo vertice in alto a sinistra di ciascun quadrato con relativa lunghezza del lato.

Delta z è stato sempre imposto pari a 1 in quanto lo spessore, lungo l’asse z, è dato dal numero di immagini in cui è stato scansionato il campione e quindi il delta tra una immagine e la successiva è pari a 1.

Infine, il fattore di compressione k è stato scelto pari a 2 poiché è quello che consente di mantenere un maggior numero di elementi nella mesh e quindi comporta una minor perdita di materiale. Nel caso in cui la compressione con k = 2 avesse generato mesh con un

Quadrato 1 Quadrato 2 Quadrato 3 Quadrato 4 V1 V2 V3 V4 V1 V2 V2 V2 V1 V1 V4 V4 V4 V3 V3 V3

75 numero di elementi troppo elevato e quindi difficili da importare in ABAQUS, si sarebbe reso necessario scegliere un fattore di compressione k = 3.

Al termine dell’analisi (Figura 2.10) è possibile ritrovare il file di input per ABAQUS nella cartella di lavoro che era stata precedentemente selezionata.

Figura 2.10 – Nella Command Window di MATLAB: elenco degli step effettuati per generare il file di input per ABAQUS (inserito nella Current Folder).