\hypertarget{index_mainpage_overview_sec}{}\doxysection{Overview}\label{index_mainpage_overview_sec}
The Mol\+S\+SI Driver Interface (M\+DI) project provides a \mbox{\hyperlink{mdi_standard}{standardized A\+PI}} for fast, on-\/the-\/fly communication between computational chemistry codes. This greatly simplifies the process of implementing methods that require the cooperation of multiple software packages and enables developers to write a single implementation that works across many different codes. The A\+PI is sufficiently general to support a wide variety of techniques, including Q\+M/\+MM, ab initio MD, machine learning, advanced sampling, and path integral MD, while also being straightforwardly extensible. Communication between codes is handled by the M\+DI Library, which enables tight coupling between codes using either the M\+PI or T\+C\+P/\+IP methods.

M\+DI uses a driver/engine paradigm in which \mbox{\hyperlink{index_main_doc_drivers_sec}{drivers}} orchestrate complex simulations by controlling \mbox{\hyperlink{index_main_doc_engines_sec}{engines}} through the use of an A\+P\+I-\/like command set that is defined by the \mbox{\hyperlink{mdi_standard}{M\+DI Standard}}. A driver will typically implement one or more high-\/level methods, such as advanced sampling or Q\+M/\+MM, while relying on one or more engines to perform lower-\/level operations, such as energy and force evaluation.

In total, M\+DI consists of the following components\+:


\begin{DoxyItemize}
\item \mbox{\hyperlink{index_main_doc_drivers_sec}{Drivers}}, which are codes that control the high-\/level program flow of one or more other codes.
\item \mbox{\hyperlink{index_main_doc_engines_sec}{Engines}}, which are codes capable of responding to commands from an external driver.
\item \mbox{\hyperlink{mdi_standard}{The M\+DI Standard}}, which is an A\+P\+I-\/like definition of a set of commands that can be sent from a driver to an engine, and that cause the engine to respond in a clearly defined way.
\item \mbox{\hyperlink{library_page}{The M\+DI Library}}, which is a library that enables inter-\/code communication in compliance with the M\+DI Standard.
\end{DoxyItemize}\hypertarget{index_mainpage_capabilities_sec}{}\doxysection{Capabilities}\label{index_mainpage_capabilities_sec}
M\+DI is designed to support a wide variety of different calculation types, with the \mbox{\hyperlink{mdi_standard}{M\+DI Standard}} defining a variety of simple commands that can be used to develop many drivers for many purposes. Potential application areas for M\+DI include {\itshape  ab initio} molecular dynamics (A\+I\+MD), path integral molecular dynamics (P\+I\+MD), advanced sampling, forcefield development, and Q\+M/\+MM. More specifically, here are some examples of what can be accomplished using M\+DI\+:


\begin{DoxyItemize}
\item Run an {\itshape  ab initio} molecular dynamics (A\+I\+MD) calculation in which a quantum mechanics (QM) code evaluates nuclear forces and a molecular mechanics (MM) code performs time integration.
\item Run an MD simulation in which the nuclear forces include contributions from two different MM codes.
\item Implement an advanced sampling technique ({\itshape i.\+e.} metadynamics, replica exchange, etc.) in a self-\/contained driver that can use other codes to compute forces.
\item Implement a new forcefield in a self-\/contained engine that is compatible with multiple MM codes.
\item Run Q\+M/\+MM simulations.
\end{DoxyItemize}

More generally, M\+DI can support any use case that can be implemented using the \mbox{\hyperlink{mdi_standard_command_list}{command set}} defined by the \mbox{\hyperlink{mdi_standard}{M\+DI Standard}}. For use cases that require additional commands, unofficial extensions to the M\+DI Standard can be straightforwardly developed. Feel free to contact us if your use case requires additions to the M\+DI Standard, and we may be able to provide advice about the process. Extensions that prove useful to the broader community may be considered for official incorporation into the M\+DI Standard.\hypertarget{index_mainpage_getting_started_sec}{}\doxysection{Getting Started}\label{index_mainpage_getting_started_sec}
For guidance on running simulations using M\+D\+I-\/based drivers and engines, please first complete the \mbox{\hyperlink{tutorials_user_tutorial}{User Tutorial}}. Afterwards, please read \mbox{\hyperlink{library_page_library_launching_sec}{Launching Codes with the M\+DI Library}}.

