header blog

Blog R&D

Storie di innovazione e facili tutorial per conoscere il mondo dell'opensource

 

GUIDA IN ITALIANO

openInjMoldSim è il solver per openFOAM v7/6/5 per la simulazione dello stampaggio ad iniezione di polimeri. Come openFOAM è distribuito secondo licenza GPL ed è liberamente scaricabile dal repository:

https://github.com/krebeljk/openInjMoldSim

 

Requisiti: -openFOAM7 installato (generalmente in /opt/openfoam7 se si utilizzano repository ubuntu).

Una volta replicato il repository sul proprio pc per l'installazione del solver si procede a copiare la cartella di origine in openfoam7

$  sudo cp -R /home/user/openInjMoldSim/applications/solvers/multiphase/openInjMoldSim/ /opt/openfoam7/applications/solvers/multiphase
$  cd /opt/openfoam7/applications/solvers/multiphase/openInjMoldSim
 
Si dichiara quindi che vogliamo che il solver venga compilato direttamente insieme agli altri solver di openfoam7  (FOAM_APPBIN) modificando una stringa all'interno di Make/files:

$  sudo gedit /Make/files

e cambiamo la riga:

EXE = $(FOAM_USER_APPBIN)/openInjMoldSim

in

EXE = $(FOAM_APPBIN)/openInjMoldSim

Salviamo e chiudiamo "files" , da terminale quindi eseguiamo questa sequenza di comandi

$  wclean
$  sudo bash
$  wmake
 
Al termine della compilazione avrete installato openInjMoldSim in OF7.

ENGLISH TUTORIAL

openInjMoldSim is the openFOAM sovler for injection molding analysis, it is opensource and free and you can get it from:

https://github.com/krebeljk/openInjMoldSim

 

first of all you must have openFOAM7 installed on your PC (usually in /opt/openfoam7 with ubuntu repository).

Once get the repository on your pc you should copy the installation folder in the openFOAM7 application folder:

$  sudo cp -R /home/user/openInjMoldSim/applications/solvers/multiphase/openInjMoldSim/ /opt/openfoam7/applications/solvers/multiphase
$  cd /opt/openfoam7/applications/solvers/multiphase/openInjMoldSim
 

Now it's time to tell the compiler that we want the solver in the same folder where other solvers are stored in openfoam7 (FOAM_APPBIN), we can do this just by modifying a line in the file Make/files in openInjMoldSim

 $  sudo gedit /Make/files

 

changing the line

EXE = $(FOAM_USER_APPBIN)/openInjMoldSim

to

EXE = $(FOAM_APPBIN)/openInjMoldSim

save and close gedit , now from terminal:

$  wclean
$  sudo bash
$  wmake

 

At the end the solver will be ready to use in your openfoam7 installation.

 

 

 
 
 

 

 

 

Tratto dall'esposizione a TECNOLOGIE OPEN SOURCE PER INDUSTRIA 4.0 - Firenze 19/02/2020.

Nello stampaggio ad iniezione dei polimeri (injection molding) la termica dello stampo riveste un ruolo fondamentale sulla qualità del pezzo prodotto. Lo stampo, oltre a conferire la forma, è progettato con un circuito di condizionamento utile a smaltire omogeneamente il calore necessario a far solidificare il pezzo mantenendo allo stesso tempo una temperatura superficiale sufficientemente alta da permettere lo scorrimento del polimero nella cavità. ARGO srl e CFD FEA Service hanno sviluppato una serie di algoritmi automatizzati, nominata MoldApp, per l'analisi della termica stampo durante la delicata fase di avvio produzione. Di seguito la presentazione esposta a TECNOLOGIE OPEN SOURCE PER INDUSTRIA 4.0.


 

