# Gmsh

Gmsh è una piattaforma CAE che integra soluzioni open source per la simulazione, meshing, il calcolo numerico sul modello (solving) e la visualizzazione ed analisi dei risultati (post-processing o visualization). È basata su una architettura aperta e flessibile ideata per il riutilizzo dei componenti. Le librerie software Gmsh possono essere usate da sole oppure assieme ad applicativi di terze parti per l'intero ciclo di vita di gestione del modello CAD. È open source, pubblicata sotto la GNU Lesser General Public License, con una deroga per consentire il collegamento più facile con librerie esterne. I componenti software, eseguibili e sorgenti, sono scaricabili dal sito ufficiale. Il nome deriva da una versione precedente chiamata “msh” ( un collegamento per “mesh”), con il prefisso “g” aggiunto per differenziarlo. Il formato file di default usato da Gmsh continua ad usare l'estensione .msh.
Fa parte dei prerequisiti software per il funzionamento di Code Aster.

## Licenza

La licenza GNU GPL viene associata ad una serie di eccezioni per consentire facilmente l'integrazione con librerie o software esterni proprietari; in questo caso occorrerà chiedere un altro tipo di licenza variabile in base agli strumenti non GPL utilizzati. Se si utilizza Gmsh occorre menzionare le seguenti referenze nel proprio lavoro (libri, articoli, reports, etc.): C. Geuzaine and J.-F. Remacle. Gmsh: a three-dimensional finite element mesh generator with built-in pre- and post-processing facilities. International Journal for Numerical Methods in Engineering, Volume 79, Issue 11, pages 1309-1331, 2009.

## Funzionalità

* Supporto per l'interscambio e interoperabilità dei modelli e dei calcoli tra software CAD-CAE.
* Rende più facile l'integrazione di nuovi componenti per sistemi eterogenei per il calcolo numerico.
* Imposta la priorità di accoppiamento tra software di calcolo.
* Fornisce una interfaccia utente generica, semplice ed efficiente. Può essere usato sia come programma stand-alone, (grafico o meno), sia come libreria C++. L'interfaccia grafica cross-platform è basata su FLTK (Fast Light Toolkit), una GUI libera per le librerie OpenGL scritta in C++. Gli eseguibili richiedono la presenza delle librerie grafiche OpenGL, sostituibili con le librerie Mesa 3D, nel percorso di caricamento delle stesse. Può esportare nei formati GIF, JPG, AVI, MPEG. L'esportazione nei formati PS, EPS PDF SVG è consentita dalle librerie GL2PS: (OpenGL to PostScript printing library), reperibili al sito GL2PS. Può interfacciarsi coi seguenti generatori di meshing esterni: Netgen di Joachim Schöberl (Università di Linz) e TetGen di Hang Si (Università di Berlino).
Attualmente il software è disponibile per Unix, Linux 32/64 bits, MacOS e Windows.
Gmsh contiene 4 moduli:
* un modulo per le geometrie,
* un modulo di generazione dei reticoli NURBS ecc., a condizione di essere compilato assieme alle librerie Open CASCADE,
* un modulo solving,
* un modulo di post-processing.
Gmsh ha la capacità di disporre di semplici equazioni parametriche nel suo modulo di pre-processing, e di una visualizzazione efficace nel suo meccanismo di post-processing.

### Punti di forza

* rappresentazione veloce di geometrie semplici o “ripetitive”, grazie a funzionalità definite dall'utente, vie d'uscita condizionate o incorporate;
* parametrizzazione di queste geometrie. Il linguaggio di scripting di Gmsh abilita tutti i comandi ed anche quelli che dipendono da elaborazioni precedenti (tipo Espressioni e comandi di funzioni geometriche);
* specifica le dimensioni dell'elemento con precisione. Gmsh fornisce numerosi meccanismi per controllare la dimensione degli elementi nella generazione mesh finale: mediante interpolazione dalle dimensioni specificate ai punti geometrici o l'uso flessibile dei campi della griglia (vedi i comandi Mesh);
* crea semplici estrusioni delle geometrie create e rendering/meshing (vedi i comandi Geometrie e quelli Mesh);
* interagisce con solvers esterni. Gmsh fornisce interfacce in C, C++, Perl e Python; altre possono facilmente aggiungersi (vedi il modulo Solver);
* visualizza e esporta risultati dei calcoli in numerose varietà di formato file. Gmsh visualizza set di dati scalari, vettoriali e tensori, esegue varie operazioni sulle viste risultanti dalla post-elaborazione (vedi modulo Post-processing), può esportare i grafici in molti formati differenti (vedi lista General options), e può generare animazioni complesse (vedi General tools, e t8.geo);
* gira su macchine di fascia bassa e/o macchine senza interfaccia grafica. Gmsh può essere compilato con o senza interfaccia grafica, e tutte le versioni possono essere usate sia in modo interattivo o direttamente da riga di comando (vedi Running Gmsh on your system);
* configura le opzioni preferite. Gmsh ha un gran numero di opzioni di configurazione che possono essere impostate in modo interattivo utilizzando l'interfaccia grafica, sparse all'interno dei file di comando, modificato al volo in scripts, settati in file di configurazione per il singolo utente, o specificati sulla riga di comando (vedi Running Gmsh on your system e Options);
* tutto questo su varie piattaforme (Windows, macOS e Unix), liberamente (vedi Copying conditions), usando semplici file di script e/o una piccola ma potente interfaccia grafica.

### Punti deboli

* L'approccio di B-Rep per descrivere geometrie può diventare scomodo o inefficiente per modelli di grandi dimensioni. Per modelli complessi o se si vuole usare l'approccio con modellatore solido, occorre linkare Gmsh con un kernel CAD esterno e importare i file nativi direttamente. (La versione binaria eseguibile disponibile sul sito http://geuz.org/gmsh/ è linkata col kernel CAD libero di OpenCASCADE, che consente di importare nativamente IGES, B-Rep così come STEP).
* Gmsh non è un generatore multi blocco: tutti i mesh poligonali generati da Gmsh sono conformi come elementi finiti;
* L'interfaccia utente di Gmsh serve solo ad esporre un numero limitato delle funzionalità disponibili, e molti aspetti dell'interfaccia potrebbero essere migliorati (soprattutto i manipolatori).
* Il linguaggio di scripting di Gmsh è piuttosto limitato, fornendo solo controlli a catena molto grezzi, come le funzioni definite dall'utente, prive di variabili locali.
* Non è presente una capacità di “undo” globale. Si avrà spesso bisogno di modificare una stringa di testo per correggere gli errori.

## Standards

* B-Rep
* STEP (ISO 10303)
* IGES
* OpenGL