Fusioni e fluidi sono vettori onnipresenti del trasporto di massa nei sistemi naturali. Abbiamo sviluppato un pacchetto open source per analizzare le simulazioni di dinamica molecolare ab initio di tali sistemi. Calcoliamo le proprietà strutturali (legame, clusterizzazione, speciazione chimica), trasporto (diffusione, viscosità) e termodinamiche (spettro vibrazionale).
Abbiamo sviluppato un pacchetto open source basato su Python per analizzare i risultati derivanti dalle simulazioni di dinamica molecolare ab initio dei fluidi. Il pacchetto è più adatto per applicazioni su sistemi naturali, come silicati e fusioni di ossido, fluidi a base d’acqua e vari fluidi supercritici. Il pacchetto è una raccolta di script Python che includono due librerie principali che si occupano di formati di file e cristallografia. Tutti gli script vengono eseguiti dalla riga di comando. Proponiamo un formato semplificato per memorizzare le traiettorie atomiche e le informazioni termodinamiche rilevanti delle simulazioni, che vengono salvate in file UMD, che sta per Universal Molecular Dynamics. Il pacchetto UMD consente il calcolo di una serie di proprietà strutturali, di trasporto e termodinamiche. Partendo dalla funzione di distribuzione delle coppie, definisce le lunghezze dei legami, costruisce una matrice di connettività interatomica e infine determina la speciazione chimica. Determinare la durata della specie chimica consente di eseguire un’analisi statistica completa. Quindi gli script dedicati calcolano gli spostamenti quadrati medi per gli atomi e per le specie chimiche. L’analisi di auto-correlazione implementata delle velocità atomiche produce i coefficienti di diffusione e lo spettro vibrazionale. La stessa analisi applicata sulle sollecitazioni produce la viscosità. Il pacchetto è disponibile tramite il sito Web GitHub e tramite la propria pagina dedicata del progetto ERC IMPACT come pacchetto ad accesso aperto.
Fluidi e fusioni sono vettori di trasporto chimico e fisico attivi in ambienti naturali. Gli elevati tassi di diffusione atomica favoriscono gli scambi e le reazioni chimiche, la bassa viscosità unita alla variabile galleggiabilità favoriscono il trasferimento di massa di grandi dimensioni e le relazioni di densità cristallo-fusione favoriscono la stratificazione all’interno dei corpi planetari. L’assenza di un reticolo periodico, le tipiche alte temperature richieste per raggiungere lo stato fuso e la difficoltà di tempra rendono estremamente impegnativa la determinazione sperimentale di una serie di proprietà evidenti, come densità, diffusione e viscosità. Queste difficoltà rendono i metodi computazionali alternativi strumenti forti e utili per studiare questa classe di materiali.
Con l’avvento della potenza di calcolo e la disponibilità di supercomputer, due importanti tecniche di simulazione atomistica numerica sono attualmente impiegate per studiare lo stato dinamico di un sistema atomistico non cristallino, Monte Carlo1 e la dinamica molecolare (MD)1,2. Nelle simulazioni Monte Carlo lo spazio configurazionale viene campionato in modo casuale; I metodi Monte Carlo mostrano il ridimensionamento lineare in parallelizzazione se tutte le osservazioni di campionamento sono indipendenti l’una dall’altra. La qualità dei risultati dipende dalla qualità del generatore di numeri casuali e dalla rappresentatività del campionamento. I metodi Monte Carlo mostrano il ridimensionamento lineare in parallelizzazione se il campionamento è indipendente l’uno dall’altro. In dinamica molecolare (MD) lo spazio configurazionale è campionato da traiettorie atomiche dipendenti dal tempo. Partendo da una data configurazione, le traiettorie atomiche vengono calcolate integrando le equazioni newtoniane del moto. Le forze interatomiche possono essere calcolate usando i potenziali interatomici del modello (nella MD classica) o usando metodi di principi primi (in ab initio, o principi primi, MD). La qualità dei risultati dipende dalla lunghezza della traiettoria e dalla sua capacità di non essere attratta dai minimi locali.
Le simulazioni di dinamica molecolare contengono una pletora di informazioni, tutte relative al comportamento dinamico del sistema. Le proprietà medie termodinamiche, come l’energia interna, la temperatura e la pressione, sono piuttosto standard da calcolare. Possono essere estratti dai file di output delle simulazioni e mediati, mentre le quantità direttamente correlate al movimento degli atomi e alla loro relazione reciproca devono essere calcolate dopo l’estrazione delle posizioni e delle velocità atomiche.
Di conseguenza, un grande sforzo è stato dedicato alla visualizzazione dei risultati, e vari pacchetti sono disponibili oggi, su diverse piattaforme, open source o meno [Ovito3, VMD4, Vesta5, Travis6, ecc.]. Tutti questi strumenti di visualizzazione gestiscono in modo efficiente le distanze interatomiche e, come tali, consentono il calcolo efficiente delle funzioni di distribuzione delle coppie e dei coefficienti di diffusione. Vari gruppi che eseguono simulazioni di dinamica molecolare su larga scala hanno un software proprietario per analizzare varie altre proprietà risultanti dalle simulazioni, a volte in shareware o altre forme di accesso limitato alla comunità, e talvolta limitate nella portata e nell’uso di alcuni pacchetti specifici. Algoritmi sofisticati per estrarre informazioni sul legame interatomico, modelli geometrici e termodinamica sono sviluppati e implementati in alcuni di questi pacchetti3,4,5,6,7, ecc.
Qui proponiamo il pacchetto UMD – un pacchetto open source scritto in Python per analizzare l’output delle simulazioni di dinamica molecolare. Il pacchetto UMD consente il calcolo di un’ampia gamma di proprietà strutturali, dinamiche e termodinamiche (Figura 1). Il pacchetto è disponibile tramite il sito Web GitHub (https://github.com/rcaracas/UMD_package) e tramite una pagina dedicata (http://moonimpact.eu/umd-package/) del progetto ERC IMPACT come pacchetto ad accesso aperto.
Per renderlo universale e più facile da gestire, il nostro approccio è quello di estrarre prima tutte le informazioni relative allo stato termodinamico e alle traiettorie atomiche dal file di output dell’effettiva esecuzione di dinamica molecolare. Queste informazioni sono memorizzate in un file dedicato, il cui formato è indipendente dal pacchetto MD originale in cui è stata eseguita la simulazione. Chiamiamo questi file file “umd”, che sta per Universal Molecular Dynamics. In questo modo, il nostro pacchetto UMD può essere facilmente utilizzato da qualsiasi gruppo ab initio con qualsiasi software, il tutto con un minimo sforzo di adattamento. L’unico requisito per utilizzare il pacchetto attuale è quello di scrivere il parser appropriato dall’output del particolare software MD nel formato di file umd, se questo non è ancora esistente. Per il momento, forniamo tali parser per i pacchetti VASP8 e QBox9 .
Figura 1: Diagramma di flusso della libreria UMD.
Le proprietà fisiche sono in blu e i principali script Python e le loro opzioni sono in rosso. Fare clic qui per visualizzare una versione più grande di questa figura.
I file umd sono file ASCII; l’estensione tipica è “umd.dat” ma non obbligatoria. Tutti i componenti di analisi possono leggere i file ASCII del formato umd, indipendentemente dall’estensione effettiva del nome. Tuttavia, alcuni degli script automatici progettati per eseguire statistiche veloci su larga scala su diverse simulazioni cercano specificamente i file con l’estensione umd.dat. Ogni proprietà fisica è espressa su una riga. Ogni riga inizia con una parola chiave. In questo modo il formato è altamente adattabile e consente di aggiungere nuove proprietà al file umd, preservandone la leggibilità in tutte le versioni. Le prime 30 righe del file umd della simulazione della pirolite a 4,6 GPa e 3000 K, utilizzate di seguito nella discussione, sono mostrate nella Figura 2.
Figura 2: L’inizio del file umd che descrive la simulazione della pirolite liquida a 4,6 GPa e 3000 K.
L’intestazione è seguita dalla descrizione di ogni istantanea. Ogni proprietà è scritta su una riga, contenente il nome della proprietà fisica, i valori e le unità, tutte separate da spazi. Fare clic qui per visualizzare una versione più grande di questa figura.
Tutti i file umd contengono un’intestazione che descrive il contenuto della cella di simulazione: il numero di atomi, elettroni e tipi atomici, nonché dettagli per ciascun atomo, come il suo tipo, simbolo chimico, numero di elettroni di valenza e la sua massa. Una riga vuota segna la fine dell’intestazione e la separa dalla parte principale del file umd.
Quindi ogni fase della simulazione è dettagliata. In primo luogo, vengono forniti i parametri termodinamici istantanei, ciascuno su una linea diversa, specificando (i) il nome del parametro, come energia, sollecitazioni, pressione idrostatica equivalente, densità, volume, parametri reticolari, ecc., (ii) i suoi valori e (iii) le sue unità. Viene dopo una tabella che descrive gli atomi. Una riga di intestazione fornisce le diverse misure, come le posizioni cartesiane, le velocità, le cariche, ecc. E le loro unità. Quindi ogni atomo è dettagliato su una riga. Per gruppi di tre, corrispondenti ai tre assi x, y, z , le voci sono: le posizioni ridotte, le posizioni cartesiane ripiegate nella cella di simulazione, le posizioni cartesiane (che tengono correttamente conto del fatto che gli atomi possono attraversare diverse celle unitarie durante una simulazione), le velocità atomiche e le forze atomiche. Le ultime due voci sono scalari: carica e momento magnetico.
Due librerie principali garantiscono il corretto funzionamento dell’intero pacchetto. La libreria umd_process.py si occupa dei file umd, come la lettura e la stampa. La biblioteca crystallography.py si occupa di tutte le informazioni relative all’effettiva struttura atomica. La filosofia alla base della biblioteca crystallography.py è quella di trattare il reticolo come uno spazio vettoriale. I parametri della cella unitaria insieme al loro orientamento rappresentano i vettori di base. Lo “Spazio” ha una serie di attributi scalari (volume specifico, densità, temperatura e numero specifico di atomi), proprietà termodinamiche (energia interna, pressione, capacità termica, ecc.) e una serie di proprietà tensoriali (stress ed elasticità). Gli atomi popolano questo spazio. La classe “Reticolo” definisce questo insieme, insieme a vari calcoli brevi, come volume specifico, densità, ottenendo il reticolo reciproco da quello diretto, ecc. La classe “Atomi” definisce gli atomi. Sono caratterizzati da una serie di proprietà scalari (nome, simbolo, massa, numero di elettroni, ecc.) e da una serie di proprietà vettoriali (la posizione nello spazio, sia relativa alla base vettoriale descritta nella classe Lattice, sia relativa alle coordinate cartesiane universali, velocità, forze, ecc.). Oltre a queste due classi, la libreria crystallography.py contiene una serie di funzioni per eseguire una varietà di test e calcoli, come le distanze atomiche o la moltiplicazione cellulare. La tavola periodica degli elementi è anche inclusa come dizionario.
I vari componenti del pacchetto umd scrivono diversi file di output. Come regola generale, sono tutti file ASCII, tutte le loro voci sono separate da schede e sono rese il più autoesplicative possibile. Ad esempio, indicano sempre chiaramente la proprietà fisica e le sue unità. I file umd.dat rispettano pienamente questa regola.
Il pacchetto UMD è stato progettato per funzionare meglio con le simulazioni ab initio, in cui il numero di istantanee è in genere limitato a decine o centinaia di migliaia di istantanee, con poche centinaia di atomi per unità di cella. Sono inoltre trattabili simulazioni più grandi a condizione che la macchina su cui viene eseguita la post-elaborazione disponga di risorse di memoria attive sufficienti. Il codice si distingue per la varietà di proprietà che può calcolare e per la sua licenza open source.
I file umd.dat sono appropriati per gli insiemi che mantengono invariato il numero di particelle durante la simulazione. Il pacchetto UMD è in grado di leggere i file derivanti da calcoli in cui la forma e il volume della scatola di simulazione variano. Questi coprono i calcoli più comuni, come NVT e NPT, in cui il numero di particelle, N, temperatura T, volume, V e / o pressione, P, sono mantenuti costanti.
Per il tempo inizia la funzione di distribuzione della coppia così come tutti gli script che devono stimare le distanze interatomiche, come gli script di speciazione, funzionano solo per le celle unitarie ortogonali, cioè per le celle cubiche, tetragonali e ortorombiche, dove gli angoli tra gli assi sono di 90°.
Le principali linee di sviluppo per la versione 2.0 sono la rimozione della restrizione di ortogonalità per le distanze e l’aggiunta di ulteriori funzionalità per gli script di speciazione: per analizzare i singoli legami chimici, per analizzare gli angoli interatomici e per implementare la seconda sfera di coordinazione. Con l’aiuto di una collaborazione esterna, stiamo lavorando al porting del codice su una GPU per un’analisi più rapida in sistemi più grandi.
The authors have nothing to disclose.
Questo lavoro è stato sostenuto dal Consiglio europeo della ricerca (CER) nell’ambito del programma di ricerca e innovazione Horizon 2020 dell’Unione europea (numero di accordo di sovvenzione 681818 IMPACT a RC), dalla direzione estrema di fisica e chimica dell’Osservatorio Deep Carbon e dal Consiglio di ricerca della Norvegia attraverso il suo schema di finanziamento dei Centri di eccellenza, il numero di progetto 223272. Riconosciamo l’accesso ai supercomputer GENCI attraverso la serie stl2816 di sovvenzioni per l’elaborazione eDARI, al supercomputer Irene AMD attraverso il progetto PRACE RA4947 e al supercomputer Fram attraverso UNINETT Sigma2 NN9697K. FS è stato sostenuto da un progetto Marie Skłodowska-Curie (convenzione di sovvenzione ABISSE No.750901).
getopt library | open-source | ||
glob library | open-source | ||
matplotlib library | open-source | ||
numpy library | open-source | ||
os library | open-source | ||
Python software | The Python Software Foundation | Version 2 and 3 | open-source |
random library | open-source | ||
re library | open-source | ||
scipy library | open-source | ||
subprocess library | open-source | ||
sys library | open-source |