Extensions

This section is about how to extend GDPy with custom python files.

Custom Potential

First we define a class named EmtManager that is a subclass of AbstractPotentialManager in emt.py. We need to implement two attributes (implemented_backends and valid_combinations) and one method (register_calculator). Here, we only implement one backend that uses built-in EMT calculator in ase.

#!/usr/bin/env python3
# -*- coding: utf-8 -*

from ase.calculators.emt import EMT

from GDPy.potential.manager import AbstractPotentialManager

class EmtManager(AbstractPotentialManager):

    name = "emt"
    implemented_backends = ["ase"]

    valid_combinations = [
        ["ase", "ase"]
    ]


    def register_calculator(self, calc_params, *args, **kwargs):
        super().register_calculator(calc_params)

        if self.calc_backend == "ase":
            calc = EMT()

        self.calc = calc

        return

if __name__ == "__main__":
    pass

Then we can use EMT through pot.yaml.

potential:
    name: ./emt.py # lowercase
    params:
        backend: ase
driver:
    backend: external
    task: min
    run:
        fmax: 0.05
        steps: 10

At last, we optimise a H2O molecule with EMT. The results are stored in the directory cand0.

$ gdp driver ./pot.yaml -s H2O
nframes:  1
potter:  emt
*** run-driver time:   0.1517 ***
[1.8792752663147125]