# Introduction

Welcome to XMDS2 (codenamed xpdeint), which is an all-new version of XMDS. 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 Quickstart Tutorial, where we will show you how to write a basic simulation. 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 Worked Examples 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 (Installation), you might want to have a quick read of the note for upgraders (Upgrading From XMDS 1.X). 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 Advanced Topics.

XMDS2 should be cited as Comput. Phys. Commun. 184, 201-208 (2013).

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 [1]. The first version was written in C, and featured a very flexible, strongly convergent stochastic algorithm: the semi-implicit algorithm [2]. 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.

Footnotes

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

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