Big developments this week. At last, after much development and design, I finally now have a MonteCarlo class! So ok, how have I survived until now without having a MonteCarlo class? Well Python does go a long way to filling in missing functionality. But it can't beat finely crafted design. MonteCarlo is part of the Move hierarchy, which provides a way for pretty much all of the simulation moves that I can think of to operate on Systems when they are either local, or even dispersed over a cluster. Moves operate of groups of Molecules (MoleculeGroups).
Happy New Year to everyone! 2007 is here and I am now back to work and programming. I managed to take a week off, and barely touched a computer at all (well, I did mess around a little with the GNU multi-precision library GMP for the purposes of playing around with large prime numbers, but since this wasn't Sire it doesn't count ;-)
What a year! Now that I am about to leave for my holiday I am looking back at how things have gone the last year and, on balance, I am pretty pleased with how everything has turned out. Sire has taken a lot longer to develop than I thought (isn't that always the case!?), though the reasons for the delays have been worth it; e.g.
I've been arguing a lot recently - not with anyone else, but with myself. I tend to argue a lot with myself when I am programming, adopting both a pro- and anti- stance against pretty much every design decision. On the plus side, it means that I really think about what I am doing, and the consequences of each decision, and *really* decide. On the negative side it does make me quite schizophenic, and the self-arguments can become very heated! This weekend was quite a good example. For a long time I have held the view that the Molecule class should be as simple as it can be (i.e.
I've come to really like atomic integer operations and have begun using them a lot in Sire. Atomic integer operations are operations that occur on integers that are guaranteed to occur atomically, i.e. they are thread-safe, as no two operations on that integer may occur simultaneously. Atomic integers are thus very widely used in systems programming, and allow for reference counting in thread-safe smart pointer implementations. Atomic integer operations do however impose some overhead, as they require that access to the integer is serialised.
Interesting day today... I saw a couple of projects that had some relationship to Sire. I can't say too much on a public forum, but they both showed me that I am on the right track with what I am doing.
I am very busy now in the lead up to Christmas. I've got a sort of deadline of January to get some production simulations run so that I can write some papers for submission both to journals, and for talks (so any hints of good places for me to talk at are welcome ;-)
I've made a lot of progress over the last week. With Sire, I have worked out the design for the System, Simulation and Processor classes. The design solves the problem of using implicitly shared and easy to copy System / ForceField classes with the single-instance Simulation and Processor classes. The problem is that while I can copy ForceField until the cows come home, I cannot copy Processor (as this may be a unique link to a single remote resource, e.g. a molpro server). I think that the design now is quite elegant - you set up a System, which is copyable and editable etc.