class EMT

Overview

The Effective Medium Theory (EMT) potential. More…

#include <EMT.h>
 
class EMT: public AsapPotential {
public:
    // fields
 
    int ids;
    int nblist;
    int sigma1;
    int sigma2;
    int beforeforces;
    int energies;
    int forces;
    int stresses;
    int fullstresses;
 
    // construction
 
    EMT(EMTParameterProvider* prov = 0);
    virtual ~EMT();
 
    // methods
 
    void SetSubtractE0(bool subtractE0);
    virtual void SetAtoms(Atoms* a);
    virtual const Vec* GetCartesianForces();
    virtual const double* GetPotentialEnergies();
    virtual double GetPotentialEnergy();
    virtual const symTensor* GetStresses(const Vec* momenta = 0);
    virtual void GetStress(double stress[6], const Vec* momenta = 0);
    virtual void CheckNeighborLists();
    virtual double GetCutoffRadius() const;
    virtual double GetLatticeConstant() const;
    virtual int GetNumberOfAtoms() const;
    virtual void SetContinuumElement(int z);
    virtual void UpdateSuperCell(const SuperCell* newSuperCell);
    virtual double CalculateLatticeEnergy(const Vec a[3]);
    virtual void CalculateDerivatives(const Vec a[3], double dEdaDota[6]);
    virtual double GetData() const;
    const double* GetSigma1(int n);
    const double* GetSigma2(int n);
    void PrintParameters();
    NeighborList* GetNeighborList() const;
};

Inherited Members

public:
    // methods
 
    virtual void SetAtoms(Atoms* a) = 0;
    virtual double GetPotentialEnergy() = 0;
    virtual const Vec* GetCartesianForces() = 0;
    virtual const symTensor* GetStresses(const Vec* momenta = 0) = 0;
    virtual void GetStress(double stress[6], const Vec* momenta = 0) = 0;
    virtual const double* GetPotentialEnergies() = 0;
    virtual void CheckNeighborLists() = 0;
    virtual double CalculateLatticeEnergy(const Vec a[3]);
    virtual void CalculateDerivatives(const Vec a[3], double dEdaDota[6]);
    virtual double GetData() const;
    virtual double GetCutoffRadius() const = 0;
    virtual double GetLatticeConstant() const = 0;
    virtual void UpdateSuperCell(const SuperCell* newSuperCell) = 0;
    virtual int GetNumberOfAtoms() const = 0;

Detailed Documentation

The Effective Medium Theory (EMT) potential.

The Effective Medium Theory (EMT) as originally implemented in Per Stoltze’s ARTwork program, and documented in

      1. Jacobsen, P. Stoltze and J. K. Nørskov, Surf. Sci. vol. 366, p. 394-402 (1996).

Construction

EMT(EMTParameterProvider* prov = 0)

Create an EMT potential optionally using a parameter provider.

virtual ~EMT()

Delete the EMT potential.

If an EMTParameterProvider was given when constructing the EMT object, it will NOT be deleted, but any default parameter provider and the automatically generated neigbor list will be deleted.

Methods

virtual void SetAtoms(Atoms* a)

Set the atoms belonging to this potential.

This is called automatically by Atoms.SetCalculator() and should not be called elsewhere.

virtual const Vec* GetCartesianForces()

Calculate the forces on all atoms and return the result.

virtual const double* GetPotentialEnergies()

Calculate the energy of all atoms.

virtual double GetPotentialEnergy()

Calculate the total energy of the system.

virtual const symTensor* GetStresses(const Vec* momenta = 0)

Calculate the stress on all atoms.

virtual void GetStress(double stress[6], const Vec* momenta = 0)

Calculate the total stress of the system.

Note that the output variable stress is not zeroed first. In quasicontinuum simulations and other situations where there is a contribution to the stress which is not from the atoms, the stress parameter can initially be set to the appropriate derivatives of the energy of that part of the calculation (without the volume normalization, which will be performed by the potential).

virtual void CheckNeighborLists()

Check that neighbor lists are up to date, update them if not.

virtual double GetCutoffRadius() const

Return the cutoff radius used in the potential.

virtual double GetLatticeConstant() const

Return the lattice constant of the material, if well-defined.

If a lattice constant of the material can be defined, return it in Angstrom, otherwise throw an exception.

virtual int GetNumberOfAtoms() const

Get the number of atoms.

virtual void SetContinuumElement(int z)

Specify the element in the continuum region of a QuasiContinuum simulation.

virtual void UpdateSuperCell(const SuperCell* newSuperCell)

Tell the Potential that a new SuperCell has been assigned to the atoms.

virtual double CalculateLatticeEnergy(const Vec a[3])

Calculate the energy of an atom in a regular fcc(?) lattice.

Given the lattice vectors, this function calculates the energy of a single atom in the lattice. Used for the QuasiContinuum method.

virtual void CalculateDerivatives(const Vec a[3], double dEdaDota[6])

Calculate derivative of the energy of an atom in a regular lattice.

Used by the QuasiContinuum method.

virtual double GetData() const

Get data used by the QuasiContinuum method.

const double* GetSigma1(int n)

Return a pointer to the EMT “density” sigma1.

const double* GetSigma2(int n)

Return a pointer to the EMT “density” sigma2.

void PrintParameters()

Print the EMT parameters.

NeighborList* GetNeighborList() const

Return a pointer to the neighbor list.