Experience report: refactoring the mesh interface in FLASH, a multiphysics software

FLASH is a highly-configurable multiphysics software designed for solving a large class of problems that involve fluid flows and need adaptive mesh refinement (AMR). FLASH has been in existence for two decades and has undergone four major revisions. It is now undergoing its fifth major revision to deal with increasingly heterogeneous platforms. The architecture of previous versions of the code and the AMR package at its core, Paramesh, are inadequate to meet the challenges posed by heterogeneity. In this paper we describe our experience with refactoring the mesh interface of the code to work with a more modern AMR library, AMReX. The focus of the paper is the refactoring methodology and the attendant software process that we have found useful to ensure that code quality is maintained during the transition.

[1]  M. Berger,et al.  Adaptive mesh refinement for hyperbolic partial differential equations , 1982 .

[2]  Peter Bodenheimer Numerical methods in astrophysics , 2007 .

[3]  P. Colella,et al.  Local adaptive mesh refinement for shock hydrodynamics , 1989 .

[4]  Anshu Dubey,et al.  A Design Proposal for a Next Generation Scientific Software Framework , 2015, Euro-Par Workshops.

[5]  Yang Li Reengineering a scientific software and lessons learned , 2011, SECSE '11.

[6]  Janice Singer,et al.  How do scientists develop and use scientific software? , 2009, 2009 ICSE Workshop on Software Engineering for Computational Science and Engineering.

[7]  Vahid Garousi,et al.  Development of Scientific Software: a Systematic Mapping, a bibliometrics Study, and a Paper Repository , 2013, Int. J. Softw. Eng. Knowl. Eng..

[8]  Andrew Siegel,et al.  Extensible component-based architecture for FLASH, a massively parallel, multiphysics simulation code , 2009, Parallel Comput..

[9]  Tom Mens,et al.  A survey of software refactoring , 2004, IEEE Transactions on Software Engineering.

[10]  Jan Verelst,et al.  Refactoring - improving coupling and cohesion of existing code , 2004, 11th Working Conference on Reverse Engineering.

[11]  Francis Timmes,et al.  Integration of Nuclear Reaction Networks for Stellar Hydrodynamics , 1999 .

[12]  Mika Mäntylä,et al.  Drivers for software refactoring decisions , 2006, ISESE '06.

[13]  Jeffrey Overbey,et al.  Refactorings for Fortran and high-performance computing , 2005, SE-HPCS '05.

[14]  Peter MacNeice,et al.  Paramesh: A Parallel Adaptive Mesh Refinement Community Toolkit , 2013 .

[15]  Dietmar Pfahl,et al.  What Do We Know about Scientific Software Development's Agile Practices? , 2012, Computing in Science & Engineering.

[16]  Tim Storer,et al.  Bridging the Chasm , 2017, ACM Comput. Surv..

[17]  Brad Gallagher,et al.  Evolution of FLASH, a multi-physics scientific simulation code for high-performance computing , 2014, Int. J. High Perform. Comput. Appl..

[18]  Mariano Méndez,et al.  Change-driven development for scientific software , 2017, The Journal of Supercomputing.

[19]  Jeffrey Overbey,et al.  Refactoring and the evolution of Fortran , 2009, 2009 ICSE Workshop on Software Engineering for Computational Science and Engineering.

[20]  Anshu Dubey,et al.  Progress in development of HEDP capabilities in FLASH’s Unsplit Staggered Mesh MHD solver , 2011 .