Blogs

Siren Call

The bulk of Sire is now nearly complete, so I am now looking to the future of where the code will go next.
There are three main considerations;

(1) How can I make the code easier to install and maintain?
(2) How can I make the code easier to develop for new developers?
(3) What is the next major challenge that Sire needs to solve?

To answer points 1 or 2 I have been rewriting the underlying foundation of Sire so that
it has fewer dependencies and so that the object design is easy to understand and

Realisation of a dream

Several years ago now, I had an idea of how to calculate absolute binding free energies by mutating ligands (or solutes) into water. The method would work by using two simulation boxes, one that contained just bulk water, and one that would contain the solvated protein-ligand complex. The boxes would both be connected to the same temperature, pressure and particle baths, so would both be in perfect equilibrium with one another (think Gibb's ensemble).

Nearly there...

I realised this morning that Sire is very nearly there - by which I mean that the code is nearly at the point where it can be released. I (and others) have been using Sire for production calculations for a few months now, and the core APIs have been stable for over a year. Even the binary save file is pretty stable, and the code can do nearly everything that ProtoMS can do (and more). Before release I have a few jobs - the first is to write the amber forcefield readers, so that parameterising molecules and setting up simulations is easier.

Flexibility and Power

Sire is now being used for full production simulations by several users. Again, the transition from a development code to a production code took me by surprise, but once it started working, then it was working very well. So far I have five users (including an installation at another university) and they are running a range of different simulations. What has been interesting is the ease by which they are able to modify the code to get it to do what they want.

Soft core and constraints

Now that the core code is complete, I've been adding in some useful functionality. Two recent additions are soft-core potentials and constraints.

The machine is spinning up...

I'm feeling the slow rumble of computers spinning into life to run some large Sire jobs. I've pretty much finished everything I need now to finally run some large scale simulations, with the z-matrix and z-matrix Monte Carlo moves now written and debugged. The MPI code has been tested, and once mpich2 is installed on blue crystal I'll be ready to start the simulations.

Hundreds of processes!

The MPI code in Sire is now finally working and robust (as opposed to working and falling over every ten seconds!). I've written the code around the concept of Backends (which are threads that are waiting to do some work) and WorkPackets, that contain all of the information and code necessary to perform a chunk of work. I then have Frontends, which provide an interface to the connection to a Backend (thereby hiding all of the communication code) and a Node object, that holds a Frontend to perform the work.

for-ages

It's been taking for-ages to get the MPI code working. I thought I had it a week or so ago, but it was deadlocking like anything when I was trying to run some production simulations. I've pretty much now rewritten it so that there is now a very clean separation of communicators and threads. It's been a tough week, but at least it now all feels robust (rather than feeling really flaky!)

One thing that would help though is for C++ to provide a loop or a mutex or wait condition that was just a little bit less than permanent - e.g. it is easy to loop forever...

while (true)
{

Production

It's been a busy couple of weeks, but Sire has now been ported to our supercomputer cluster and is running some production jobs! There are still a few issues to sort out, but the code is finally moving towards completion (well, at least beta-type completion).

Feature Parity

I've had quite a productive week. The new version of Sire is now finally reaching feature parity with the old version (i.e. new Sire can now be used for QM/MM free energy simulations, and I've just finished adding the RDF monitor).