Derretimentos e fluidos são vetores onipresentes do transporte em massa em sistemas naturais. Desenvolvemos um pacote de código aberto para analisar simulações de dinâmica molecular ab initio de tais sistemas. Calculamos propriedades estruturais (ligação, clusterização, especiação química), transporte (difusão, viscosidade) e propriedades termodinâmicas (espectro vibracional).
Desenvolvemos um pacote de código aberto baseado em Python para analisar os resultados decorrentes de simulações de dinâmica molecular ab initio de fluidos. O pacote é mais adequado para aplicações em sistemas naturais, como derretimento de silicato e óxido, fluidos à base de água e vários fluidos supercríticos. O pacote é uma coleção de scripts Python que incluem duas grandes bibliotecas que lidam com formatos de arquivo e com cristalografia. Todos os scripts são executados na linha de comando. Propomos um formato simplificado para armazenar as trajetórias atômicas e informações termodinâmicas relevantes das simulações, que são salvas em arquivos UMD, em posição de Universal Molecular Dynamics. O pacote UMD permite a computação de uma série de propriedades estruturais, de transporte e termodinâmicas. A partir da função de distribuição de pares, ele define os comprimentos dos títulos, constrói uma matriz de conectividade interatômica e, eventualmente, determina a especiação química. Determinar a vida útil das espécies químicas permite executar uma análise estatística completa. Em seguida, scripts dedicados computam os deslocamentos médios quadrados para os átomos, bem como para as espécies químicas. A análise de auto correlação implementada das velocidades atômicas produz os coeficientes de difusão e o espectro vibracional. A mesma análise aplicada nos estresses rende a viscosidade. O pacote está disponível através do site do GitHub e através de sua própria página dedicada do projeto ERC IMPACT como pacote de acesso aberto.
Fluidos e derretimentos são vetores ativos de transporte químico e físico em ambientes naturais. As taxas elevadas de difusão atômica favorecem trocas químicas e reações, a baixa viscosidade aliada à flutuação variada favorece uma grande transferência de massa, e as relações de densidade cristalina favorecem camadas dentro de corpos planetários. A ausência de uma rede periódica, temperaturas típicas de alta temperatura necessárias para atingir o estado derretido, e a dificuldade para saciar tornam a determinação experimental de uma série de propriedades óbvias, como densidade, difusão e viscosidade, extremamente desafiadoras. Essas dificuldades tornam os métodos computacionais alternativos ferramentas fortes e úteis para investigar essa classe de materiais.
Com o advento do poder computacional e a disponibilidade de supercomputadores, duas grandes técnicas numéricas de simulações atomísticas são atualmente empregadas para estudar o estado dinâmico de um sistema atomista não cristalino, Monte Carlo1 e dinâmica molecular (MD)1,2. Em Monte Carlo, o espaço configuracional é amostrado aleatoriamente; Os métodos de Monte Carlo mostram escala linear na paraleloização se todas as observações amostrais forem independentes umas das outras. A qualidade dos resultados depende da qualidade do gerador de números aleatórios e da representatividade da amostragem. Os métodos de Monte Carlo mostram escala linear na paraleloização se a amostragem for independente uma da outra. Na dinâmica molecular (MD) o espaço configuracional é amostrado por trajetórias atômicas dependentes do tempo. A partir de uma determinada configuração, as trajetórias atômicas são computadas pela integração das equações newtonianas de movimento. As forças interatômicas podem ser computadas usando potenciais interatômicos de modelo (em MD clássico) ou usando métodos de princípios iniciais (em ab initio, ou primeiros princípios, MD). A qualidade dos resultados depende do comprimento da trajetória e sua capacidade de não ser atraído para a minima local.
Simulações de dinâmica molecular contêm uma infinidade de informações, todas relacionadas ao comportamento dinâmico do sistema. Propriedades médias termodinâmicas, como energia interna, temperatura e pressão, são bastante padrão para calcular. Eles podem ser extraídos dos arquivos de saída das simulações e mediados, enquanto as quantidades relacionadas diretamente ao movimento dos átomos, bem como à sua relação mútua precisam ser computadas após a extração das posições atômicas e velocidades.
Consequentemente, muito esforço tem sido dedicado para visualizar os resultados, e vários pacotes estão disponíveis hoje, em diferentes plataformas, código aberto ou não [Ovito3, VMD4, Vesta5, Travis6, etc.]. Todas essas ferramentas de visualização lidam eficientemente com distâncias interatômicas e, como tal, permitem a computação eficiente de funções de distribuição de pares e coeficientes de difusão. Vários grupos que realizam simulações de dinâmica molecular em larga escala têm software proprietário para analisar várias outras propriedades resultantes das simulações, às vezes em shareware ou outras formas de acesso limitado à comunidade, e às vezes limitados em escopo e uso para alguns pacotes específicos. Algoritmos sofisticados para extrair informações sobre ligação interatômica, padrões geométricos e termodinâmica são desenvolvidos e implementados em alguns desses pacotes3,4,5,6,7, etc.
Aqui propomos o pacote UMD – um pacote de código aberto escrito em Python para analisar a saída de simulações de dinâmica molecular. O pacote UMD permite a computação de uma ampla gama de propriedades estruturais, dinâmicas e termodinâmicas (Figura 1). O pacote está disponível através do site do GitHub (https://github.com/rcaracas/UMD_package) e através de uma página dedicada (http://moonimpact.eu/umd-package/) do projeto ERC IMPACT como um pacote de acesso aberto.
Para torná-lo universal e mais fácil de manusear, nossa abordagem é primeiro extrair todas as informações relacionadas ao estado termodinâmico e as trajetórias atômicas do arquivo de saída da dinâmica molecular real. Essas informações são armazenadas em um arquivo dedicado, cujo formato é independente do pacote MD original onde a simulação foi executada. Nós nomeamos esses arquivos “umd”, que significa Universal Molecular Dynamics. Desta forma, nosso pacote UMD pode ser facilmente usado por qualquer grupo ab initio com qualquer software, tudo com um esforço mínimo de adaptação. O único requisito para usar o pacote atual é escrever o analisador apropriado da saída do software MD em particular para o formato de arquivo umd, se isso ainda não existir. Por enquanto, fornecemos tais analisadores para os pacotes VASP8 e QBox9 .
Figura 1: Fluxograma da biblioteca umd.
As propriedades físicas estão em azul, e os principais scripts python e suas opções estão em vermelho. Clique aqui para ver uma versão maior desta figura.
Os arquivos umd são arquivos ASCII; extensão típica é “umd.dat”, mas não obrigatória. Todos os componentes de análise podem ler arquivos ASCII do formato umd, independentemente da extensão real do nome. No entanto, alguns dos scripts automáticos projetados para executar estatísticas rápidas em grande escala ao longo de várias simulações procuram especificamente arquivos com a extensão umd.dat. Cada propriedade física é expressa em uma linha. Cada linha começa com uma palavra-chave. Desta forma, o formato é altamente adaptável e permite que novas propriedades sejam adicionadas ao arquivo umd, preservando toda a sua legibilidade ao longo das versões. As primeiras 30 linhas do arquivo umd da simulação de pirolito a 4,6 GPa e 3000 K, usadas abaixo na discussão, são mostradas na Figura 2.
Figura 2: O início do arquivo umd descrevendo a simulação de pirolito líquido a 4,6 GPa e 3000 K.
O cabeçalho é seguido pela descrição de cada instantâneo. Cada imóvel está escrito em uma linha, contendo o nome da propriedade física, o valor(s) e as unidades, todas separadas por espaços. Clique aqui para ver uma versão maior desta figura.
Todos os arquivos de umd contêm um cabeçalho descrevendo o conteúdo da célula de simulação: o número de átomos, elétrons e tipos atômicos, bem como detalhes para cada átomo, como seu tipo, símbolo químico, número de elétrons de valência, e sua massa. Uma linha vazia marca a extremidade do cabeçalho e a separa da parte principal do arquivo umd.
Em seguida, cada passo da simulação é detalhado. Primeiro, são dados os parâmetros termodinâmicos instantâneos, cada um em uma linha diferente, especificando (i) o nome do parâmetro, como energia, tensões, pressão hidrostática equivalente, densidade, volume, parâmetros de rede, etc., (ii) seu valor(s) e (iii) suas unidades. Uma tabela descrevendo os átomos vem em seguida. Uma linha de cabeçalho dá as diferentes medidas, como posições cartesianas, velocidades, cargas, etc., e suas unidades. Então cada átomo é detalhado em uma linha. Por grupos de três, correspondentes aos eixos três x, y, z , as entradas são: as posições reduzidas, as posições cartesianas dobradas na célula de simulação, as posições cartesianas (que levam em conta o fato de que os átomos podem atravessar várias células unitárias durante uma simulação), as velocidades atômicas e as forças atômicas. As duas últimas entradas são escalares: carga e momento magnético.
Duas grandes bibliotecas garantem o bom funcionamento de todo o pacote. A biblioteca umd_process.py lida com os arquivos umd, como leitura e impressão. A biblioteca crystallography.py trata de todas as informações relacionadas à estrutura atômica real. A filosofia subjacente da biblioteca crystallography.py é tratar a rede como um espaço vetorial. Os parâmetros da célula unitária, juntamente com sua orientação, representam os vetores de base. O “Espaço” tem uma série de atributos escalares (volume específico, densidade, temperatura e número específico de átomos), propriedades termodinâmicas (energia interna, pressão, capacidade térmica, etc.), e uma série de propriedades tensores (estresse e elasticidade). Átomos povoam este espaço. A classe “Rede” define este conjunto, ao lado de vários poucos cálculos curtos, como volume específico, densidade, obtenção da rede recíproca do direto, etc. A classe “Átomos” define os átomos. Caracterizam-se por uma série de propriedades escalares (nome, símbolo, massa, número de elétrons, etc.) e uma série de propriedades vetoriais (a posição no espaço, seja em relação à base vectorial descrita na classe Rettice, ou relativa às coordenadas cartesianas universais, velocidades, forças, etc.). Além dessas duas classes, a biblioteca crystallography.py contém uma série de funções para realizar uma variedade de testes e cálculos, como distâncias atômicas ou multiplicação celular. A tabela periódica dos elementos também é incluída como dicionário.
Os vários componentes do pacote umd escrevem vários arquivos de saída. Como regra geral, são todos arquivos ASCII, todas as suas entradas são separadas por guias, e são feitas o mais autoexplicativo possível. Por exemplo, eles sempre indicam claramente a propriedade física e suas unidades. Os arquivos umd.dat cumprem totalmente esta regra.
O pacote UMD foi projetado para funcionar melhor com simulações ab initio, onde o número de instantâneos é tipicamente limitado a dezenas a centenas de milhares de instantâneos, com algumas centenas de átomos por célula de unidade. Simulações maiores também são tratáveis desde que a máquina na qual a pós-processamento seja executada tenha recursos de memória ativos suficientes. O código distingue-se pela variedade de propriedades que pode calcular e por sua licença de código aberto.
Os arquivos umd.dat são apropriados para os conjuntos que preservam o número de partículas inalteradas ao longo da simulação. O pacote UMD pode ler arquivos decorrentes de cálculos onde a forma e o volume da caixa de simulação variam. Estes cobrem os cálculos mais comuns, como NVT e NPT, onde o número de partículas, N, temperatura T, volume, V e/ou pressão, P, são mantidos constantes.
Para o tempo começam a função de distribuição de pares, bem como todos os scripts que precisam estimar as distâncias interatômicas, como os scripts de especiação, funcionam apenas para células unitárias ortogonais, ou seja, para células cúbicas, tetragonais e ortotómicas, onde os ângulos entre os eixos são de 90°.
As principais linhas de desenvolvimento para a versão 2.0 são a remoção da restrição de ortogonalidade para distâncias e a adição de mais recursos para os scripts de especiação: analisar ligações químicas individuais, analisar os ângulos interatômicos e implementar a segunda esfera de coordenação. Com a ajuda da colaboração externa, estamos trabalhando na portabilidade do código em uma GPU para análise mais rápida em sistemas maiores.
The authors have nothing to disclose.
Este trabalho foi apoiado pelo Conselho Europeu de Pesquisa (ERC) no âmbito do programa de pesquisa e inovação da União Europeia Horizon 2020 (número de subvenção 681818 IMPACT ao RC), pela Diretoria de Física Extrema e Química do Observatório de Carbono Profundo, e pelo Conselho de Pesquisa da Noruega através de seu programa de financiamento centros de excelência, número do projeto 223272. Reconhecemos o acesso aos supercomputadores GENCI através da série stl2816 de bolsas de computação eDARI, ao supercomputador Irene AMD através do projeto PRACE RA4947, e ao supercomputador Fram através do UNINETT Sigma2 NN9697K. A FS foi apoiada por um projeto marie skłodowska-curie (contrato de concessão 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 |