It's been a busy week, with another busy week to come. I gave talks on Tuesday and Wednesday last week (including one to some scientists from Novartis who were visiting Bristol for the day), and then spent the end of the week in London at a meeting, and then at an all day course on how to apply for European grants. Next week I am giving another talk, and I will also be spending each afternoon teaching undergraduates how to do QM/MM calculations. On the plus side, my wife won tickets to the ballet this coming Friday, so at least the week will end on a relaxing note.
Code wise, I have not written much this week. The biggest change is that I have updated MolproClient to use a 64bit key to ensure that the Molpro process talks to only a single client at a time, and I have also cleaned up the MolproClient interface functions. I have also now implemented most of the MolproFF, and now Squire fully compiles (even though I still have lots of testing to do...!). I've been doing some more thinking about the design of Sire, and how I can implement a range of techniques, and I think that the design is now where I want it to be. The inclusion of molecular properties solves many of the problems that I was encountering, and also opens up the possibility of simple implementation of very different types of simulations. For example, I could create a "beads" property, which holds a collection of "bead" objects for the molecule. The constraint would be that each atom in the molecule must belong to one, and only one bead. Each bead would only need contain the IDs of its contained atoms. Then, RigidMDMove could look for these beads, and perform partial rigid body molecular dynamics on each bead (i.e. each bead is treated as a rigid body). Adding beads would therefore allow reduced motion lipid simulations that used the accurate forcefield potential. There has already been some work on this, including using reversible rigid body integrators with hybrid Monte Carlo. My implementation would allow me to easily look at this work, and to use hybrid MC to sample a partially rigid lipid bilayer. Then, as an extension, I could have bead properties (much like I have atom properties) that could provide coarse grain potential parameters for each bead, so that then a CoarseGrainFF could calculate energies and forces for the beads themselves. I could then add these together with a lambda variable, thus allowing the facile implementation of switching from an all atom to a coarse grain representation of the lipids, perhaps via replica exchange moves.
This really shows off the power of the design of Sire - the design makes it obvious how to implement something as complex as a coarse grain to atomistic representation, and as complex as partial rigid body moves, while at the same time here I am, coding in the QM/MM Monte Carlo moves! There is still so much to do, but at least now I can see the peak of the mountain...
Speaking of which, tomorrow is Sire's second birthday. I have also just made the 1000th subversion commit, and have just moved past 100k lines of code (according to sloccount). I can't believe how long I have been writing this... Time just flies!