Standard model outputs

In order for multiple simulation engines to be able to exploit atomic properties computing by arbitrary metatensor atomistic models, we need all the models to return data with specific metadata. If your model returns one of the output defined in this documentation, then the model should follow the metadata structure described here.

For other kind of output, you are free to use any relevant metadata structure, but if multiple people are producing the same kind of outputs, they are encouraged to come together, define the metadata they need and add a new section to this page.

Energy

Energy is associated with the "energy" key in the model outputs, and must have the following metadata:

Metadata for energy output

Metadata

Names

Description

keys

"_"

the energy keys must have a single dimension named "_", with a single entry set to 0. The energy is always a metatensor.torch.TensorMap with a single block.

samples

["system", "atom"] or ["system"]

if doing per_atom output, the sample names must be ["system", "atom"], otherwise the sample names must be ["system"].

"system" must range from 0 to the number of systems given as input to the model. "atom" must range between 0 and the number of atoms/particles in the corresponding system. If selected_atoms is provided, then only the selected atoms for each system should be part of the samples.

components

the energy must not have any components

properties

"energy"

the energy must have a single property dimension named "energy", with a single entry set to 0.

Energy gradients

Most of the time when writing an atomistic model compatible with metatensor, gradients will be handled implicitly and computed by the simulation engine using a backward pass. Additionally, it is possible for the model to support explicit, forward mode gradients

The following gradients can be defined and requested with explicit_gradients:

  • “positions” (\(r_j\)) gradients will contain the negative of the forces \(F_j\).

    \[\frac{\partial E}{\partial r_j} = -F_j\]
Metadata for positions energy’s gradients

Metadata

Names

Description

samples

["sample", "system", "atom"]

"sample" indicates which of the values samples we are taking the gradient of, and ("system", "atom") indicates which of the atom’s positions we are taking the gradients with respect to; i.e. \(j\) in the equation above.

components

"xyz"

there must be a single component named "xyz" with values 0, 1, 2; indicating the direction of the displacement of the atom in the gradient samples.

  • “strain” (\(\epsilon\)) gradients will contain the stress \(\sigma\) acting on the system, multiplied by the volume \(V\) (sometimes also called the virial of this system)

    \[\frac{\partial E}{\partial \epsilon} = V \sigma\]
Metadata for strain energy’s gradients

Metadata

Names

Description

samples

"sample"

There is a single gradient sample dimension, "sample" indicating which of the values samples we are taking the gradient of.

components

["xyz_1", "xyz_2"]

Both "xyz_1" and "xyz_2" have values [0, 1, 2], and correspond to the two axes of the 3x3 strain matrix \(\epsilon\).

Energy ensemble

An ensemble of energies is associated with the "energy_ensemble" key in the model outputs. Such ensembles are sometimes used to perform uncertainty quantification, using multiple prediction to estimate an error on the mean prediction.

Energy ensembles must have the following metadata:

Metadata for energy ensemble output

Metadata

Names

Description

keys

same as Energy

same as Energy

samples

same as Energy

same as Energy

components

same as Energy

same as Energy

properties

"energy"

the energy ensemble must have a single property dimension named "energy", with entries ranging from 0 to the number of members of the ensemble minus one.

Energy ensemble gradients

The gradient metadata for energy ensemble is the same as for the energy output (see Energy gradients).

Features

Features are numerical vectors representing a given structure or atom/atom-centered environment in an abstract n-dimensional space. They are also sometimes called descriptors, representations, embedding, etc.

Features can be computed with some analytical expression (for example SOAP power spectrum, atom-centered symmetry functions, …), or learned internally by a neural-network or a similar architecture.

In metatensor atomistic models, they are associated with the "features" key in the model outputs, and must adhere to the following metadata:

Metadata for features output

Metadata

Names

Description

keys

"_"

the features keys must have a single dimension named "_", with a single entry set to 0. The feature is always a metatensor.torch.TensorMap with a single block.

samples

["system", "atom"] or ["system"]

the samples should be named ["system", "atom"] for per-atom outputs; or ["system"] for global outputs.

The "system" index should always be 0, and the "atom" index should be the index of the atom (between 0 and the total number of atoms). If selected_atoms is provided, then only the selected atoms for each system should be part of the samples.

components

the features must not have any components.

properties

the features can have arbitrary properties.

Note

Features are typically handled without a unit, so the "unit" field of metatensor.torch.atomistic.ModelOutput() is mainly left empty.

Features gradients

As for the energy, features are typically used with automatic gradient differentiation. Explicit gradients could be allowed if you have a use case for them, but are currently not until they are fully specified.