.. |simulation_layer|              replace:: :py:class:`~openff.evaluator.layers.simulation.SimulationLayer`
.. |workflow_calculation_layer|    replace:: :py:class:`~openff.evaluator.layers.workflow.WorkflowCalculationLayer`

The Direct Simulation Layer
===========================

The |simulation_layer| is a calculation layer which employs molecular simulation to estimate data sets of physical
properties. It inherits the |workflow_calculation_layer| base layer, and primarily makes use of the built-in
:doc:`workflow <../workflows/workflows>` engine to perform the required calculations.

The simulation layer is expected to *almost always* be able to estimate any properties requested of it (with exceptions
being where a workflow schema has not yet been defined for a class of properties, or where an unexpected error occurs),
and can be thought of as a safe 'fallback' layer when no other calculation approach are able to estimate particular
properties.

It is expected that :ref:`workflow schemas <workflows/workflows:Workflow Schemas>` passed to the simulation layer should
be able to estimate the gradients of the observable they aim to calculate, as well as specify a set of :doc:`
storage/dataclasses <storage/dataclasses>` which contain the data generated by the molecular simulations.

Default Metadata
----------------
The simulation layer makes the same set of metadata available to its workflows as the :ref:`parent workflow layer
<layers/workflowlayer:Default Metadata>`.
