- #1
merovingian12
- 15
- 0
A while back I did research in planetary system dynamics that involved the code package Mercury. Unfortunately, I found that Mercury would occasionally crash for no reason or give nonsensical results. This happened for a small subset of initial conditions and while I spent some time debugging it, I could never fix everything. Moreover, I noticed that it's written in FORTRAN 77, uses 'goto' statements, etc.
I ended up switching to Swifter, which used the more modern Fortran 90, and overall appeared to be better written. I did get some underflow floating point exceptions, but they didn't seem to be an issue. The annoying things with Swifter were that it took Cartesian coordinate inputs rather than orbital elements (easy to work around) and that, for some reason, the close encounter subroutines only considered encounters between a test particle and massive body, but not between two massive bodies (not quite as easy). I'm thinking it would be better to expand Swifter's subroutines than try to figure out what's going on with Mercury.
When I asked around about these code packages, the two answers I got were either "Well, I don't know, I've never looked at the codes" or "Yeah, there are bugs [in Mercury]. Tough."
Despite all this, from what I've seen, many of the recent papers in planetary dynamics use either Mercury or Swifter.
Could someone who's familiar with the field comment on this? Is there some update to the ~2001 Fortran 77 version that I've missed? Or does everyone fix the bugs individually but not tell anyone else what they did? Is there another package I might look at?
I ended up switching to Swifter, which used the more modern Fortran 90, and overall appeared to be better written. I did get some underflow floating point exceptions, but they didn't seem to be an issue. The annoying things with Swifter were that it took Cartesian coordinate inputs rather than orbital elements (easy to work around) and that, for some reason, the close encounter subroutines only considered encounters between a test particle and massive body, but not between two massive bodies (not quite as easy). I'm thinking it would be better to expand Swifter's subroutines than try to figure out what's going on with Mercury.
When I asked around about these code packages, the two answers I got were either "Well, I don't know, I've never looked at the codes" or "Yeah, there are bugs [in Mercury]. Tough."
Despite all this, from what I've seen, many of the recent papers in planetary dynamics use either Mercury or Swifter.
Could someone who's familiar with the field comment on this? Is there some update to the ~2001 Fortran 77 version that I've missed? Or does everyone fix the bugs individually but not tell anyone else what they did? Is there another package I might look at?