Earth Prediction Innovation Center


To make changes or updates to an application, programmers must make changes to an applications source code. Source code is written with one of dozens of programming languages (i.e. Linux, Python, or C++) that tell the computer how to execute the commands that make a computer application work. Computer coding can be an error-prone process and a programmer may want to return to their original code, or a more recent version of their code, in their files to make updates or to fix errors. To keep track of changes and updates in files, programmers use Git, a version control system. Think of Git as GoogleDocs for programming languages. Just like GoogleDocs, Git allows programmers to see new changes in the text of files, see who made the changes, leave comments in a document, and view old versions of a file. GitHub is a web-based service for Git. Think of GitHub as social media for programmers, GitHub allows programmers to connect with other software developers working on the same files, troubleshoot problems, and share files online.   Git and GitHub will play a critical role in EPIC by supplying the community with the source code for the Unified Forecast System (UFS). To encourage the community to develop on the UFS, EPIC will need to have well-managed repositories including policies, documentation, configuration, and testing protocols for all of the individual components of UFS code available on GitHub.

For more information, view the EPIC Vision Paper Section 2.1 “Open, managed, authoritative repositories” available here. For more information on Git and GitHub, visit here.

Software Infrastructure  Software infrastructure is defined as the foundational code and processes upon which applications are built and managed. The UFS is an end-to-end system for earth system prediction that encompasses the assimilation of observations (i.e., efforts such as the Joint Effort for Data assimilation Integration (JEDI)), development of initial conditions, execution of the prediction model, post-processing and analysis of model output, verification of results, and the delivery of products. Software infrastructure must support this entire process.  The Memorandum of Agreement between the National Center for Atmospheric Research (NCAR) and NOAA for the co-development of common model infrastructure outlines areas of model development that help define the scope of software infrastructure considered here. These include:

* Open, managed, authoritative repositories 

* Workflow management 

* Intra- and inter- component coupling 

Software Engineering 

Modeling systems for Numerical Weather Prediction (NWP), the full-earth system components within the Unified Forecast System (UFS), and the operational applications derived from them, are becoming ever more complex. In order for innovative research to be integrated and tested in the UFS quickly, algorithms must be encapsulated into sections of code that have well-defined interfaces. This way, a scientist can focus on his or her particular area of interest without having to know the details of how other parts of the model function. In the computer science industry, this design principle is known as Separation of Concerns. A key part of EPIC will be to bring modern software engineering practices, such as Separation of Concerns, to bear on the model development process. EPIC will employ professional software engineers to work directly with scientists in an integrated cross-disciplinary environment, to ensure that the UFS code is easily maintainable, extensible and performance optimized. A key part of this will involve ensuring that all code modules include tests and can be reused across components of the system wherever possible.  User support services  One of the key areas for EPIC success is establishing comprehensive user support services to enable a broad and vibrant community of UFS users and developers. User Support Services (USS) will nurture a collaborative, community-based framework to support, advise and educate a cadre of system and software users and developers. 

User support services include, but are not limited to: 

* easy access to the latest version of code; 

* a code repository maintained under version control software; 

* thorough and understandable documentation; 

* user-friendly workflows; 

* code portability;

* adequate software infrastructure;

* tutorials, workshops, and developer involvement;  

* hierarchical testing capabilities;

* clear pathways for incorporating new science;

* easy access to adequate amounts of computing resources;

* and attention to students as next-generation users.