"Einführung in die kostenlose Berechnung der ersten Prinzipien für Experimentatoren physikalischer Eigenschaften" für diejenigen, die in letzter Zeit nicht mit der neuen Corona experimentieren können https://cometscome.github.io/DFT/build/ Ich habe einen Artikel geschrieben, dabei aber herausgefunden, wie man First-Principles-Berechnungen nur mit Google Colab durchführt. Deshalb möchte ich ihn auch hier teilen.
--Browser --Google Benutzerkonto
--Quantum Espresso: Berechnungssoftware nach den ersten Prinzipien --Atomic Simulation Environment (ASE): Python-Bibliothek für atomare und molekulare Simulationen https://qiita.com/cometscome_phys/items/4af134de6d959a7718b9
Um Quantum Espresso mit Google Colab verwenden zu können, muss ich Qunatum Espresso aus dem Quellcode kompilieren. Ich habe jedoch festgestellt, dass dies auf folgende Weise möglich ist. Der Punkt ist, FFTW3 installiert zu haben.
!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
Ich lade die Quelle herunter, installiere FFTW3 und bereite das Kompilieren vor. Nächster,
!make pw
Sie können pw.x ausführen, den Kerncode von Quantum Espresso. Der Rest ist ein Nachbearbeitungswerkzeug, pp:
make pp
Lassen Sie uns auch installieren.
Jetzt OSS mit Google-Labor erstellen Wie Sie in sehen können, verschwinden die hier kompilierten Binärdateien nach 12 Stunden. Damit
from google.colab import drive
drive.mount('/content/drive')
Führen Sie diese Option aus, um die Binärdatei auf Ihrem Google Drive zu speichern. Wenn Sie es das nächste Mal verwenden, entpacken Sie es und verwenden Sie es.
%cd /content/
!zip -r /content/drive/'My Drive'/q-e.zip q-e
Speichern Sie q-e.zip als.
Stellen Sie Umgebungsvariablen so ein, dass Sie Quantum Espresso ausführen können. Mit anderen Worten
import os
os.environ['PATH'] = "/content/q-e/bin:"+os.environ['PATH']
Wird besorgt.
ASE ist einfach zu installieren
!pip install ase
Geben Sie mit ein.
Lassen Sie uns nun tatsächlich die Berechnung der ersten Prinzipien durchführen.
Erstellen und verschieben Sie das NaCl-Verzeichnis.
%cd /content
!mkdir NaCl
%cd NaCl
Laden Sie dann das Pseudopotential herunter.
!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
Es ging in das NaCl-Verzeichnis.
Nächster,
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))
Sie können die Struktur von NaCl durch Ausführen optimieren. In diesem Code wird der Ort des Pseudopotentials durch `` `pseudo_dir``` angegeben. Diesmal ist es das Verzeichnis, in dem Sie sich gerade befinden.
Als nächstes berechnen wir das Cu-Bandendiagramm.
Erstellen Sie ein Cu-Verzeichnis.
%cd /content
!mkdir Cu
%cd Cu
Laden Sie das Pseudopotential herunter.
!wget https://www.quantum-espresso.org/upf_files/Cu.pz-d-rrkjus.UPF
Führen Sie eine selbstkonsistente Berechnung durch, um die Elektronendichte zu bestimmen. Sobald die Elektronendichte bestimmt ist, kann durch Berechnen an jedem k-Punkt ein Banddiagramm gezeichnet werden.
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)
Führen Sie dann die Berechnungen für das Banddiagramm durch.
input_data.update({'calculation':'bands',
'restart_mode':'restart',
'verbosity':'high'})
calc.set(kpts={'path':'GXWLGK', 'npoints':100},
input_data=input_data)
calc.calculate(atoms)
Hier ist der interessante Punkt von ASE, dass Sie leicht ein Banddiagramm zeichnen können, indem Sie den Punkt Ihrer Lieblings-Brill-Unzone in den Pfad von kpts setzen.
Berechnen Sie abschließend das Banddiagramm.
import matplotlib.pyplot as plt
bs = calc.band_structure()
bs.reference = fermi_level
bs.plot(emax=40,emin=5)
Sie können jetzt First-Principles-Berechnungen nur mit Ihrem Browser durchführen.
Wenn Sie die Berechnung an einem anderen Tag neu starten möchten, können Sie dies wie folgt tun.
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
Danach können Sie ein Verzeichnis erstellen und Pseudopotential darauf herunterladen.
!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