If you intend to develop an M\+D\+I-\/based driver or engine, first do the above. Then, complete the \mbox{\hyperlink{tutorials_aimd_tutorial}{Driver Development Tutorial}} and familiarize yourself with the \mbox{\hyperlink{library_page_functions_sec}{M\+DI Library Functions}}.

For lists of available M\+D\+I-\/based drivers and engines, see \mbox{\hyperlink{index_main_doc_drivers_sec}{Drivers}} and \mbox{\hyperlink{index_main_doc_engines_sec}{Engines}}.\hypertarget{index_source_sec}{}\doxysection{Source Code}\label{index_source_sec}
The source code of the M\+DI library is available at Git\+Hub at \href{https://github.com/MolSSI/MDI_Library}{\texttt{ https\+://github.\+com/\+Mol\+S\+S\+I/\+M\+D\+I\+\_\+\+Library}}.\hypertarget{index_main_doc_sec}{}\doxysection{Main Documentation}\label{index_main_doc_sec}

\begin{DoxyItemize}
\item \mbox{\hyperlink{tutorials}{Tutorials}}
\begin{DoxyItemize}
\item \mbox{\hyperlink{tutorials_user_tutorial}{User Tutorial}}
\item \mbox{\hyperlink{tutorials_aimd_tutorial}{Driver Development Tutorial}}
\item \mbox{\hyperlink{engine_tutorial}{Engine Tutorial}}
\end{DoxyItemize}
\item \mbox{\hyperlink{mdi_standard}{M\+DI Standard}}
\item \mbox{\hyperlink{library_page}{M\+DI Library}}
\end{DoxyItemize}\hypertarget{index_main_doc_engines_sec}{}\doxysection{Engines}\label{index_main_doc_engines_sec}
The following codes can be directly run as M\+DI engines\+:


\begin{DoxyItemize}
\item \mbox{\hyperlink{mdi_ecosystem_ecosystem_lammps}{L\+A\+M\+M\+PS}}
\item \mbox{\hyperlink{mdi_ecosystem_ecosystem_openmm}{Open\+MM}}
\item \mbox{\hyperlink{mdi_ecosystem_ecosystem_psi4}{Psi4}}
\item \mbox{\hyperlink{mdi_ecosystem_ecosystem_qcengine}{Q\+C\+Engine}}
\item \mbox{\hyperlink{mdi_ecosystem_ecosystem_qe}{Quantum E\+S\+P\+R\+E\+S\+SO}}
\item \mbox{\hyperlink{mdi_ecosystem_ecosystem_tinker}{Tinker}}
\end{DoxyItemize}

Through \mbox{\hyperlink{mdi_ecosystem_ecosystem_qcengine}{Q\+C\+Engine}}, it is additionally possible to control the following codes via M\+DI\+:


\begin{DoxyItemize}
\item \href{https://www.chemie.uni-bonn.de/pctc/mulliken-center/software/dft-d3/}{\texttt{ D\+F\+T-\/\+D3}}
\item \href{https://www.entos.info/}{\texttt{ entos}}
\item \href{http://www.petachem.com/}{\texttt{ Peta\+Chem}}
\item \href{https://www.molpro.net/}{\texttt{ Molpro}}
\item \href{http://openmopac.net/}{\texttt{ M\+O\+P\+AC}}
\item \href{http://rdkit.org/}{\texttt{ R\+D\+Kit}}
\item \href{https://github.com/aiqm/torchani}{\texttt{ Torch\+A\+NI}}
\end{DoxyItemize}

The following codes support \href{http://ipi-code.org/}{\texttt{ i-\/\+PI}}, with which M\+DI is compatible (see the \mbox{\hyperlink{library_page_library_launching_sec}{-\/ipi}} option). Note that the i-\/\+PI command set is different from that of the M\+DI Standard.


\begin{DoxyItemize}
\item \href{https://www.cp2k.org/}{\texttt{ C\+P2K}}
\item \href{http://www.dftbplus.org/}{\texttt{ D\+F\+T\+B+}}
\item \href{https://departments.icmab.es/leem/siesta/}{\texttt{ Siesta}}
\item \href{https://aimsclub.fhi-berlin.mpg.de/}{\texttt{ F\+H\+I-\/aims}}
\item \href{http://molmod.github.io/yaff/}{\texttt{ Yaff}}
\item \href{http://demon-nano.ups-tlse.fr/}{\texttt{ de\+Mon\+Nano}}
\item \href{https://www.questaal.org/}{\texttt{ T\+BE}}
\end{DoxyItemize}\hypertarget{index_main_doc_drivers_sec}{}\doxysection{Drivers}\label{index_main_doc_drivers_sec}

\begin{DoxyItemize}
\item \href{https://github.com/MolSSI/MDI_AIMD_Driver}{\texttt{ M\+DI A\+I\+MD Driver}}
\end{DoxyItemize}\hypertarget{index_main_doc_bugs_sec}{}\doxysection{Reporting Bugs, Issues, and Improvements}\label{index_main_doc_bugs_sec}
Bugs and suggestions for improvements can be reported via \href{https://github.com/MolSSI/MDI_Library/issues}{\texttt{ Git\+Hub Issues}} or by emailing the main author directly.\hypertarget{index_main_doc_author_sec}{}\doxysection{Authors}\label{index_main_doc_author_sec}
The M\+DI Library is primarily written by Taylor Barnes $<$\href{mailto:tbarnes1@vt.edu}{\texttt{ tbarnes1@vt.\+edu}}$>$, a Software Scientist at Mol\+S\+SI.\hypertarget{index_main_doc_license_sec}{}\doxysection{License}\label{index_main_doc_license_sec}
The M\+DI Library is released under the 3-\/Clause B\+SD License. See the L\+I\+C\+E\+N\+SE file for more details.\hypertarget{index_main_doc_ack_sec}{}\doxysection{Acknowledgements}\label{index_main_doc_ack_sec}
This work was supported by the Molecular Sciences Software Institute under U.\+S. National Science Foundation grant A\+C\+I-\/1547580.

M\+DI builds upon the work of numerous development groups, without whom it could not exist. The syntactical structure of the M\+DI Standard, including the fundamental command-\/response communication pattern, is modelled after that used by the \href{http://ipi-code.org/}{\texttt{ i-\/\+PI}} project, as is the string-\/based representation of commands. The \mbox{\hyperlink{mdi_standard_standard_nodes_sec}{Node System}} draws inspiration from the techniques used by several molecular mechanics packages, especially \href{https://lammps.sandia.gov/}{\texttt{ L\+A\+M\+M\+PS}} and \href{http://openmm.org/}{\texttt{ Open\+MM}}, to enable modular code additions. The unit conversions available through the M\+DI Library were provided by the \href{https://github.com/MolSSI/QCElemental}{\texttt{ Q\+C\+Elemental}} project. Certain details of the communication protocols implemented by the M\+DI Library, especially pertaining to M\+P\+I-\/based communication in the M\+P\+MD regime, were informed by the accomplishments of the \href{https://cslib.sandia.gov/}{\texttt{ C\+Slib}} library. The library-\/based communication protocol was developed in response to discussions with the \href{https://gitlab.com/exaalt}{\texttt{ E\+X\+A\+A\+LT}} team. The interface, error handling, data types, and numerous other elements of the M\+DI Library are modelled after the \href{https://www.mpi-forum.org/}{\texttt{ M\+PI Standard}}. A distribution of the M\+DI Library for Python is provided by \href{https://conda-forge.org/}{\texttt{ Conda Forge}}. 