Smelten en vloeistoffen zijn alomtegenwoordige vectoren van massatransport in natuurlijke systemen. We hebben een open-source pakket ontwikkeld om ab initio moleculair-dynamische simulaties van dergelijke systemen te analyseren. We berekenen structurele (binding, clusterisatie, chemische speciatie), transport (diffusie, viscositeit) en thermodynamische eigenschappen (trillingsspectrum).
We hebben een op Python gebaseerd open-source pakket ontwikkeld om de resultaten te analyseren die voortkomen uit ab initio moleculair-dynamische simulaties van vloeistoffen. Het pakket is het meest geschikt voor toepassingen op natuurlijke systemen, zoals silicaat- en oxidesmelt, vloeistoffen op waterbasis en verschillende superkritische vloeistoffen. Het pakket is een verzameling Python-scripts die twee belangrijke bibliotheken bevatten die zich bezighouden met bestandsindelingen en met kristallografie. Alle scripts worden uitgevoerd op de opdrachtregel. We stellen een vereenvoudigd formaat voor om de atomaire trajecten en relevante thermodynamische informatie van de simulaties op te slaan, die wordt opgeslagen in UMD-bestanden, wat staat voor Universal Molecular Dynamics. Het UMD-pakket maakt de berekening van een reeks structurele, transport- en thermodynamische eigenschappen mogelijk. Beginnend met de paarverdelingsfunctie definieert het bindingslengtes, bouwt het een interatomaire connectiviteitsmatrix en bepaalt het uiteindelijk de chemische soortvorming. Het bepalen van de levensduur van de chemische soort maakt het mogelijk om een volledige statistische analyse uit te voeren. Vervolgens berekenen speciale scripts de gemiddelde-kwadratische verplaatsingen voor de atomen en voor de chemische soorten. De geïmplementeerde zelfcorrelatieanalyse van de atoomsnelheden levert de diffusiecoëfficiënten en het trillingsspectrum op. Dezelfde analyse toegepast op de spanningen levert de viscositeit op. Het pakket is beschikbaar via de GitHub-website en via een eigen speciale pagina van het ERC IMPACT-project als open-access pakket.
Vloeistoffen en smelten zijn actieve chemische en fysische transportvectoren in natuurlijke omgevingen. De verhoogde snelheden van atomaire diffusie bevorderen chemische uitwisselingen en reacties, de lage viscositeit in combinatie met variërend drijfvermogen bevordert grote massaoverdracht en kristalsmeltdichtheidsrelaties bevorderen gelaagdheid in planetaire lichamen. De afwezigheid van een periodiek rooster, typische hoge temperaturen die nodig zijn om de gesmolten toestand te bereiken en de moeilijkheid om te doven, maken de experimentele bepaling van een reeks voor de hand liggende eigenschappen, zoals dichtheid, diffusie en viscositeit, uiterst uitdagend. Deze moeilijkheden maken alternatieve computationele methoden sterk en nuttige hulpmiddelen voor het onderzoeken van deze klasse van materialen.
Met de komst van rekenkracht en de beschikbaarheid van supercomputers worden momenteel twee belangrijke numerieke atomistische simulatietechnieken gebruikt om de dynamische toestand van een niet-kristallijn atomistisch systeem, Monte Carlo1 en moleculaire dynamica (MD)1,2, te bestuderen. In Monte Carlo-simulaties wordt de configuratieruimte willekeurig bemonsterd; Monte Carlo-methoden tonen lineaire schaalvergroting in parallellisatie als alle bemonsteringswaarnemingen onafhankelijk van elkaar zijn. De kwaliteit van de resultaten hangt af van de kwaliteit van de random number generator en de representativiteit van de bemonstering. Monte Carlo-methoden tonen lineaire schaalvergroting in parallellisatie als de bemonstering onafhankelijk van elkaar is. In de moleculaire dynamica (MD) wordt de configuratieruimte bemonsterd door tijdsafhankelijke atomaire trajecten. Uitgaande van een bepaalde configuratie worden de atomaire trajecten berekend door de Newtoniaanse bewegingsvergelijkingen te integreren. De interatomaire krachten kunnen worden berekend met behulp van modelinteratomaire potentialen (in klassieke MD) of met behulp van first-principles-methoden (in ab initio, of first-principles, MD). De kwaliteit van de resultaten hangt af van de lengte van het traject en het vermogen om niet aangetrokken te worden door lokale minima.
Moleculaire dynamica simulaties bevatten een overvloed aan informatie, allemaal gerelateerd aan het dynamische gedrag van het systeem. Thermodynamische gemiddelde eigenschappen, zoals interne energie, temperatuur en druk, zijn vrij standaard om te berekenen. Ze kunnen worden geëxtraheerd uit de uitvoerbestanden van de simulaties en worden gemiddeld, terwijl grootheden die rechtstreeks verband houden met de beweging van de atomen en met hun onderlinge relatie moeten worden berekend na extractie van de atomaire posities en snelheden.
Bijgevolg is er veel aandacht besteed aan het visualiseren van de resultaten en zijn er vandaag verschillende pakketten beschikbaar, op verschillende platforms, open source of niet [Ovito3, VMD4, Vesta5, Travis6, enz.]. Al deze visualisatietools gaan efficiënt om met interatomaire afstanden en maken als zodanig de efficiënte berekening van paarverdelingsfuncties en diffusiecoëfficiënten mogelijk. Verschillende groepen die grootschalige moleculaire dynamica-simulaties uitvoeren, hebben eigen software om verschillende andere eigenschappen te analyseren die voortvloeien uit de simulaties, soms in shareware of andere vormen van beperkte toegang tot de gemeenschap, en soms beperkt in omvang en gebruik tot sommige specifieke pakketten. Geavanceerde algoritmen om informatie te extraheren over interatomaire binding, geometrische patronen en thermodynamica worden ontwikkeld en geïmplementeerd in sommige van deze pakketten3,4,5,6,7, enz.
Hier stellen we het UMD-pakket voor – een open-source pakket geschreven in Python om de output van moleculaire dynamicasimulaties te analyseren. Het UMD-pakket maakt de berekening van een breed scala aan structurele, dynamische en thermodynamische eigenschappen mogelijk (figuur 1). Het pakket is beschikbaar via de GitHub-website (https://github.com/rcaracas/UMD_package) en via een speciale pagina (http://moonimpact.eu/umd-package/) van het ERC IMPACT-project als een open-access pakket.
Om het universeel en gemakkelijker te hanteren te maken, is onze aanpak om eerst alle informatie met betrekking tot de thermodynamische toestand en de atomaire trajecten uit het uitvoerbestand van de werkelijke moleculair-dynamische run te extraheren. Deze informatie wordt opgeslagen in een speciaal bestand, waarvan de indeling onafhankelijk is van het oorspronkelijke MD-pakket waarin de simulatie werd uitgevoerd. We noemen deze bestanden “umd” -bestanden, wat staat voor Universal Molecular Dynamics. Op deze manier kan ons UMD-pakket gemakkelijk worden gebruikt door elke ab initio-groep met elke software, allemaal met een minimale inspanning van aanpassing. De enige vereiste om het huidige pakket te gebruiken, is om de juiste parser van de uitvoer van de specifieke MD-software naar het umd-bestandsformaat te schrijven, als dit nog niet bestaat. Voorlopig leveren wij dergelijke parsers voor de VASP8 en de QBox9 pakketten.
Figuur 1: Stroomdiagram van de UMD-bibliotheek.
Fysieke eigenschappen zijn in blauw en de belangrijkste Python-scripts en hun opties zijn in het rood. Klik hier om een grotere versie van deze figuur te bekijken.
De umd-bestanden zijn ASCII-bestanden; typische uitbreiding is “umd.dat” maar niet verplicht. Alle analysecomponenten kunnen ASCII-bestanden van het umd-formaat lezen, ongeacht de werkelijke naamextensie. Sommige van de automatische scripts die zijn ontworpen om snelle grootschalige statistieken uit te voeren over verschillende simulaties, zoeken echter specifiek naar bestanden met de extensie umd.dat. Elke fysieke eigenschap wordt uitgedrukt op één regel. Elke regel begint met een trefwoord. Op deze manier is het formaat zeer aanpasbaar en maakt het mogelijk om nieuwe eigenschappen toe te voegen aan het umd-bestand, terwijl de leesbaarheid in alle versies behouden blijft. De eerste 30 regels van het umd-bestand van de simulatie van pyroliet bij 4,6 GPa en 3000 K, die hieronder in de discussie worden gebruikt, zijn weergegeven in figuur 2.
Figuur 2: Het begin van het umd-bestand waarin de simulatie van vloeibaar pyroliet bij 4,6 GPa en 3000 K wordt beschreven.
De koptekst wordt gevolgd door de beschrijving van elke momentopname. Elke eigenschap wordt op één regel geschreven, met de naam van de fysieke eigenschap, de waarde(n) en de eenheden, allemaal gescheiden door spaties. Klik hier om een grotere versie van deze figuur te bekijken.
Alle umd-bestanden bevatten een header die de inhoud van de simulatiecel beschrijft: het aantal atomen, elektronen en atoomtypen, evenals details voor elk atoom, zoals het type, het chemische symbool, het aantal valentie-elektronen en de massa. Een lege regel markeert het einde van de koptekst en scheidt deze van het hoofdgedeelte van het umd-bestand.
Vervolgens wordt elke stap van de simulatie gedetailleerd beschreven. Eerst worden de momentane thermodynamische parameters gegeven, elk op een andere lijn, waarbij (i) de naam van de parameter wordt gespecificeerd, zoals energie, spanningen, equivalente hydrostatische druk, dichtheid, volume, roosterparameters, enz., (ii) de waarde (en) en (iii) de eenheden. Een tabel die de atomen beschrijft, komt daarna. Een koplijn geeft de verschillende maten weer, zoals cartesiaanse posities, snelheden, ladingen, enz., En hun eenheden. Vervolgens wordt elk atoom op één lijn gedetailleerd. Door groepen van drie, overeenkomend met de drie x-, y-, z-assen , zijn de ingangen: de gereduceerde posities, de cartesische posities gevouwen in de simulatiecel, de Cartesiaanse posities (die goed rekening houden met het feit dat atomen tijdens een simulatie verschillende eenheidscellen kunnen doorkruisen), de atoomsnelheden en de atoomkrachten. De laatste twee ingangen zijn scalairen: lading en magnetisch moment.
Twee grote bibliotheken zorgen voor de goede werking van het hele pakket. De umd_process.py bibliotheek behandelt de umd-bestanden, zoals lezen en afdrukken. De crystallography.py bibliotheek behandelt alle informatie met betrekking tot de eigenlijke atomaire structuur. De onderliggende filosofie van de crystallography.py bibliotheek is om het rooster te behandelen als een vectoriële ruimte. De eenheidscelparameters vertegenwoordigen samen met hun oriëntatie de basisvectoren. De “Ruimte” heeft een reeks scalaire attributen (specifiek volume, dichtheid, temperatuur en specifiek aantal atomen), thermodynamische eigenschappen (interne energie, druk, warmtecapaciteit, enz.) en een reeks tensoriale eigenschappen (spanning en elasticiteit). Atomen bevolken deze ruimte. De klasse “Lattice” definieert dit ensemble, naast verschillende korte berekeningen, zoals specifiek volume, dichtheid, het verkrijgen van het reciproke rooster uit het directe, enz. De klasse “Atomen” definieert de atomen. Ze worden gekenmerkt door een reeks scalaire eigenschappen (naam, symbool, massa, aantal elektronen, enz.) en een reeks vectoriële eigenschappen (de positie in de ruimte, hetzij ten opzichte van de vectoriële basis beschreven in de klasse Lattice, of ten opzichte van universele Cartesische coördinaten, snelheden, krachten, enz.). Afgezien van deze twee klassen bevat de crystallography.py bibliotheek een reeks functies om een verscheidenheid aan tests en berekeningen uit te voeren, zoals atomaire afstanden of celvermenigvuldiging. Het periodiek systeem van de elementen is ook opgenomen als woordenboek.
De verschillende componenten van het umd-pakket schrijven verschillende uitvoerbestanden. Als algemene regel zijn het allemaal ASCII-bestanden, al hun vermeldingen worden gescheiden door tabbladen en ze zijn zo vanzelfsprekend mogelijk gemaakt. Ze geven bijvoorbeeld altijd duidelijk de fysieke eigenschap en zijn eenheden aan. De umd.dat bestanden voldoen volledig aan deze regel.
Het UMD-pakket is ontworpen om beter te werken met ab initio-simulaties, waarbij het aantal snapshots meestal beperkt is tot tientallen tot honderdduizenden snapshots, met een paar honderd atomen per celeenheid. Grotere simulaties zijn ook handelbaar op voorwaarde dat de machine waarop de nabewerking draait over voldoende actieve geheugenbronnen beschikt. De code onderscheidt zich door de verscheidenheid aan eigenschappen die het kan berekenen en door zijn open-source licentie.
De umd.dat bestanden zijn geschikt voor de ensembles die het aantal deeltjes ongewijzigd gedurende de simulatie behouden. Het UMD-pakket kan bestanden lezen die afkomstig zijn van berekeningen waarbij de vorm en het volume van de simulatiebox variëren. Deze omvatten de meest voorkomende berekeningen, zoals NVT en NPT, waarbij het aantal deeltjes, N, temperatuur T, volume, V en / of druk, P, constant wordt gehouden.
Voor de tijd beginnen de paarverdelingsfunctie en alle scripts die de interatomaire afstanden moeten schatten, zoals de soortvormingsscripts, werken alleen voor orthogonale eenheidscellen, wat betekent voor kubische, tetragonale en orthorhombe cellen, waarbij de hoeken tussen de assen 90 ° zijn.
De belangrijkste ontwikkelingslijnen voor versie 2.0 zijn het verwijderen van de orthogonaliteitsbeperking voor afstanden en het toevoegen van meer functies voor de soortvormingsscripts: om individuele chemische bindingen te analyseren, om de interatomaire hoeken te analyseren en om de tweede coördinatiesfeer te implementeren. Met behulp van externe samenwerking werken we aan het porten van de code naar een GPU voor snellere analyse in grotere systemen.
The authors have nothing to disclose.
Dit werk werd ondersteund door de European Research Council (ERC) in het kader van het Horizon 2020 onderzoeks- en innovatieprogramma van de Europese Unie (subsidieovereenkomst nummer 681818 IMPACT to RC), door het Directoraat Extreme Physics and Chemistry van het Deep Carbon Observatory en door de Onderzoeksraad van Noorwegen via zijn Centers of Excellence-financieringsregeling, projectnummer 223272. We erkennen de toegang tot de GENCI-supercomputers via de stl2816-serie eDARI-computersubsidies, tot de Irene AMD-supercomputer via het PRACE RA4947-project en de Fram-supercomputer via de UNINETT Sigma2 NN9697K. FS werd ondersteund door een Marie Skłodowska-Curie-project (subsidieovereenkomst ABISSE nr. 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 |