"Introduction au calcul gratuit des premiers principes pour les expérimentateurs de propriétés physiques" pour ceux qui ne peuvent pas expérimenter avec la nouvelle Corona récemment https://cometscome.github.io/DFT/build/ J'ai écrit un article, mais au cours du processus, j'ai découvert comment faire des calculs sur les premiers principes uniquement avec Google Colab, alors j'aimerais également le partager ici.
--Navigateur --Compte google
--Quantum Espresso: logiciel de calcul des premiers principes --Atomic Simulation Environment (ASE): bibliothèque Python pour les simulations atomiques et moléculaires https://qiita.com/cometscome_phys/items/4af134de6d959a7718b9
Pour utiliser Quantum Espresso avec Google Colab, je dois compiler Qunatum Espresso à partir de la source, mais j'ai trouvé que c'était possible de la manière suivante. Le but est d'avoir FFTW3 installé.
!git clone https://github.com/QEF/q-e.git
!apt-get install -y libfftw3-3 libfftw3-dev libfftw3-doc
%cd q-e
!DFLAGS='-D__OPENMP -D__FFTW3 -D__MPI -D__SCALAPACK' FFT_LIBS='-lfftw3' ./configure --enable-openmp
Je télécharge la source, installe FFTW3 et prépare la compilation. prochain,
!make pw
Vous pouvez exécuter pw.x, le code de base de Quantum Espresso. Le reste est un outil de post-processus, pp:
make pp
Installons également.
Maintenant, Build OSS with Google colaboratory Comme vous pouvez le voir, les binaires compilés ici disparaîtront après 12 heures. Alors
from google.colab import drive
drive.mount('/content/drive')
Exécutez pour enregistrer le binaire sur votre Google Drive. La prochaine fois que vous l'utiliserez, décompressez-le et utilisez-le.
%cd /content/
!zip -r /content/drive/'My Drive'/q-e.zip q-e
Enregistrez q-e.zip sous.
Définissez des variables d'environnement pour pouvoir exécuter Quantum Espresso. En d'autres termes
import os
os.environ['PATH'] = "/content/q-e/bin:"+os.environ['PATH']
ça ira.
ASE est facile à installer
!pip install ase
Entrez avec.
Maintenant, faisons le calcul des premiers principes.
Créez et déplacez le répertoire NaCl.
%cd /content
!mkdir NaCl
%cd NaCl
Ensuite, téléchargez le pseudo-potentiel.
!wget https://www.quantum-espresso.org/upf_files/Na.pbesol-spn-kjpaw_psl.1.0.0.UPF
!wget https://www.quantum-espresso.org/upf_files/Cl.pbesol-n-kjpaw_psl.1.0.0.UPF
Il est entré dans le répertoire NaCl.
prochain,
from ase.build import bulk
from ase.calculators.espresso import Espresso
from ase.constraints import UnitCellFilter
from ase.optimize import LBFGS
import ase.io
pseudopotentials = {'Na': 'Na.pbesol-spn-kjpaw_psl.1.0.0.UPF',
'Cl': 'Cl.pbesol-n-kjpaw_psl.1.0.0.UPF'}
rocksalt = bulk('NaCl', crystalstructure='rocksalt', a=6.0)
calc = Espresso(pseudopotentials=pseudopotentials,pseudo_dir = './',
tstress=True, tprnfor=True, kpts=(3, 3, 3))
rocksalt.set_calculator(calc)
ucf = UnitCellFilter(rocksalt)
opt = LBFGS(ucf)
opt.run(fmax=0.005)
# cubic lattic constant
print((8*rocksalt.get_volume()/len(rocksalt))**(1.0/3.0))
Vous pouvez optimiser la structure de NaCl en exécutant. Dans ce code, l'emplacement du pseudo potentiel est spécifié par `` pseudo_dir```. Cette fois, c'est le répertoire dans lequel vous vous trouvez.
Ensuite, calculons le diagramme de bande Cu.
Créez un répertoire Cu.
%cd /content
!mkdir Cu
%cd Cu
Téléchargez le pseudo-potentiel.
!wget https://www.quantum-espresso.org/upf_files/Cu.pz-d-rrkjus.UPF
Effectuer un calcul auto-cohérent pour déterminer la densité électronique. Une fois la densité électronique déterminée, un diagramme de bande peut être dessiné en calculant à chaque point k.
from ase import Atoms
from ase.build import bulk
from ase.calculators.espresso import Espresso
atoms = bulk("Cu")
pseudopotentials = {'Cu':'Cu.pz-d-rrkjus.UPF'}
input_data = {
'system': {
'ecutwfc': 30,
'ecutrho': 240,
'nbnd' : 35,
'occupations' : 'smearing',
'smearing':'gauss',
'degauss' : 0.01},
'disk_io': 'low'} # automatically put into 'control'
calc = Espresso(pseudopotentials=pseudopotentials,kpts=(4, 4, 4),input_data=input_data,pseudo_dir = './')
atoms.set_calculator(calc)
atoms.get_potential_energy()
fermi_level = calc.get_fermi_level()
print(fermi_level)
Ensuite, faites les calculs pour le diagramme de bande.
input_data.update({'calculation':'bands',
'restart_mode':'restart',
'verbosity':'high'})
calc.set(kpts={'path':'GXWLGK', 'npoints':100},
input_data=input_data)
calc.calculate(atoms)
Ici, le point intéressant d'ASE est que vous pouvez facilement dessiner un diagramme de bande en mettant le point de votre Brill Unzone préféré dans le chemin des kpts.
Enfin, calculez le diagramme des bandes.
import matplotlib.pyplot as plt
bs = calc.band_structure()
bs.reference = fermi_level
bs.plot(emax=40,emin=5)
Vous pouvez désormais effectuer des calculs basés sur les principes de base uniquement avec votre navigateur.
Si vous souhaitez redémarrer le calcul un autre jour, vous pouvez le faire comme suit.
from google.colab import drive
drive.mount('/content/drive')
!cp /content/drive/'My Drive'/q-e.zip ./
!unzip q-e.zip
import os
os.environ['PATH'] = "/content/q-e/bin:"+os.environ['PATH']
!pip install ase
Après cela, vous pouvez créer un répertoire et y télécharger un pseudo-potentiel.
!mkdir NaCl
%cd NaCl
!wget https://www.quantum-espresso.org/upf_files/Na.pbe-spn-kjpaw_psl.1.0.0.UPF
!wget https://www.quantum-espresso.org/upf_files/Cl.pbe-n-rrkjus_psl.1.0.0.UPF
Recommended Posts