Skip to content
This repository was archived by the owner on Apr 27, 2023. It is now read-only.
This repository was archived by the owner on Apr 27, 2023. It is now read-only.

Review request for disordered structure example #385

@resnant

Description

@resnant

Hi,
I have been exploring the application of MEGNet to structures with site mixing.
I have written a simple example using CrystalGraphDisordered class to handle these structures, and I would appreciate it if you could review it to confirm that my understanding is correct and there are no processing errors.

If this code is useful to others, I would like to submit a pull request as an example of processing disordered structures.
I think that MEGNet's capability to handle disordered structures is a powerful advantage, especially for researchers dealing with experimentally determined crystal structures.

Thank you in advance.

from pymatgen.core import Structure, Lattice
from pymatgen.core.periodic_table import Element
from pymatgen.core.composition import Composition

from megnet.utils.models import load_model
from megnet.models import MEGNetModel
from megnet.data.graph import GaussianDistance
from megnet.data.crystal import CrystalGraph, CrystalGraphDisordered

# Load a pretrained MEGNet model
model_pretrained = load_model("Eform_MP_2019")

# Define a new MEGNet model with the same architecture as the pretrained model, but without the first embedding layer
# The CrystalGraphDisordered class calculates the weighted average of element embeddings of all atoms in each site depending on its site fraction
bond_converter = model_pretrained.graph_converter.bond_converter
cg_disorder = CrystalGraphDisordered(bond_converter=bond_converter, cutoff=5)
model_new = MEGNetModel(100, 2, 16, graph_converter=cg_disorder)
weights = model_pretrained.get_weights()
model_new.set_weights(weights[1:])

# An example of a disordered structure with site mixing
structure = Structure(Lattice.cubic(2.2),
            [Composition({"Fe":0.5, "Ni":0.5})], [[0, 0, 0]])

# Convert the crystal structure to a graph and make a prediction using the new MEGNet model
graph = model_new.graph_converter.convert(structure)
model_new.predict_graph(graph) # -> array([0.4069269], dtype=float32)

Related:
#317
https://github.com/materialsvirtuallab/megnet/blob/master/notebooks/model_reconstruct.ipynb

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions