O pacote QUIP
é uma coleção de ferramentas de software para realizar simulações de dinâmica molecular. Ele implementa uma variedade de potenciais interatômicos e mecânica quântica de forte ligação, e também é capaz de chamar pacotes externos e servir como plug-ins para outros softwares, como LAMMPS, CP2K e também o framework python ASE. Várias combinações híbridas também são suportadas no estilo QM/MM, com foco particular em sistemas de materiais como metais e semicondutores.
Para obter mais detalhes, consulte a documentação on-line. Há documentação separada para SOAP e GAP.
O suporte de longo prazo do pacote é garantido por:
Partes deste código foram escritas por: Albert Bartok-Partay, Livia Bartok-Partay, Federico Bianchini, Anke Butenuth, Marco Caccin, Silvia Cereda, Gabor Csanyi, Alessio Comisso, Tom Daff, ST John, Chiara Gattinoni, Gianpietro Moras, James Kermode , Letif Mones, Alan Nichol, David Packwood, Lars Pastewka, Giovanni Peralta, Ivan Solt, Oliver Strickson, Wojciech Szlachta, Csilla Varnai, Steven Winfield, Tamas K Stenczel, Adam Fekete.
Direitos autorais 2006-2021.
A maior parte da versão disponível publicamente é lançada sob a licença GNU General Public, versão 2, com algumas partes em domínio público. O código GAP, incluído como submódulo, é distribuído sob uma licença de fonte acadêmica não comercial
Cite a seguinte publicação se você usar o QUIP:
@ARTICLE { Csanyi2007-py ,
title = " Expressive Programming for Computational Physics in Fortran 95+ " ,
author = " Cs{'a}nyi, G{'a}bor and Winfield, Steven and Kermode, J R and De
Vita, A and Comisso, Alessio and Bernstein, Noam and Payne,
Michael C " ,
journal = " IoP Comput. Phys. Newsletter " ,
pages = " Spring 2007 " ,
year = 2007
}
Se você usa a interface Python quippy
, cite:
@ARTICLE { Kermode2020-wu ,
title = " f90wrap: an automated tool for constructing deep Python
interfaces to modern Fortran codes " ,
author = " Kermode, James R " ,
journal = " J. Phys. Condens. Matter " ,
month = mar,
year = 2020 ,
keywords = " Fortran; Interfacing; Interoperability; Python; Wrapping codes;
f2py " ,
language = " en " ,
issn = " 0953-8984, 1361-648X " ,
pmid = " 32209737 " ,
doi = " 10.1088/1361-648X/ab82d2 "
}
Se você usar o código GAP, cite
@ARTICLE { Bartok2010-pw ,
title = " Gaussian approximation potentials: the accuracy of quantum
mechanics, without the electrons " ,
author = " Bart{'o}k, Albert P and Payne, Mike C and Kondor, Risi and
Cs{'a}nyi, G{'a}bor " ,
journal = " Phys. Rev. Lett. " ,
volume = 104 ,
number = 13 ,
pages = " 136403 " ,
month = apr,
year = 2010 ,
issn = " 0031-9007, 1079-7114 " ,
pmid = " 20481899 " ,
doi = " 10.1103/PhysRevLett.104.136403 "
}
Os seguintes potenciais interatômicos estão atualmente codificados ou vinculados no QUIP:
As seguintes formas funcionais e parametrizações rígidas são implementadas:
Os seguintes pacotes externos podem ser chamados:
quippy
Python; versão mais recente recomendada) O QUIP nasceu da necessidade de unir de forma eficiente uma ampla variedade de modelos diferentes, tanto empíricos quanto de mecânica quântica. Não será competitivo em termos de desempenho com códigos como LAMMPS e Gromacs. O Ambiente de Simulação Atômica também faz isso e é muito mais utilizado, mas o QUIP possui vários recursos exclusivos:
quippy
O binário para QUIP e as ligações quippy Python associadas que fornecem interoperabilidade com o Atomic Simulation Environment (ASE) estão disponíveis no índice de pacotes Python (PyPI) sob o nome de pacote quippy-ase
. Isso significa que você pode instalar a versão mais recente com:
pip install quippy-ase
A instalação via pip
também disponibiliza os programas de linha de comando quip
e gap_fit
(fornecendo o diretório onde o pip instala os scripts está em seu PATH
).
Atualmente, as rodas estão disponíveis para arquiteturas x86_64
com Python 3.6+ no macOS e distribuições Linux baseadas em glibc (por exemplo, Ubuntu, CentOS) e para macOS arm64. As rodas são atualizadas periodicamente usando GitHub Actions CI. Abra os problemas aqui se tiver problemas ao instalar com pip
.
Se você tiver acesso ao Docker ou Singularity, poderá tentar uma das imagens pré-compiladas para começar a funcionar rapidamente.
Para compilar o QUIP os requisitos mínimos são:
Um compilador Fortran funcional. O QUIP é testado com gfortran
4.4 e posterior e ifort
11.1.
Bibliotecas de álgebra linear BLAS e LAPACK. O QUIP é testado com versões de referência libblas-dev
e liblapack-dev
no Ubuntu 12.04 e mkl
11.1 com ifort
.
MPI: Para usar o paralelismo MPI de gap_fit
, você precisa de uma biblioteca ScaLAPACK, por exemplo, libscalapack-openmpi
no Ubuntu, ou como parte do MKL.
Clone o repositório QUIP do GitHub. A opção --recursive
traz submódulos automaticamente (se você não fizer isso, precisará executar git submodule update --init --recursive
do diretório QUIP de nível superior após a clonagem) ::
git clone --recursive https://github.com/libAtoms/QUIP.git
Um submódulo é o código GAP, que pode ser encontrado em src/GAP
. Observe que o GAP é distribuído sob uma licença diferente.
GAP é um método de aprendizado de máquina que usa regressão de processo gaussiana e precisa de grandes arquivos de dados para ser executado. Você pode encontrar potenciais que foram publicados, bem como dados de treinamento em nosso repositório de dados, consulte também a documentação online.
Decida sua arquitetura olhando no diretório arch/
e defina uma variável de ambiente QUIP_ARCH
, por exemplo::
export QUIP_ARCH=linux_x86_64_gfortran
para gfortran padrão no Linux. Aqui é onde você pode ajustar qual compilador está sendo usado, caso não goste dos padrões. Pode ser necessário criar seu próprio arquivo arch/Makefile.${QUIP_ARCH}
baseado em um arquivo existente para sistemas mais exóticos.
MPI: Alguns arquivos arch já incluem ajustes para uso de MPI. Esses geralmente têm mpi
em seu nome, por exemplo, linux_x86_64_gfortran_openmpi+openmp
.
Personalize o QUIP, defina as bibliotecas matemáticas e forneça opções de vinculação::
make config
Makefile.config criará um diretório de construção, build/${QUIP_ARCH}
, e toda a construção acontecerá lá. Primeiro ele fará algumas perguntas sobre onde você guarda bibliotecas e outras coisas, se você não usar algo que ele está pedindo, deixe em branco. As respostas serão armazenadas em Makefile.inc
no diretório build/${QUIP_ARCH}
, e você poderá editá-las posteriormente (por exemplo, para alterar opções de compilador, otimização ou depuração).
Se posteriormente você fizer alterações significativas na configuração, como ativar ou desativar o suporte a tight-binding, deverá forçar uma reconstrução completa fazendo make deepclean; make
.
MPI: Para usar a paralelização MPI de gap_fit
, você deve adicionar sua biblioteca de sistema às opções de vinculação, por exemplo -lscalapack
ou -lscalapack-openmpi
, habilitar suporte GAP, habilitar decomposição QR e habilitar ScaLAPACK.
Compile todos os programas, módulos e bibliotecas::
make
Do diretório QUIP
de nível superior. Todos os programas são integrados build/${QUIP_ARCH}/
. Você também pode encontrar bibliotecas e arquivos de objetos compilados ( libquip.a
) nesse diretório. Os programas podem ser chamados diretamente desse diretório.
Outros alvos úteis incluem:
make install
: copia todos os programas compilados que pode encontrar para QUIP_INSTALLDIR
, se estiver definido e for um diretório (caminho completo necessário), e copia estruturas agrupadas para QUIP_STRUCTS_DIR
se estiver definido.
make libquip
: Compila o QUIP como uma biblioteca e vincula-o a ele. Isso criará todas as várias bibliotecas e as combinará em uma: build/${QUIP_ARCH}/libquip.a
, que é o que você precisa vincular (assim como o LAPACK).
Um bom ponto de partida é usar o programa quip
, que pode calcular as propriedades de uma configuração atômica usando uma variedade de modelos. Por exemplo::
quip atoms_filename=test.xyz init_args= ' IP LJ '
param_filename=share/Parameters/ip.parms.LJ.xml E
supondo que você tenha um arquivo chamado test.xyz
com os seguintes dados representando átomos de Cu em uma rede cúbica fcc::
4
Lattice="3.61 0 0 0 3.61 0 0 0 3.61" Properties=species:S:1:pos:R:3
Cu 0.000 0.000 0.000
Cu 0.000 1.805 1.805
Cu 1.805 0.000 1.805
Cu 1.805 1.805 0.000
Os parâmetros Lennard-Jones no exemplo acima são definidos no arquivo ip.parms.LJ.xml
em share/Parameters
(certifique-se de que o caminho para este arquivo esteja correto). O formato da configuração atômica é dado no formato XYZ estendido, no qual a primeira linha é o número de átomos, a segunda linha é uma série de pares chave=valor, que deve conter pelo menos a chave Lattice fornecendo a caixa delimitadora periódica e a chave Propriedades que descreve as linhas restantes. O valor de Propriedades é uma sequência de trigêmeos separados por dois pontos (:), que fornecem o nome, tipo e número de colunas, sendo o tipo dado por I para inteiros, R para reais, S para strings.
A maioria dos argumentos de string podem ser substituídos por --help
e os programas QUIP imprimirão uma lista de palavras-chave permitidas com breves mensagens de ajuda quanto ao seu uso, por exemplo, init_args=--help
fornecerá uma lista de possíveis tipos de modelos (e algumas combinações) . A análise é recursiva, então init_args="IP --help"
irá então listar os tipos de potenciais interatômicos (IP) que estão disponíveis.
Para compilar os wrappers Python ( quippy
), os requisitos mínimos são os seguintes. f90wrap
será instalado automaticamente pelo processo de construção, mas pode ser necessário verificar se o diretório onde pip
instala os scripts executáveis está no seu caminho (por exemplo, definindo PATH=~/.local/bin:$PATH
).
numpy>=1.5.0
)ase>=3.17.0
) Nota: Se você estiver usando um ambiente virtual Python (virtualenv) e quiser instalar quippy
nele, certifique-se de que o ambiente esteja ativado ( source <env_dir>/bin/activate
, onde <env_dir>
é a raiz do seu ambiente virtual) antes construindo quippy
(caso contrário, as versões da biblioteca podem causar conflitos inesperados).
Para compilar os wrappers Python ( quippy
), execute::
make quippy
Quippy pode ser usado adicionando o diretório lib
em quippy/build/${QUIP_ARCH}
ao seu $PYTHONPATH
, no entanto, pode ser mais conveniente instalar em uma distribuição Python específica::
make install-quippy
irá instalar no virtualenv atual ou tentar instalar em todo o sistema (geralmente falha sem sudo
). Para instalar apenas para o usuário atual (em ~/.local
), execute o comando QUIPPY_INSTALL_OPTS=--user make install-quippy
ou use QUIPPY_INSTALL_OPTS=--prefix=<directory>
para instalar em um diretório específico. QUIPPY_INSTALL_OPTS
também pode ser definido no arquivo build/${QUIP_ARCH}/Makefile.inc
.
Mais detalhes sobre o processo de instalação do Quippy e solução de problemas comuns de construção estão disponíveis na documentação online.
Para executar os testes de unidade e de regressão, que dependem do quippy
:: bash make test
Para voltar a um estado próximo a um novo clone, use bash make distclean
Algumas funcionalidades só estão disponíveis se você verificar outros módulos nos diretórios QUIP/src/
, por exemplo, ThirdParty
(parâmetros DFTB, modelo de água TTM3f).
Para executar potenciais QUIP via LAMMPS, make libquip
para colocar o QUIP em formato de biblioteca e siga as instruções na documentação do LAMMPS. Você precisa de pelo menos a versão de 11 de agosto de 2017 ou posterior.
cd src/GAP
git checkout < commit >
OU
git checkout main
Atualizando a versão no repositório QUIP
:
cd ../..
git add src/GAP
git commit -m "updating the version of GAP"
Não recomendamos compiladores e python fornecidos pela Apple e não testamos a compatibilidade com eles. Use MacPorts ou Homebrew para obter compiladores GNU e também use o python de lá ou Anaconda. A partir desta edição, o gcc-8.1 produz um erro interno do compilador, mas o gcc-4.6 até o gcc-7 está bem.
As rodas são construídas em solicitações push e pull para public
usando cibuildwheel com este fluxo de trabalho.
Para fazer um release candidate criar uma tag com um sufixo como -rc1
na primeira tentativa, pressione para acionar a compilação:
git commit -m ' release v0.x.z-rc1 '
git tag v0.x.y-rc1
git push --tags
Se tudo correr bem, os arquivos .whl
aparecerão como ativos em uma nova versão do GitHub. O processo de instalação agora pode ser testado localmente.
Quando tudo funcionar corretamente, faça um lançamento completo (ou seja, crie uma tag chamada apenas v0.xy
sem o sufixo -rc1
). Isso acionará o upload de rodas e a distribuição de fontes para o PyPI.