Fühlen wir uns wie ein Materialforscher mit Python [Einführung in Pymatgen]

Hallo.

Im vorherigen Artikel habe ich Materialforschung zum Thema maschinelles Lernen vorgestellt. Fühlen wir uns wie ein Materialforscher mit maschinellem Lernen

Dieses Mal werde ich pymatgen </ b> (Python Materials Genomics), eine Open-Source-Python-Bibliothek, für meine eigene Studie vorstellen. Ich möchte, dass Sie mit der Materialforschung in Kontakt kommen.

Angenommener Leser

  • Ich bin ein Programmierer. Menschen, die sich ein wenig für Physik und Materialien interessieren ――Personen, die Materialien herstellen, aber ihre Forschung effizienter gestalten möchten ――Ich mache Materialien. Leute, die in das Programm beißen wollen
  • Materialinformatik Interessierte Personen

Nebenbei habe ich eine Facebook-Gruppe namens Materials Informatics Young People's Association gegründet. Es gibt nur noch wenige Leute, aber wenn Sie interessiert sind, können Sie mich gerne kontaktieren (fb oder E-Mail auf Ihrem Qiita-Konto). Ich möchte Informationen über Materialinformatik austauschen und Lernsitzungen abhalten.

dann fangen wir an.

Inhaltsverzeichnis

  • [Was ist Materialforschung überhaupt? (Zitat aus dem Obigen)](#Was ist Materialforschung überhaupt)
  • [Was ist Pymatgen](Was ist #pymatgen)
  • [Grundfunktion](# Grundfunktion)
  • [Verknüpfung mit anderen Tools](# Verknüpfung mit anderen Tools)
  • [Pymatgen installieren](#pymatgen installieren)
  • [Lass uns tatsächlich umziehen](# Lass uns tatsächlich analysieren)

Wenn Sie sich sofort wie ein Materialforscher fühlen möchten, können Sie zur Installation springen. Die Grundlagen basieren auf dem offiziellen Dokument von pymatgen. Wenn Sie also keine Schwierigkeiten haben, Englisch zu lesen, können Sie es so verstehen, als ob Sie dies lesen. dann fangen wir an.

Was ist Materialforschung überhaupt?

Dies ist ein Zitat aus oben. Wenn Sie es lesen, überspringen Sie es bitte. </ b> → [Was ist Pymatgen](Was ist #pymatgen)

Zunächst einmal denke ich, dass Materialforschung so etwas wie Material ist. Wie Sie sagten, gibt es verschiedene Materialien wie Keramik, Polymere und Metalle.

Zum Beispiel iPhone iphone.jpg

Es gibt Hunderte solcher kleinen Keramikkondensatoren.

0206_img0002.jpg

Und um einen von Apple ausgewählten Hochleistungskondensator herzustellen,

・ Welche Elemente sollten kombiniert werden? ・ Was für einen Prozess sollten Sie durchführen?

Es wird das schwierige Problem lösen. Hier ist ein Beispiel, wie man es löst.

  1. Wollen Sie vorerst die von den großen Männern der Vergangenheit gemachte ändern?
  2. Unerwartet ... Ich frage mich, ob es besser ist, die Mischzeit zu verlängern (Prozessoptimierung)
  3. Es ist geschafft! Verschiedene Dinge messen und beobachten (Messung)
  4. Ich sehe, es ist eine hohe Leistung mit einem solchen physikalischen Phänomen (Theorie, Analyse)
  5. Die Tendenz wurde durch Theorie und Analyse gefunden, also möchte ich es das nächste Mal mit solchen Elementen machen ... (Suche)

Es ist wie es ist. Dies ist nur ein Beispiel, aber was ist Materialforschung?

Machen Sie großartige Materialien, indem Sie Prozessoptimierung, Messung, Theorie, Analyse, Exploration usw. voll ausnutzen.

Es ist chaotisch, aber es sieht so aus.

Was ist Pymatgen?

Einfach ausgedrückt ist es ein nützliches Werkzeug zur Analyse von Materialien.

Schauen Sie sich zunächst das folgende Diagramm an, um eine ungefähre Vorstellung von der Materialanalyse zu erhalten. スクリーンショット 2017-05-17 午後0.19.07.png Aus Wikipedia

Wie ich es in der High School getan habe, bestehen Substanzen aus Atomen und jede hat eine Vielzahl von Strukturen. Der Zweck der Materialanalyse ist Welche Art von Atom hat welche Struktur und welche Eigenschaft? </ b> Die Lösung besteht darin, Physik zu verwenden.

Das Hauptthema ist also Pymatgen,

(1) Viele nützliche Tools zur Visualisierung von Materialien und zur Verwendung von Analysedaten ② Einfache Verknüpfung mit den derzeit für die Materialanalyse verwendeten Tools

Es ist eine Open Source </ b> Python-Bibliothek, die den Vorteil hat. Bitte beachten Sie, dass auf der GUI keine Analysesoftware ausgeführt wird.

Als spezifische Funktion

  1. Flexibler Ausdruck der Typen, Positionen und Strukturen von Elementen, die in Materialien mit Python-Klassen enthalten sind
  2. Unterstützt verschiedene Datenformate, die häufig in der Materialforschung verwendet werden
  3. Zahlreiche Analysewerkzeuge zur Ausgabe von Phasendiagrammen und Potential-pH-Diagrammen sowie zur Analyse chemischer Reaktionen und Diffusion
  4. Eine elektronische Strukturanalyse wie Bandstruktur und Zustandsdichte ist möglich
  5. Kann mit der REST-API von Materials Project verknüpft werden

Ist in der offiziellen Dokumentation aufgeführt.

Von hier aus fühlen wir uns wie ein Materialforscher, indem wir tatsächlich Pymatgen verwenden.

Grundfunktion

pymatgen.core.periodic_table module

Referenz: http://pymatgen.org/pymatgen.core.html#module-pymatgen.core Schauen wir uns zunächst die Module an, die zur Darstellung von Atomen und Strukturen verwendet werden, die von Pymatgen bereitgestellt werden. Ein Periodensystem ist ein Periodensystem </ b>, das Sie alle kennen. Einführung in die Elementklasse, Specie class </ b> dieses Moduls. Die Element-Klasse erbt von der Klasse Enum und ermöglicht das Definieren von Atomen, die dem Periodensystem entsprechen.

class Element(Enum):
    def __init__(self, symbol):
        self.symbol = "%s" % symbol
        d = _pt_data[symbol]
        ...

Da periodic_table.json in der pymatgen-Bibliothek beim Importieren des Moduls in _pt_data geladen wird,

>>> fe = Element("Fe")
>>> fe.data
{'Superconduction temperature': 'no data K', 'Molar volume': '7.09 cm<sup>3</sup>', 'Ionic radii hs': {'2': 0.92, '3': 0.785}, 'Melting point': '1811 K', 'Atomic radius': 1.4, 'Mineral hardness': '4.0', 'Electrical resistivity': '10 10<sup>-8</sup> &Omega; m', 'Vickers hardness': '608 MN m<sup>-2</sup>', 'Brinell hardness': '490 MN m<sup>-2</sup>', 'Youngs modulus': '211 GPa', 'Ionic radii': {'2': 0.92, '3': 0.785}, 'Atomic no': 26, 'Mendeleev no': 61, 'Thermal conductivity': '80 W m<sup>-1</sup> K<sup>-1</sup>', 'Reflectivity': '65 %', 'Liquid range': '1323 K', 'Ionic radii ls': {'2': 0.75, '6': 0.39, '3': 0.69, '4': 0.725}, 'Rigidity modulus': '82 GPa', 'X': 1.83, 'Critical temperature': 'no data K', 'Poissons ratio': '0.29', 'Oxidation states': [-2, -1, 1, 2, 3, 4, 5, 6], 'Van der waals radius': 'no data', 'Velocity of sound': '4910 m s<sup>-1</sup>', 'Coefficient of linear thermal expansion': '11.8 x10<sup>-6</sup>K<sup>-1</sup>', 'Bulk modulus': '170 GPa', 'Common oxidation states': [2, 3], 'Name': 'Iron', 'Atomic mass': 55.845, 'Electronic structure': '[Ar].3d<sup>6</sup>.4s<sup>2</sup>', 'Density of solid': '7874 kg m<sup>-3</sup>', 'Refractive index': 'no data', 'Atomic radius calculated': 1.56, 'Boiling point': '3134 K'}

Sie können problemlos ein Objekt mit verschiedenen Informationen wie Ionenradius, Schmelzpunkt, Widerstand, Masse und elektronischer Struktur des Atoms erstellen. Wenn Sie auf die einzelnen Attribute zugreifen möchten, geben Sie die unten gezeigten Attribute an und rufen Sie sie ab. Sie können die Attributliste auch anzeigen, indem Sie sich die Quelle oder das Dokument ansehen.

ionic_radii_fe = fe.ionic_radii

Schauen wir uns als nächstes die Specie-Klasse an. In der Speziesklasse können Atome unter Berücksichtigung der Oxidationszahl ausgedrückt werden.

supported_properties = ("spin",)

class Specie(symbol, oxidation_state, properties=None):
    def __init__(self, symbol, oxidation_state, properties=None):
        self._el = Element(symbol)
        self._oxi_state = oxidation_state
        self._properties = properties if properties else {}
        for k in self._properties.keys():
            if k not in Specie.supported_properties:
                raise ValueError("{} is not a supported property".format(k))

Den Elementen können Oxidationszahlen und -eigenschaften zugewiesen werden. Sie können es sich einfach als erweiterte Version von Element vorstellen. Es wird empfohlen, dass das Specie-Objekt die ideale Oxidationszahl und -eigenschaften aufweist. Das später beschriebene Site-Objekt kann den Oxidationszustand und den Spinzustand des Elements in der Kristallstruktur ausdrücken. Speichern Sie daher das Simulationsergebnis. Verwenden Sie dazu das Site-Objekt.

pymatgen.core.composition http://pymatgen.org/pymatgen.core.composition.html#module-pymatgen.core.composition Dieses Modul ist ein Modul, das die Zusammensetzung von Substanzen wie H2O und NaCl </ b> ausdrückt. Hier sind die am häufigsten verwendeten Kompositionsklassenklassen.

class Composition(collections.Hashable, collections.Mapping, MSONable):
    def __init__(self, *args, **kwargs):
        self.allow_negative = kwargs.pop('allow_negative', False)
        # it's much faster to recognize a composition and use the elmap than
        # to pass the composition to dict()
        if len(args) == 1 and isinstance(args[0], Composition):
            elmap = args[0]
        elif len(args) == 1 and isinstance(args[0], six.string_types):
            elmap = self._parse_formula(args[0])
        else:
            elmap = dict(*args, **kwargs)
        elamt = {}
        self._natoms = 0
        for k, v in elmap.items():
        ...

Es ist selbst auf einen Blick schwer zu verstehen und schwer zu erklären. Schauen wir uns also an, wie man es benutzt. .. ..

>>> #Einfach mit Strings wie NaCl und H2O zu definieren
>>> comp = Composition("LiFePO4")
>>> #Atomzahl
>>> comp.num_atoms
7.0
>>> #Nummer jedes Atoms
>>> comp.formula
'Li1 Fe1 P1 O4'
>>> #Zusammensetzungsverhältnis(Anzahl der Atome/全Anzahl der Atome)
>>> comp.get_atomic_fraction(Element("Li"))
0.14285714285714285

Es ist einfach zu definieren und Sie können ein praktisches Kompositionsobjekt erstellen. Es gibt viele andere Funktionen. Weitere Informationen finden Sie in der Dokumentation.

pymatgen.core.lattice

http://pymatgen.org/pymatgen.core.lattice.html#module-pymatgen.core.lattice Gitter bedeutet Gitter, und ich denke, viele Menschen erinnern sich an das Einheitsgitter, das sie selbst in der High School lernen. Screenshot 2017-05-18 Nachmittag 6.17.54.png Aus Wikipedia

Vektor hier definiert

R = {n}_1{a}_1+{n}_2{a}_2+{n}_3{a}_3

Repräsentiert den Gittervektor. Dieser dreidimensionale Vektor wird durch das folgende mehrdimensionale Array definiert.

R = [[10,0,0], [20,10,0], [0,0,30]]

In Pymatgen macht es die Verwendung der Gitterklasse noch bequemer.

class Lattice(MSONable):
    
    def __init__(self, matrix):
        m = np.array(matrix, dtype=np.float64).reshape((3, 3))
        lengths = np.sqrt(np.sum(m ** 2, axis=1))
        angles = np.zeros(3)

        for i in range(3):
            j = (i + 1) % 3
            k = (i + 2) % 3
            angles[i] = abs_cap(dot(m[j], m[k]) / (lengths[j] * lengths[k]))

        self._angles = np.arccos(angles) * 180. / pi
        self._lengths = lengths
        self._matrix = m
        self._inv_matrix = None
        self._metric_tensor = None
        self._diags = None
        self._lll_matrix_mappings = {}
        self._lll_inverse = None
        self.is_orthogonal = all([abs(a - 90) < 1e-5 for a in self._angles])
        ...

Die Argumentmatrix entspricht dem folgenden Format oder Numpy-Array.

#Mehrdimensionale Liste
[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
#aufführen
[1, 0, 0 , 0, 1, 0, 0, 0, 1]
#Taple
(1, 0, 0, 0, 1, 0, 0, 0, 1)

Oben ist ein einfacher Würfel.

>>> l = Lattice([1,0,0,0,1,0,0,0,1])
>>> l._angles
array([ 90.,  90.,  90.])
>>> l.is_orthogonal
True
>>> l._lengths
array([ 1.,  1.,  1.])
>>> l._matrix
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])

Auf diese Weise können Sie mit dem Lattice-Objekt auf Dinge wie Winkel und Länge zugreifen. Wir empfehlen, die Dokumentation zu lesen, da sie andere nützliche Funktionen enthält. http://pymatgen.org/pymatgen.core.lattice.html

pymatgen.core.structure http://pymatgen.org/pymatgen.core.structure.html Dieses Modul bietet Funktionen, die die Darstellung der Kristallstruktur </ b> ermöglichen. Hier sehen wir uns die IStructure-Klasse an, die die grundlegendsten Funktionen bietet.

class IStructure(SiteCollection, MSONable):

    def __init__(self, lattice, species, coords, validate_proximity=False,
                 to_unit_cell=False, coords_are_cartesian=False,
                 site_properties=None):
    ...

Es braucht verschiedene Argumente, also schauen wir uns jedes an.

  • lattice

Sie können auch die Klasse pymatgen.core.lattice.Lattice verwenden.

  • species

Dies ist die Art des Atoms. Es unterstützt verschiedene Formate wie folgt.

#Liste der Atome
["Li", "Fe2+", "P", ...]
#Ordnungszahl
(3, 56, ...)
#Liste mit Belegungsquote
[{"Fe" : 0.5, "Mn":0.5}, ...] 
  • coords

Dies gibt die Koordinaten jedes Atoms an.

#Zum Zeitpunkt von NaCl
coords = [[0, 0, 0], [0.5, 0.5, 0.5]]

Vor diesem Hintergrund kann die Struktur folgendermaßen definiert werden:

from pymatgen import Lattice, IStructure
#CsCl-Struktur
a = 4.209 #Å
latt = Lattice.cubic(a)
structure = IStructure(latt, ["Cs", "Cl"], [[0, 0, 0], [0.5, 0.5, 0.5]])
>>> structure.density
3.7492744897576538
>>> structure.distance_matrix
array([[ 0.        ,  3.64510092],
       [ 3.64510092,  0.        ]])
>>> structure.get_distance
<bound method IStructure.get_distance of Structure Summary
Lattice
    abc : 4.2089999999999996 4.2089999999999996 4.2089999999999996
 angles : 90.0 90.0 90.0
 volume : 74.565301328999979
      A : 4.2089999999999996 0.0 0.0
      B : 0.0 4.2089999999999996 0.0
      C : 0.0 0.0 4.2089999999999996
PeriodicSite: Cs (0.0000, 0.0000, 0.0000) [0.0000, 0.0000, 0.0000]
PeriodicSite: Cl (2.1045, 2.1045, 2.1045) [0.5000, 0.5000, 0.5000]>

Auf diese Weise können Sie auf Entfernungen, Positionsbeziehungen, Dichten usw. in der Struktur zugreifen. Als nächstes wollen wir sehen, welche Art von Analysefunktion verfügbar ist.

Liste der zu analysierenden Module

Ich werde kurz vorstellen, welche Module verfügbar sind. Ich werde einige von ihnen aufheben und versuchen, sie tatsächlich zu bewegen. Die rechte Seite dieses Bildes ist die von Pymatgen bereitgestellte Analysefunktion.

スクリーンショット 2017-05-18 午後6.56.09.png

--Phasendiagrammausgabe

  • Reaktionsberechnung --Elektronische Strukturanalyse und Visualisierung
  • Analyse der Anwendungseigenschaften wie Batterieeigenschaften
  • Strukturelle Visualisierung

etc. .. ..

Beispielsweise ist es im Fall der elektronischen Strukturanalyse möglich, die Bandstruktur zu analysieren. スクリーンショット 2017-05-18 午後6.48.53.png

Sie können auch ein Phasendiagramm ausgeben. スクリーンショット 2017-05-18 午後6.52.02.png

Ich werde Artikel schreiben, in denen die Funktionen aus der Quelle detailliert vorgestellt werden, wenn Bedarf besteht und wenn ich Lust dazu habe. Bitte kommentieren Sie, wenn Sie irgendwelche Anfragen haben.

Zusammenarbeit mit anderen Tools

Grundsätzlich wird andere Software für Simulationen mit einem hohen Rechenaufwand verwendet. Die Effizienz steigt jedoch, wenn Pymatgen für die Analyse und Visualisierung verwendet wird, die diese Daten kombiniert. Auf der linken Seite dieses Bildes befindet sich der Link zu häufig verwendeten Datenformaten und Tools. スクリーンショット 2017-05-18 午後6.56.09.png

--VASP-Ein- und Ausgabe kann importiert werden --Cif-Dateien, die in Material Studio usw. verwendet werden, können ebenfalls verarbeitet werden

  • Unterstützt das offene Babel-Format --Kann mit Materials Project Rest API verknüpft werden

Und so weiter. Wenn Sie die oben genannten Dateien oder Software für First-Principles-Berechnungen verwenden, stellen Sie diese bitte vor.

In Bezug auf die Materialprojekt-Rest-API habe ich in Vorheriger Artikel geschrieben, wie man sie verwendet. Wenn Sie dies verwenden, veröffentlicht das Materialprojekt eine große Datenmenge und Sie können frei Daten sammeln. Daher ist es wichtig, wenn Sie maschinelles Lernen durchführen möchten.

Es ist lange her, aber lasst uns alle Pymatgen verwenden!

Installieren Sie pymatgen

Der grundlegende Ablauf der Installation ist

  1. Umgebung, in der Python verwendet werden kann (3 Serien werden empfohlen)
  2. Installieren Sie conda
  3. Installieren Sie pymatgen mit conda

ist. Bitte lesen Sie die folgenden Artikel, bis Sie conda installieren. Aufbau einer Python-Umgebung für diejenigen, die Datenwissenschaftler 2016 werden möchten

Wenn du so weit bist

conda install --channel matsci pymatgen

Nach Überprüfung des Vorgangs ist die Installation abgeschlossen.

>>> import pymatgen
>>> pymatgen.__version__
'4.5.4'

Jetzt, wo Sie bereit sind, probieren wir es aus!

Bewegen wir es tatsächlich

Bandstrukturanalyse

Die Bandstruktur repräsentiert die Dispersion von Elektronen in der periodischen Struktur des Kristalls. Bei der Darstellung der Bandstruktur ist die vertikale Achse Energie, aber die horizontale Achse ist der Punkt des inversen Gitterraums, was ziemlich schwer zu verstehen ist. Wenn Sie also nicht interessiert sind, verstehen Sie bitte, soweit Sie verstehen können, wie die Elektronen verteilt sind.

Mit pymatgen können Sie die analysierte Bandstruktur visualisieren und als Daten verarbeiten. Importieren Sie zunächst die erforderlichen Bibliotheken.

#Modul zur Verwendung der REST-API des Materialprojekts
from pymatgen.matproj.rest import MPRester
#Zum Zeichnen von Bandstrukturen
%matplotlib inline
from pymatgen.electronic_structure.plotter import BSPlotter

Als nächstes erhalten Sie die analysierte Bandstruktur. In der realen Forschung wird die von Ihrer eigenen Analysesoftware (VASP usw.) analysierte Datei in das Objekt von pymatgen konvertiert. Dieses Mal wird das analysierte Objekt jedoch aus der Materials Project-Datenbank </ b> heruntergeladen. .. Wenn Sie das Materialprojekt verwenden, müssen Sie den API-Schlüssel registrieren und erwerben. Erhalten Sie den API-Schlüssel daher auf der offiziellen Seite.

#Geben Sie Ihren API-Schlüssel an
a = MPRester("Mein API-Schlüssel")
#Geben Sie die ID des gewünschten Materials an und erhalten Sie es über die http-Kommunikation. CuAlO2(mp-Holen Sie sich 3784)
bs = a.get_bandstructure_by_material_id("mp-3748")

Damit ist der Erwerb der Bandstruktur abgeschlossen! Ich habe ein Bandstrukturobjekt direkt aus dem Materialprojekt erhalten. http://pymatgen.org/_modules/pymatgen/electronic_structure/bandstructure.html#BandStructure

Übrigens können Sie solche Materialinformationen im Materialprojekt abrufen. スクリーンショット 2017-05-19 午後10.35.28.png

Wir werden diese Informationen auf Python verarbeiten.

>>> bs.is_metal()
False

Es sieht nicht nach Metall aus.

>>> bs.get_band_gap()
{'energy': 1.7978000000000005, 'direct': False, 'transition': '(0.591,0.409,0.000)-\\Gamma'}

Die Bandlücke beträgt 1,977 eV

>>> bs.get_direct_band_gap()
18.0201

Die Bandlücke für den direkten Übergang beträgt 18.021 eV. Zeichnen wir nun das Banddiagramm.

%matplotlib inline
from pymatgen.electronic_structure.plotter import BSPlotter
plotter = BSPlotter(bs)
plotter.get_plot().show()

スクリーンショット 2017-05-19 午後10.42.15.png

Dies sind die Daten des Materialprojekts, aber Sie können die Simulationsergebnisse der Materialien ausgeben, die Sie normalerweise untersuchen.

Ich würde mich freuen, wenn ich nach und nach verstehen könnte, dass das Pymatgen-Objekt für den Vergleich mit anderen Materialien, maschinelles Lernen, Erkundung usw. nützlich zu sein scheint.

Es gibt noch viele Dinge, die wir tun können, aber dieses Mal werden wir hier enden. (Es war lang···) Ich möchte eine Pymatgen-Studiensitzung, eine Materialprojekt-Studiensitzung, eine Vasp-Studiensitzung oder die Materials Informatics Young People's Association abhalten. Wenn Sie also interessiert sind, tun Sie dies bitte Bitte komm rein ~

Außerdem werde ich beim nächsten Mal einen Artikel in Materialinformatik schreiben. Vielen Dank für Ihre sorgfältige Lektüre ~

Recommended Posts