Introduction
============

Welcome to **XMDS2** (codenamed `xpdeint`), which is an all-new version of :ref:`XMDS<XMDSHistory>`.  Prepare for fast, easily-extended simulations with minimal code error.

**Description:**   The purpose of XMDS2 is to simplify the process of creating simulations that solve systems of initial-value first-order partial and ordinary differential equations. Instead of going through the error-prone process of writing by hand thousands of lines of code, XMDS2 enables many problems to be described in a simple XML format. From this XML description XMDS2 writes a C++ simulation that solves the problem using fast algorithms. Anecdotally, the code generated by XMDS2 is as fast as, or faster than, code hand-written by an expert, but by using XMDS2 the time taken to produce the simulation is significantly reduced.

XMDS2 can be used to simulate almost any set of (coupled) (partial) (stochastic) differential equations in any number of dimensions.  It can input and output data in a range of data formats, produce programs that can take command-line arguments, and produce parallelised code suitable for either modern computer architectures or distributed clusters.

If this is your first time with XMDS, then an ideal place to start is the :ref:`QuickStartTutorial`, where we will show you how to write a basic simulation.  :ref:`Installation` instructions should get you up and running and able to start playing with the large library of examples provided. The impatient will probably have good luck browsing the examples library included with the source, and the :ref:`WorkedExamples` in this documentation for something that looks like their intended simulation.

If you are upgrading from **XMDS version 1.x**, then after following the installation instructions (:ref:`Installation`), you might want to have a quick read of the note for upgraders (:ref:`UpgradeFromXMDS1`).  The syntax of the XML scripts has changed, but hopefully you will find the new scripts very intuitive.

Detailed advice on input/output issues, and ways to code more complicated simulations can be found in :ref:`AdvancedTopics`.

XMDS2 should be cited as `Comput. Phys. Commun. 184, 201-208 (2013) <http://dx.doi.org/10.1016/j.cpc.2012.08.016>`_.

.. _XMDSHistory:

**History:**   **XMDS** was created in 1997 by Peter Drummond and Greg Collecutt, who conceived of the idea of using an XML-based code generator to simplify the process of integrating systems of equations with arbitrary dimension [#f1]_.  The first version was written in C, and featured a very flexible, strongly convergent stochastic algorithm: the :ref:`semi-implicit algorithm<SI>` [#f2]_.  Released under a public licence, it began to receive attention across several research groups.  Over the next few years several people helped add new algorithms and features.  
    
In 2003, the increased scope of the package prompted a complete rewrite by Greg Collecutt (using C++), which lead to **XMDS 1.0**.  It was placed on sourceforge, and over a dozen developers contributed from 2003-2007 to help XMDS address a wider range of problems with a range of modern algorithms and support for parallel supercomputing.  The documentation and installation method was improved enabling the software to be used in a wider context, and XMDS gained many users from across the world - in Australasia, Europe, America, India and China - over a variety of disciplines.
    
In 2008 a second complete rewrite was undertaken, largely by Graham Dennis (using Cheetah templates in python), leading to the current version **XMDS2**.  This restructuring of the internal treatment of XML elements and the generated code allowed a new range of extensions to be explored.  These included possibilities such as integrating multiple fields with different dimensionality, a more general set of differential equations that can be solved efficiently, and multiple choices of transforms for transverse dimensions.  This restructuring was paired with a equivalent effort to make the user experience more convenient through the use of single step installers for OS X and linux, as well as an extensive documentation and example library.  Today, **XMDS2** has been downloaded approximately 40 000 times across 71 countries.


.. rubric:: Footnotes

.. [#f1] G.R.Collecutt and P.D.Drummond, `Xmds: eXtensible multi-dimensional simulator`, Comput. Phys. Commun. **142**, 219 (2001).

.. [#f2] M.J.Werner and P.D.Drummond, `Robust algorithms for solving stochastic partial differential equations`, J. Comput. Phys. **132**, 312 (1997).