Presentation to Mica Simulations (Thursday 11th June 2009)

About Me

  • First Life: Mark Ridler
  • Second Life: Ridlero Rioccan
  • Born: 1970, Exeter, Devon, UK
  • Graduated: 1992, Churchill College, Cambridge
  • Degree: Computer Science
  • Career: 17 years in industry
  • Current Residence: Exeter


Worked in the software industry ever since leaving college.

  • C++ Programmer - 7 years
  • Project Manager - 10 years

Relevant Interests

I've always had an interest in physics and astronomy. In fact the first year of my degree included physics and mathematics although I've not used most of it since.

After 16 years of armchair astronomy, I got bored and started to hunt the internet for a way to get involved with a computer.

I found Piet Hut's and Jun Makino's ACS website in July 2008 and it was an instant hit with me.

Grav-Sim Development Timeline

I immediately wanted to port ACS to my preferred language, C++. Once started, a number of other goals became apparent:

  • Port the best bits of ACS more-or-less as-is (including the integrators)
  • Refactor the bits of ACS that seemed in need of clean interfaces
  • Cater for a tree-based accelerator of some sort
  • Cater for a range of precisions
  • Generally improve things wherever I could
  • Run some tests
  • Publish the results on a website of some sort

After working on it many evenings and some weekends, I got fed up by the end of September 2008 and hadn't even started the website at that point.

Nothing happened until April 2009 when I decided to follow-through by completing what I'd started and building the website.

What Happens Next

Right Now

There is a version loaded onto the downloads section. I've done some testing on Windows and included Makefiles for unix. Peter Teuben has now successfully compiled it on unix.


I'm keen on collaborating to move Grav-Sim forwards. There are loads of things to do but it's both impractical and unhealthy for me to attempt to develop them all on my own. I will need some help and am happy to assist people in understanding what's there.

Gravsim 1.1

The Dehnen accelerator and the method / space-divider split recently proposed in a conversation with Peter Teuben. This might also be a suitable point for others to get involved by implementing Grav-Sim accelerators.

Note that I'm not totally happy with the accelerator interface as-is. There are some fairly weird arguments in the calc_gravity function just to support the ChinChen integrator. I couldn't get my head around what was really going on there so maybe someone can think of a cleaner way of implementing it.

Could we implement accelerators by subclassing in C++ and then remote procedure call to other packages? Well, yes, but I think this will likely destroy any benefits we currently get from locality of reference. There is a lot of context data to pass from the accelerator to another package so I'd expect this approach to be slow unless you have a remarkable computer setup on-hand.

Gravsim 2.0

The thing that really spoils Grav-Sim at the moment is when it runs into a close binary and disappears into a loop. I understand that Sverre's work is the industry-standard solution and would really like to work on porting this to C++ next.

I've taken a quick look at Sverre's code and I must admit that I'm finding it heavy going. I'm not a Fortran guy and even after converting it to C via f2c it's not easy. It's going to take some serious effort for me to understand it properly and how best to refactor it so it fits in with the rest of ACS.

The Future

Beyond this, there are loads of other things to do. I've written up some of my thoughts in the "Future Work" section but I'm sure you guys and gals have a ton of other things that you can see need doing.


To Piet and Jun for providing the remarkable ACS website.

To Peter for our conversations to date.