Durante l’avvio produzione lo stampo passa da temperatura ambiente alle condizioni di regime attraverso un transitorio che dura un certo numero di cicli di stampaggio non noto a priori, normalmente i pezzi prodotti in questa fase vengono scartati in quanto non conformi. In questo lavoro Code_Aster è stato utilizzato per ottimizzare un avvio produzione simulando l’evoluzione termica derivante da una serie di cicli di stampaggio a partire da una condizione di avvio definita. Lo script di simulazione è stato inoltre progettato per interfacciare Code_Aster con un file xml contenente i parametri con cui l’operatore può facilmente modificare le condizioni del ciclo produttivo (iniezione, raffreddamento ed estrazione), i parametri del circuito di condizionamento e tutte le condizioni geometriche al contorno. Il responsabile produzione, utilizzando questo script Code_Aster, sarà così in grado di individuare preventivamente i settaggi macchina migliori per ridurre i cicli necessari al raggiungimento della condizione stazionaria, risparmiando tempo e risorse. Lo sviluppo dello script prevederà l’accoppiamento indiretto delle superfici di condizionamento con una simulazione CFD eseguita su openFoam al fine di migliorare l’accuratezza dei risultati.

Il defeaturing di una geometria CAD è una pratica fondamentale nella simulazione degli stampi per materie plastiche. Le geometrie CAD di uno stampo sono infatti ricche di dettagli realizzativi che sono tuttavia inutili quando si va a simularne il suo funzionamento. Normalmente appena importato il file STEP l’operatore si trova di fronte una serie di piccole raggiature, fori, marchiature e altri dettagli geometrici che non danno alcun valore aggiunto alla simulazione. La dimensione di una mesh ricavata da un file CAD segue il rapporto tra la dimensione caratteristica dell’oggetto e la taglia minima dell’elemento necessaria per rappresentare tutti i dettagli geometrici, maggiore il numero di dettagli, maggiore il numero di elementi della mesh. Diventa così chiaro quanto sia importante eliminare tutti i dettagli superflui per non avere a che fare con una mesh composta da diversi milioni di elementi (quasi proibitiva per utilizzo FEM, accettabile su cluster per CFD) solo per simulare uno stampo di piccole dimensioni o un suo inserto.


Parafrasando la cultura pop: “da grandi mesh derivano grandi tempi di calcolo”.

Questo non significa che bisogna semplificare tutto all’inverosimile, una geometria troppo semplificata non è in grado di rappresentare correttamente i fenomeni fisici che avvengono durante la simulazione del ciclo di stampaggio. Tocca all’operatore definire quali dettagli sono caratteristici dello stampo e quali sono inutili in fase di simulazione.

Chi opera spesso “conto terzi” sa benissimo quanto servano gli strumenti in grado di semplificare una geometria che nella maggior parte dei casi giunge in un formato di scambio come .step, .brep o .igs. Ovviamente la soluzione migliore resta sempre quella di operare sul file CAD proprietario ove è stato disegnato, in questo modo si eliminano in maniera rapida e precisa tutte le piccole raggiature e fori superflue ai fini della simulazione. Quando questo non è possibile si può risparmiare notevole tempo utilizzando software specifici per il defeaturing delle geometrie CAD.

Tralasciando le soluzioni commerciali, in questo breve articolo vogliamo suggerirvi una soluzione completamente opensource e già dotata di buona automazione, essenziale per ridurre i tempi necessari al defeaturing.

Programma : FreeCAD

Modulo : Defeaturing Workbench

FreeCAD possiede un utilissimo add-on dedicato al defeaturing delle geometrie importate. A questo link la guida in inglese all’installazione ed utilizzo del “Defeaturing Workbench” (P.S. a breve vi proporremo una versione italiana di questa guida).


 

ESEMPIO APPLICATIVO

Di seguito vi mostriamo l’efficacia del defeaturing nel realizzare la mesh di un inserto stampo per lo stampaggio con canali caldi (hot runners) e raffreddamento conformato (conformal cooling).

defeat img1

A sinistra la geometria originale composta da una serie di dettagli realizzativi sull’esterno boccola quali:

  • il canale di raffreddamento(in blu),
  • le sedi delle guarnizioni di tenuta,
  • una serie di raggiature di collegamento tra i vari cambi spessori.

A destra è la geometria dopo defeaturing in cui sulla superficie esterna è rimasto il solo canale di raffreddamento con le sue raggiature.

La semplificazione è stata effettuata ai fini dell’analisi con Mold-Up, il nostro software per la simulazione dell'avvio stampo, mantenendo correttamente rappresentata solo la geometria del canale di raffreddamento (in blu nell'immagine precedente). Nell'immagine seguente sono evidenziate in rosso le superfici sottoposte a defeaturing con FreeCAD.

