{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,12,31]],"date-time":"2025-12-31T01:07:28Z","timestamp":1767143248699,"version":"build-2238731810"},"reference-count":24,"publisher":"Springer Science and Business Media LLC","issue":"4","license":[{"start":{"date-parts":[[2020,7,1]],"date-time":"2020-07-01T00:00:00Z","timestamp":1593561600000},"content-version":"tdm","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"},{"start":{"date-parts":[[2020,7,2]],"date-time":"2020-07-02T00:00:00Z","timestamp":1593648000000},"content-version":"vor","delay-in-days":1,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"}],"funder":[{"name":"U.S. Department of Energy Office of Science, Office of Advanced Scientific Computing Research (ASCR), Exascale Computing Project","award":["17-SC-20-SC"],"award-info":[{"award-number":["17-SC-20-SC"]}]}],"content-domain":{"domain":["link.springer.com"],"crossmark-restriction":false},"short-container-title":["SN COMPUT. SCI."],"published-print":{"date-parts":[[2020,7]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>FLASH is a multiphysics software package that was created in 1998 by combining three preexisting packages and has undergone three major revisions. Software design and engineering practices were integrated early in the development and maintenance processes of FLASH, and these processes have evolved strongly at each of the revisions. As high-performance computing enters the age of exascale, challenges along the orthogonal axes of node-level hardware and solver heterogeneity force developers of complex multiphysics software to consider a software architecture overhaul. Because of the nature and scope of necessary changes, an effort to refactor and grow the architecture of the FLASH code has been launched as a separate software project. For this project to succeed, its development team must evaluate, improve, and modernize software processes and policies to meet the unique challenges posed by the exascale era. We describe here our experiences, lessons we have learned, and the methods that we have developed as part of this ongoing project. Within the context of the challenges posed by exascale, we review the FLASH design approach as well as some of the main software engineering processes and tools that have been implemented or updated throughout the lifetime of FLASH. Modernization applied to these processes and tools is also detailed. Reviewing and reevaluating the FLASH experience of establishing and updating software design and engineering practices have been helpful in understanding the needs of the project as it transitions to exascale and in planning the transition. We find that our historical design methodology is still important and relevant. We also believe that using a mixture of plan-based and agile methods is still the best for our project and is in accord with the guidance found in the literature. We present a section on inferences and lessons learned related to software design and engineering practices.<\/jats:p>","DOI":"10.1007\/s42979-020-0077-x","type":"journal-article","created":{"date-parts":[[2020,7,2]],"date-time":"2020-07-02T14:04:27Z","timestamp":1593698667000},"update-policy":"https:\/\/doi.org\/10.1007\/springer_crossmark_policy","source":"Crossref","is-referenced-by-count":5,"title":["Distillation of Best Practices from Refactoring FLASH for Exascale"],"prefix":"10.1007","volume":"1","author":[{"ORCID":"https:\/\/orcid.org\/0000-0003-3299-7426","authenticated-orcid":false,"given":"Anshu","family":"Dubey","sequence":"first","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Jared","family":"O\u2019Neal","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Klaus","family":"Weide","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Saurabh","family":"Chawdhary","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"297","published-online":{"date-parts":[[2020,7,2]]},"reference":[{"key":"77_CR1","volume-title":"Software engineering for science","author":"A Dubey","year":"2016","unstructured":"Dubey A, Antypas K, Coon E, Riley K. Software process for multiphysics multicomponent codes. In: Carver J, Hong NC, Thiruvathukal G, editors. Software engineering for science. London: Taylor & Francis Group; 2016."},{"issue":"3","key":"77_CR2","doi-asserted-by":"publisher","first-page":"330","DOI":"10.1016\/S0010-4655(99)00501-9","volume":"126","author":"P MacNeice","year":"2000","unstructured":"MacNeice P, Olson K, Mobarry C, de Fainchtein R, Packer C. PARAMESH: a parallel adaptive mesh refinement community toolkit. Comput Phys Commun. 2000;126(3):330\u201354.","journal-title":"Comput Phys Commun"},{"key":"77_CR3","first-page":"100","volume-title":"Numerical methods in astrophysics","author":"B Fryxell","year":"1989","unstructured":"Fryxell B, M\u00fcller E, Arnett D. Numerical methods in astrophysics. New York: Academic; 1989. p. 100."},{"key":"77_CR4","doi-asserted-by":"publisher","first-page":"241","DOI":"10.1086\/313257","volume":"124","author":"F Timmes","year":"1999","unstructured":"Timmes F. Integration of nuclear reaction networks. Astrophys J Suppl Ser. 1999;124:241\u201363.","journal-title":"Astrophys J Suppl Ser"},{"key":"77_CR5","doi-asserted-by":"crossref","unstructured":"Dubey A, Antypas K, Calder A, Fryxell B, Lamb D, Ricker P, Reid L, Riley K, Rosner R, Siegel A, Timmes F, Vladimirova N, Weide K. The software development process of FLASH, a multiphysics simulation code. In: Proceedings of the 5th international workshop on software engineering for computational science and engineering, San Francisco; 2013.","DOI":"10.1109\/SECSE.2013.6615093"},{"issue":"2","key":"77_CR6","doi-asserted-by":"publisher","first-page":"225","DOI":"10.1177\/1094342013505656","volume":"28","author":"A Dubey","year":"2013","unstructured":"Dubey A, Antypas K, Calder A, Daley C, Fryxell B, Gallagher J, Lamb D, Lee D, Olson K, Reid L, Rich P, Ricker P, Riley K, Rosner R, Siegel A, Taylor N, Timmes F, Vladimirova N, Weide K, ZuHone J. Evolution of FLASH, a multiphysics scientific simulation code for high performance computing. Int J High Perform Comput Appl. 2013;28(2):225\u201337.","journal-title":"Int J High Perform Comput Appl"},{"key":"77_CR7","doi-asserted-by":"publisher","first-page":"512","DOI":"10.1016\/j.parco.2009.08.001","volume":"35","author":"A Dubey","year":"2009","unstructured":"Dubey A, Antypas K, Ganapathy M, Reid L, Riley K, Sheeler D, Siegel A, Weide K. Extensible component based architecture for FLASH, a massively parallel, multiphysics simulation code. Parallel Comput. 2009;35:512\u201322.","journal-title":"Parallel Comput"},{"issue":"2","key":"77_CR8","doi-asserted-by":"publisher","first-page":"126","DOI":"10.1109\/TSE.2004.1265817","volume":"30","author":"T Tourwe","year":"2004","unstructured":"Tourwe T, Mens T. A survey of software refactoring. IEEE Trans Softw Eng. 2004;30(2):126\u201339.","journal-title":"IEEE Trans Softw Eng"},{"key":"77_CR9","doi-asserted-by":"crossref","unstructured":"M\u00e4ntyl\u00e4 M, Lassenius C. Drivers for software refactoring decisions. In: ACM\/IEEE international symposium on empirical software engineering, ISESE\u201906, New York; 2006.","DOI":"10.1145\/1159733.1159778"},{"key":"77_CR10","doi-asserted-by":"crossref","unstructured":"Hannay JE, MacLeod C, Singer J, Langtangen HP, Pfahl D, Wilson G. How do scientists develop and use scientific software? In: 2009 ICSE workshop on software engineering for computational science and engineering; 2009.","DOI":"10.1109\/SECSE.2009.5069155"},{"issue":"2","key":"77_CR11","doi-asserted-by":"publisher","first-page":"24","DOI":"10.1109\/MCSE.2011.113","volume":"14","author":"M Sletholt","year":"2012","unstructured":"Sletholt M, Hannay JE, Pfahl D, Langtangen HP. What do we know about scientific software development\u2019s agile practices? Comput Sci Eng. 2012;14(2):24\u201337.","journal-title":"Comput Sci Eng"},{"issue":"4","key":"77_CR12","first-page":"47:1","volume":"50","author":"T Storer","year":"2017","unstructured":"Storer T. Bridging the chasm: a survey of software engineering practice in scientific programming. ACM Comput Surv. 2017;50(4):47:1\u201332.","journal-title":"ACM Comput Surv"},{"issue":"4","key":"77_CR13","doi-asserted-by":"publisher","first-page":"463","DOI":"10.1142\/S0218194013500137","volume":"23","author":"R Farhoodi","year":"2013","unstructured":"Farhoodi R, Garousi V, Pfahl D, Sillito J. Development of scientific software: a systematic mapping, a bibliometrics study, and a paper repository. Int J Softw Eng Knowl Eng. 2013;23(4):463\u2013506.","journal-title":"Int J Softw Eng Knowl Eng"},{"key":"77_CR14","doi-asserted-by":"crossref","unstructured":"Overbey JL, Negara S, Johnson RE. Refactoring and the evolution of Fortran. In: ICSE workshop on software engineering for computational science and engineering; 2009.","DOI":"10.1109\/SECSE.2009.5069159"},{"key":"77_CR15","doi-asserted-by":"crossref","unstructured":"Overbey J, Xanthos S, Johnson R, Foote B. Refactorings for Fortran and high-performance computing. In: The second international workshop on software engineering for high performance computing system applications; 2005.","DOI":"10.1145\/1145319.1145331"},{"issue":"5","key":"77_CR16","doi-asserted-by":"publisher","first-page":"2229","DOI":"10.1007\/s11227-017-1966-1","volume":"73","author":"M Tinetti","year":"2017","unstructured":"Tinetti M, M\u00e9ndez FG. Change-driven development for scientific software. J Supercomput. 2017;73(5):2229\u201357.","journal-title":"J Supercomput"},{"key":"77_CR17","volume-title":"Software engineering","author":"I Sommerville","year":"2016","unstructured":"Sommerville I. Software engineering. 10th ed. Boston: Pearson; 2016.","edition":"10"},{"key":"77_CR18","unstructured":"Sillitt A, Succi G. Requirements engineering for agile methods. In: Engineering and managing software requirements, Berlin, Heidelberg, Springer; 2005."},{"issue":"3","key":"77_CR19","doi-asserted-by":"publisher","first-page":"8","DOI":"10.1145\/1764810.1764814","volume":"35","author":"NB Ruparelia","year":"2010","unstructured":"Ruparelia NB. Software development lifecycle models. SIGSOFT Softw Eng Notes. 2010;35(3):8\u201313.","journal-title":"SIGSOFT Softw Eng Notes"},{"key":"77_CR20","unstructured":"AMReX [Online]. https:\/\/amrex-codes.github.io\/."},{"key":"77_CR21","doi-asserted-by":"crossref","unstructured":"Messer O, Harris J, Parete-Koon S, Chertkow MA. Multicore and accelerator development for a leadership-class stellar astrophysics code. In: Proceedings of the 11th international conference on applied parallel and scientific computing, Helsinki, Finland; 2013.","DOI":"10.1007\/978-3-642-36803-5_6"},{"key":"77_CR22","doi-asserted-by":"crossref","unstructured":"Dubey A, Graves D: A design proposal for a next generation scientific software framework. In: HeteroPar, Vienna; 2015.","DOI":"10.1007\/978-3-319-27308-2_19"},{"issue":"2","key":"77_CR23","doi-asserted-by":"publisher","first-page":"233","DOI":"10.1002\/spe.2220","volume":"45","author":"A Dubey","year":"2015","unstructured":"Dubey A, Weide K, Lee D, Bachan J, Daley C, Olofin S, Taylor N, Rich P, Reid LB. Ongoing verification of a multiphysics community code: FLASH. Softw Pract Exp. 2015;45(2):233\u201344.","journal-title":"Softw Pract Exp"},{"key":"77_CR24","doi-asserted-by":"crossref","unstructured":"O\u2019Neal J, Weide K, Dubey A. Experience report: refactoring the mesh interface in FLASH, a multiphysics software. In: 2018 IEEE 14th international conference on e-Science (e-Science), Amsterdam; 2018.","DOI":"10.1109\/eScience.2018.00141"}],"updated-by":[{"DOI":"10.1007\/s42979-023-02168-3","type":"correction","label":"Correction","source":"publisher","updated":{"date-parts":[[2023,9,28]],"date-time":"2023-09-28T00:00:00Z","timestamp":1695859200000}}],"container-title":["SN Computer Science"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/link.springer.com\/content\/pdf\/10.1007\/s42979-020-0077-x.pdf","content-type":"application\/pdf","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/link.springer.com\/article\/10.1007\/s42979-020-0077-x\/fulltext.html","content-type":"text\/html","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/link.springer.com\/content\/pdf\/10.1007\/s42979-020-0077-x.pdf","content-type":"application\/pdf","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2023,9,28]],"date-time":"2023-09-28T09:26:27Z","timestamp":1695893187000},"score":1,"resource":{"primary":{"URL":"https:\/\/link.springer.com\/10.1007\/s42979-020-0077-x"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2020,7]]},"references-count":24,"journal-issue":{"issue":"4","published-print":{"date-parts":[[2020,7]]}},"alternative-id":["77"],"URL":"https:\/\/doi.org\/10.1007\/s42979-020-0077-x","relation":{},"ISSN":["2662-995X","2661-8907"],"issn-type":[{"value":"2662-995X","type":"print"},{"value":"2661-8907","type":"electronic"}],"subject":[],"published":{"date-parts":[[2020,7]]},"assertion":[{"value":"1 July 2019","order":1,"name":"received","label":"Received","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"20 February 2020","order":2,"name":"accepted","label":"Accepted","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"2 July 2020","order":3,"name":"first_online","label":"First Online","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"28 September 2023","order":4,"name":"change_date","label":"Change Date","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"Correction","order":5,"name":"change_type","label":"Change Type","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"A Correction to this paper has been published:","order":6,"name":"change_details","label":"Change Details","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"https:\/\/doi.org\/10.1007\/s42979-023-02168-3","URL":"https:\/\/doi.org\/10.1007\/s42979-023-02168-3","order":7,"name":"change_details","label":"Change Details","group":{"name":"ArticleHistory","label":"Article History"}}],"article-number":"223"}}