|
|
|
Gravity simulation on a desktop computer |
|
Worked in the software industry ever since leaving college.
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.
I immediately wanted to port ACS to my preferred language, C++. Once started, a number of other goals became apparent:
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.
There is a version gravsim-1.03.zip 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.
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.
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.
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.