IMLCV.base.MdEngine
===================

.. py:module:: IMLCV.base.MdEngine

.. autoapi-nested-parse::

   MD engine class peforms MD simulations in a given NVT/NPT ensemble.



Classes
-------

.. autoapisummary::

   IMLCV.base.MdEngine.StaticMdInfo
   IMLCV.base.MdEngine.TrajectoryInfo
   IMLCV.base.MdEngine.MDEngine


Module Contents
---------------

.. py:class:: StaticMdInfo

   .. py:attribute:: _attr
      :value: ['timestep', 'r_cut', 'timecon_thermo', 'T', 'P', 'timecon_baro', 'write_step', 'equilibration',...



   .. py:attribute:: _arr
      :value: ['atomic_numbers']



   .. py:attribute:: timestep
      :type:  float


   .. py:attribute:: T
      :type:  float


   .. py:attribute:: timecon_thermo
      :type:  float


   .. py:attribute:: atomic_numbers
      :type:  jax.Array


   .. py:attribute:: r_cut
      :type:  float | None
      :value: None



   .. py:attribute:: P
      :type:  float | None
      :value: None



   .. py:attribute:: timecon_baro
      :type:  float | None
      :value: None



   .. py:attribute:: write_step
      :type:  int
      :value: 100



   .. py:attribute:: equilibration
      :type:  float | None
      :value: None



   .. py:attribute:: screen_log
      :type:  int
      :value: 1000



   .. py:attribute:: invalid
      :type:  bool
      :value: False



   .. py:attribute:: max_grad
      :type:  float | None
      :value: 0.04031059429903557



   .. py:property:: masses


   .. py:property:: thermostat


   .. py:property:: barostat


   .. py:property:: neighbour_list_info
      :type: IMLCV.base.CV.NeighbourListInfo



   .. py:method:: __post_init__()


   .. py:method:: _save(hf: h5py.File)


   .. py:method:: save(filename: str | pathlib.Path)


   .. py:method:: _load(hf: h5py.File) -> StaticMdInfo
      :staticmethod:



   .. py:method:: load(filename) -> StaticMdInfo
      :staticmethod:



.. py:class:: TrajectoryInfo(*args, **kwargs)

   Bases: :py:obj:`IMLCV.base.datastructures.MyPyTreeNode`


   Base class for dataclasses that should act like a JAX pytree node.


   .. py:attribute:: _positions
      :type:  jax.Array


   .. py:attribute:: _cell
      :type:  jax.Array | None
      :value: None



   .. py:attribute:: _charges
      :type:  jax.Array | None
      :value: None



   .. py:attribute:: _e_pot
      :type:  jax.Array | None
      :value: None



   .. py:attribute:: _e_bias
      :type:  jax.Array | None
      :value: None



   .. py:attribute:: _w
      :type:  jax.Array | None
      :value: None



   .. py:attribute:: _rho
      :type:  jax.Array | None
      :value: None



   .. py:attribute:: _cv
      :type:  jax.Array | None
      :value: None



   .. py:attribute:: _cv_orig
      :type:  jax.Array | None
      :value: None



   .. py:attribute:: _T
      :type:  jax.Array | None
      :value: None



   .. py:attribute:: _P
      :type:  jax.Array | None
      :value: None



   .. py:attribute:: _err
      :type:  jax.Array | None
      :value: None



   .. py:attribute:: _t
      :type:  jax.Array | None
      :value: None



   .. py:attribute:: _capacity
      :type:  int


   .. py:attribute:: _size
      :type:  int


   .. py:attribute:: _finished
      :type:  int


   .. py:attribute:: _invalid
      :type:  int


   .. py:attribute:: _items_scal
      :value: ['_t', '_e_pot', '_e_bias', '_T', '_P', '_err', '_w', '_rho']



   .. py:attribute:: _items_vec
      :value: ['_positions', '_cell', '_charges', '_cv', '_cv_orig']



   .. py:method:: create(positions: jax.Array, cell: jax.Array | None = None, charges: jax.Array | None = None, e_pot: jax.Array | None = None, e_bias: jax.Array | None = None, cv: jax.Array | None = None, cv_orig: jax.Array | None = None, w: jax.Array | None = None, rho: jax.Array | None = None, T: jax.Array | None = None, P: jax.Array | None = None, err: jax.Array | None = None, t: jax.Array | None = None, capacity: int = -1, size: int = -1, finished=False, invalid=False) -> TrajectoryInfo
      :staticmethod:



   .. py:method:: __getitem__(slices)

      gets slice from indices. the output is truncated to the to include only items wihtin _size



   .. py:method:: _stack(*ti: TrajectoryInfo)


   .. py:method:: __add__(ti: TrajectoryInfo) -> TrajectoryInfo


   .. py:method:: _expand_capacity(nc=None) -> TrajectoryInfo


   .. py:method:: _shrink_capacity() -> TrajectoryInfo


   .. py:method:: save(filename: str | pathlib.Path)


   .. py:method:: _save(hf: h5py.File)


   .. py:method:: load(filename) -> TrajectoryInfo
      :staticmethod:



   .. py:method:: _load(hf: h5py.File)
      :staticmethod:



   .. py:property:: sp
      :type: IMLCV.base.CV.SystemParams



   .. py:property:: positions
      :type: jax.Array | None



   .. py:property:: cell
      :type: jax.Array | None



   .. py:property:: volume


   .. py:property:: charges
      :type: jax.Array | None



   .. py:property:: e_pot
      :type: jax.Array | None



   .. py:property:: w
      :type: jax.Array | None



   .. py:property:: rho
      :type: jax.Array | None



   .. py:property:: e_bias
      :type: jax.Array | None



   .. py:property:: cv
      :type: jax.Array | None



   .. py:property:: cv_orig
      :type: jax.Array | None



   .. py:property:: T
      :type: jax.Array | None



   .. py:property:: P
      :type: jax.Array | None



   .. py:property:: err
      :type: jax.Array | None



   .. py:property:: t
      :type: jax.Array | None



   .. py:property:: shape


   .. py:property:: CV
      :type: IMLCV.base.CV.CV | None



   .. py:property:: CV_orig
      :type: IMLCV.base.CV.CV | None



.. py:class:: MDEngine

   Bases: :py:obj:`abc.ABC`


   Base class for MD engine.


   .. py:attribute:: bias
      :type:  IMLCV.base.bias.Bias


   .. py:attribute:: energy
      :type:  IMLCV.base.bias.Energy


   .. py:attribute:: sp
      :type:  IMLCV.base.CV.SystemParams


   .. py:attribute:: static_trajectory_info
      :type:  StaticMdInfo


   .. py:attribute:: trajectory_info
      :type:  TrajectoryInfo | None


   .. py:attribute:: trajectory_file
      :type:  pathlib.Path | None
      :value: None



   .. py:attribute:: time0
      :type:  float


   .. py:attribute:: step
      :type:  int
      :value: 1



   .. py:attribute:: nl
      :type:  IMLCV.base.CV.NeighbourList | None
      :value: None



   .. py:attribute:: r_skin
      :value: 1.889726133921252



   .. py:method:: create(bias: IMLCV.base.bias.Bias, energy: IMLCV.base.bias.Energy, static_trajectory_info: StaticMdInfo, trajectory_info=None, trajectory_file=None, sp: IMLCV.base.CV.SystemParams | None = None, **kwargs) -> typing_extensions.Self
      :classmethod:



   .. py:method:: update_nl()


   .. py:method:: save(file)


   .. py:method:: load(file, **kwargs) -> MDEngine
      :staticmethod:



   .. py:method:: new_bias(bias: IMLCV.base.bias.Bias, **kwargs) -> MDEngine


   .. py:method:: run(steps)

      run the integrator for a given number of steps.

      :param steps: number of MD steps



   .. py:method:: _run(steps)
      :abstractmethod:



   .. py:method:: get_trajectory() -> TrajectoryInfo


   .. py:method:: save_step(T=None, P=None, t=None, err=None, cv=None, e_bias=None, e_pot=None, gpos_rmsd=None, gpos_bias_rmsd=None, canonicalize=False)


   .. py:method:: get_energy(sp: IMLCV.base.CV.SystemParams, gpos: bool = False, vtens: bool = False, manual_vir=None) -> IMLCV.base.bias.EnergyResult


   .. py:method:: get_bias(sp: IMLCV.base.CV.SystemParams, gpos: bool = False, vtens: bool = False, shmap: bool = False, use_jac=False, push_jac=False, rel=False, shmap_kwargs=ShmapKwargs.create()) -> tuple[IMLCV.base.CV.CV, IMLCV.base.bias.EnergyResult]


   .. py:method:: __getstate__()


   .. py:method:: __setstate__(statedict: dict)