defeat img2

E per quanto riguarda la mesh?

La mesh 1D-2D (NETGEN) del nostro inserto passa da 1.8M elementi a 0.8M elementi solamente applicando il defeaturing alle superfici esterne. Un risultato davvero considerevole ottenuto in  meno di un'ora di lavoro tra FreeCAD e SALOME operando direttamente su di un file step.

defeat img3

 

Le criccature da fatica termomeccanica sono uno dei principali meccanismi di usura e danneggiamento degli stampi da pressocolata (HPDC) di leghe leggere (alluminio). La temperatura alla superficie dello stampo varia ciclicamente tra una condizione "calda" ed una "fredda". La fase calda coincide con il contatto con la lega fusa (680 °C circa) durante l'iniezione per passare poi, dopo solidificazione ed estrazione del pezzo, alla fase fredda in cui avviene la spruzzatura di lubrodistaccante (acqua ed aria compressa a temperatura ambiente). Lo stampo oscillando tra queste due condizioni presenta gradienti termici responsabili delle tensioni che portano alla formazione delle cricche. Simulare in ambiente virtuale le condizioni di processo permette di prevenire le criticità in fase di progettazione,  allungando la vita media dello stampo per pressocolata e riducendo le criccature superficiali.


ARGO simula con un elevato grado di precisione le condizioni operative dello stampo verificando quali zone sono soggette a tensioni distruttive. ARGO infatti dispone di un elevato know how del processo maturato in anni di R&S nel settore della pressocolata, i nostri strumenti di calcolo modellano infatti:

  • condizioni di scambio termico complesse (contatto con leghe fuse, influenza della pressione, spruzzatura con aria compressa,...)
  • proprietà materiale non lineari
  • influenza della finitura superficiale
  • disposizione ottimale dei raffreddamenti

ESEMPIO APPLICATIVO DI CO-DESIGN

Per dimostrare la validità del metodo di analisi viene esposta la failure analysis eseguita su di un inserto stampo massivo, senza canali di raffreddamento interni, la cui particolare geometria comporta la formazione di cricche localizzate nella raggiatura delle "alette". Sono stati simulati in sequenza diversi cicli produttivi in modo da raggiungere le condizioni di regime termico, quindi sono state calcolate le tensioni nel pezzo durante un intero ciclo: dall'iniezione alla spruzzatura del lubrodistaccante. Nelle immagini seguenti le condizioni all'apice della fase calda e di quella fredda.

 temperatura max

Figura #1 Temperatura massima raggiunta dall'inserto.

temperatura min

Figura #2 Temperatura minima raggiunta dal tassello durante la spruzzatura.

Le tensioni che si generano sono in corrispondenza delle cricche effettivamente riscontrate sul campione reale Figura #3 e Figura #4.

vonMis 1 raggiatura

Figura #3 Localizzazione delle tensioni massime.

tassello cricche 6.3x

Figura #4 Cricche sperimentalmente rilevate sul tassello ad un ingrandimento di 6.3X

 Le tensioni nel punto dove sperimentalmente si verificano le cricche raggiungono l'apice durante la fase calda di iniezione e sono di compressione come si può vedere dal grafico seguente:

grafico tensioni


Attraverso la simulazione è stato determinato come il meccanismo di danneggiamento sia dovuto al picco di tensione di compressione: i valori delle tensioni sono infatti di poco superiore al limite di snervamento del materiale a quella temperatura. Il meccanismo di danneggiamento evidenziato dalla simulazione ha invertito l'ipotesi iniziale: in prima battuta ad una semplice ispezione il danneggiamento sembrava dovuto alla drasticità del raffreddamento, di conseguenza il Cliente era intenzionato a variare i parametri spruzzatura con il rischio dell'insorgere di altri più gravi problemi di adesione e soldering del getto (washout) su tutta la superficie dello stampo e non solo nel tassello.

L'analisi ha permesso al Cliente di risolvere il problema a colpo sicuro ridisegnando la raggiatura delle alette del singolo tassello, evitando così l'approccio "fai e rifai" e minimizzando i costi per la risoluzione del problema.

Le simulazioni FEM e CFD degli stampi per pressocolata in condizioni operative sono uno strumento estremamente efficace per la produzione di qualità e per il risparmio costi.

