A Flexible and Modern Design for the Next Generation E3SM Atmosphere Model
Despite the use of state-of-the-science physics processes, modern global atmosphere models are still largely built upon a foundation of software infrastructure that was designed and implemented decades ago. Assumptions which made sense then are now barriers to progress towards higher resolution modeling and the adoption of more complex processes. The Simple Cloud Resolving E3SM Atmosphere Model (SCREAM) represents a complete ground-up rewrite of the E3SM Atmosphere Model (EAM) in C++. Taking advantage of modern software engineering techniques, the SCREAM project team has implemented a new paradigm for how the model interfaces with individual atmospheric processes. In EAM, an expert knowledge of the underlying code and hundreds of human-hours are required to integrate a new process. Also, in EAM, the inter-process coupling is rigidly set (i.e., hard-coded), making it difficult or impossible to change the numerical inter-process coupling algorithm. In SCREAM, the code design emphasizes abstraction layers and code compartmentalization. For instance, every atmospheric process is an instance of a generic base class which exposes well-defined set of interfaces such as the list of input and output fields or methods to initialize or run the process. The atmosphere driver (i.e., the infrastructure responsible for initializing, running, and finalizing the atmosphere component of E3SM) only interacts with each atmospheric process through these interfaces, without any further knowledge about the specific process at hand. The advantage of this "separation of concerns" is twofold. One advantage is that it gives developers of a new atmosphere process freedom to create their scheme as they want, constrained only by the need to use a relatively small pre-defined interface class to couple with the rest of SCREAM. In addition, handling individual atmosphere processes through generic interfaces makes the atmosphere driver more flexible, allowing algorithmic choices such as coupling mechanisms or individual process time-stepping methods to be chosen at runtime. These features enable exploration of a wide variety of process coupling ideas and make addition of new atmosphere processes much faster and easier.