Computer Laboratory

CamFort - Fortran analysis and refactoring tool

As computer models grow larger it is becoming increasingly difficult to deliver on core requirements such as verifiability, maintainability, understandability, validity, and portability.  Software complexity is a key driver of these issues and this has been one focus of programming language research for many years, yet we see little adoption of new approaches in the natural sciences. Instead we see scientists continually striving to evolve their software to more complex models, or bigger data sets or novel execution architectures.

At the University of Cambridge we are running an multidisciplinary project involving computer scientists and natural scientists to understand how state-of-the-art programming language research can be leveraged for more effective programming in the sciences. We are studying a number of models, mostly written in Fortran, developed within the university (notably, the E3MG economic model and Hybrid climate/geology models). We are seeking other such mature models to gain a broader view of programming needs and patterns in the sciences and the robustness of existing techniques.

CamFort is a tool currently under development at the Computer Laboratory. It provides both 1) analyses for gathering data on the programming patterns common in scientific models and 2) automatic refactoring for improving the code quality of existing models. The first tool provides data to inform future language designs to better support the scientific process and to understand the limits of best-practise automatic program analysis. The second tool automatically refactors deprecated or dangerous programming patterns, with the goal of helping to meet the core quality requirements outlined above, such as maintainability. For example, our tool refactors EQUIVALENCE and COMMON blocks). The tool also helps to expose any programming bugs arising from bad programming practices.


CamFort is currently available in a development version on GitHub and requires GHC Haskell to build.

Stable release and binaries will be available in October.


WRT'13 paper