Tutorial sull'utilizzo base di elementi shell in Code_Aster basato sui preziosi suggerimenti di Roberto Lugli (code-aster.it), il quale mi ha illustrato con dovizia di particolari tutti i metodi e i suggerimenti necessari per impostare con cognizione di causa una simulazione 3d-shell meccanica in Code_Aster. La modellazione shell ha senso quando uno spessore del nostro componente è decisamente inferiore alle altre due: ad esempio le lamiere. In questi casi infatti discretizzare lo spessore reale (pochi mm) a fronte di dimensioni macro (dm o m) in una mesh 3D porta ad un costo computazionale elevato e non pratico dal punto di vista del risultato finale. Si procede pertanto ad una modellazione ad elementi shell (2d in uno spazio 3d) descretizzando le superfici dell'oggetto in elementi bidimensionali come triangoli o quadrati (Tet3 o Quad4, dove la cifra rappresenta il numero di nodi).
 
sheet metal shell
Esempio pratico di simulazione shell: carter in lamiera per applicazioni elettroniche. In visione sovrapposta la geometria semplice e la mesh di calcolo (tetra - netgen2D)
 

 
#1 MODELLIZZAZIONE Coque_3D o DKT ? in Code_Aster è possibile scegliere tra queste due modalità di modellazione, visto che ovviamente non possiamo usare la semplice 3D. DKT usa elementi lineari (Tet3 o Quad4) ed è pertanto più snello, di contro non tiene conto della curvatura dell'elemento. Coque_3D usa solo elementi bi-quadratici (Tet7 o Quad9): elementi quadratici ai quali viene aggiunto un nodo al centro dell'elemento, grazie a questo nodo la curvatura dell'elemento viene modellata con maggiore accuratezza. La mesh può essere convertita all'interno di Salome_Meca nel modulo mesh attraverso Mesh / Modification / Converto to/from quadratic.
In Code_Aster è comunque possibile convertire la mesh attraverso CREA_MAILLAGE.
 
CONSIGLIO: Finchè si resta in piccole deformazioni, e meglio ancora se in campo lineare, conviene sempre usare la modellazione DKT per semplicità.
 

model = AFFE_MODELE(AFFE=_F(MODELISATION=('DKT', ),

PHENOMENE='MECANIQUE',

TOUT='OUI'),

MAILLAGE=mesh)


 

#2 SPESSORE DELL'ELEMENTO SHELL. Ovviamente per ottenere risultati coerenti dobbiamo inserire nel software lo spessore (EPAIS) del nostro elemento bidimensionale, e questo viene fatto attraverso il comando AFFE_CARA_ELEM. Possiamo (e spesso dobbiamo) aumentare il numero di livelli di integrazione nello spessore (COQUE_NCOU), immaginiamolo impropriamente come una discretizzazione dello spessore fittizio del nostro elemento shell. Teoricamente in campo lineare è sufficiente 1 solo livello di integrazione, per il non-lineare si consiglia sempre di partire con almeno 3 livelli, ma potrebbero esserne necessari 5 o 7. Questo paramento può aiutare molto la convergenza. Nell'esempio sottostante si nota come si può anche dare spessori diversi a seconda dei gruppi della nostra mesh.  (https://www.code-aster.org/forum2/viewtopic.php?id=15182)
 

elemprop = AFFE_CARA_ELEM(COQUE=(_F(ANGL_REP=(0., 0.),

COQUE_NCOU=3,

EPAIS=0.01,

GROUP_MA=('steel10', )),

_F(ANGL_REP=(0., 0.),

COQUE_NCOU=3,

EPAIS=0.004,

GROUP_MA=('frame04', )),

_F(ANGL_REP=(0., 0.),

COQUE_NCOU=3,

EPAIS=0.003,

GROUP_MA=('cart03', ))),

MODELE=model)

 


 

#3 POSTPROCESSING. Bisogna ricordarsi, quando si usa elementi shell, di estrapolare i risultati in modo coerente affinchè Paraview possa utilizzarli. Il formato idoneo è quello dei RESU_NOEU (ad esempio SIGM_NOEU o EPSI_NOEU). Per estrapolare questi valori dobbiamo allungare un poco la parte di post-processing dopo l'analisi vera e propria. Una volta calcolati i campi ELNO questi vengono rielaborati con POST_CHAMP e l'apposita funzione EXTR_COQUE. Dobbiamo infatti dire a Code_Aster su quale livello (NIVE_COUCHE) vogliamo estrapolare le tensioni e le deformazioni (superiore, medio, inferiore) del nostro livello. Bisogna quindi selezionare il livello (NUME_COUCHE) coerente con il livello ricordando che 1 è il livello inferiore rispetto alla normale e il livello più alto corrisponde all'esterno (nel nostro caso 3):
 
"NUME_COUCHE = nume
Dans le cas d'un matériau multicouche (coque multicouche définie par DEFI_COQU_MULT), ou
d'un élément de structure avec comportement non linéaire local, intégré par couches,
NUME_COUCHE est la valeur entière comprise entre 1 et le nombre de couches, nécessaire pour
préciser la couche où l'on désire effectuer le calcul élémentaire. Par convention, la couche 1 est
la couche inférieure (dans le sens de la normale) dans le cas des éléments de coque mécanique
ou de coque thermique et correspond à la couche interne dans le cas d'un élément TUYAU.
NIVE_COUCHE = Pour la couche nume définie par NUME_COUCHE, permet de préciser l'ordonnée où l'on désire
effectuer le calcul élémentaire :
'INF' ordonnée inférieure de la couche (peau interne),
'SUP' ordonnée supérieure de la couche (peau externe),
'MOY' ordonnée moyenne de la couche (feuillet moyen).
You need to do something like
firstply=CALC_ELEM(RESULTAT=RESU,
                   REPE_COQUE=_F(NUME_COUCHE=1,
                                 NIVE_COUCHE='INF',),
                   OPTION=('EPSI_ELNO_DEPL',),);
lastply=CALC_ELEM(RESULTAT=RESU,
                  REPE_COQUE=_F(NUME_COUCHE=3,
                                NIVE_COUCHE='SUP',),
                  OPTION=('EPSI_ELNO_DEPL',),);
to see the results in each layer."
Una volta integrati i valori sul livello di riferimento viene calcolato il campo _NOEU attraverso un'altra funzione CALC_CHAMP avente come input i valori in uscita da POST_CHAMP.
 

res = CALC_CHAMP(reuse=res,

CARA_ELEM=elemprop,

CHAM_MATER=fieldmat,

CONTRAINTE=('SIGM_ELNO', ),

DEFORMATION=('EPSI_ELNO', ),

MODELE=model,

RESULTAT=res,

TOUT_ORDRE='OUI')

 

sup_res = POST_CHAMP(EXTR_COQUE=_F(NIVE_COUCHE='SUP',

NOM_CHAM=('SIGM_ELNO', 'EPSI_ELNO'),

NUME_COUCHE=3),

RESULTAT=res)

 

sup_res = CALC_CHAMP(reuse=s_res,

CARA_ELEM=elemprop,

CHAM_MATER=fieldmat,

CONTRAINTE=('SIGM_NOEU', ),

DEFORMATION=('EPSI_NOEU', ),

MODELE=model,

RESULTAT=s_res)

 

Si procede quindi ad esportare normalmente i risultati attraverso IMPR_RESU

Traduzione dell'intervento di ARGO al Code_Aster day di Modena del 23/11/18, English version here

Abstract. La simulazione del raffreddamento è uno strumento importante per la progettazione della tempra di un componente meccanico. I fattori che influenzano la qualità del processo sono molteplici e un approccio virtuale è sicuramente vincente e utile, specie quando è possibile farlo con strumenti open source ed affidabili come Code_Aster. Nel caso esposto, grazie alla simulazione, è stata individuata e risolta la causa di elevata difettosità su lotti temprati: la degradazione dell'olio da tempra era tale da non consentire più un raffreddamento utile a temprare il componente scelto. Il modello finale è stato quindi re-impiegato come strumento di controllo qualità per valutare nel tempo l'idoneità del bagno d'olio, valutandone l'idoneità a seconda delle geometrie trattate e della loro disposizione nel cesto, ottimizzando inoltre al meglio i costosi interventi di ricondizionamento dell'olio e soprattutto riducendo scarti e costi di esercizio.

 

Pagina 1 di 3

L.THEME