Software Engineering

An important component in fulfilling the center’s mission is the development of high-quality engineering software. Presently, internal software development is loosely categorized into three broad components:

1) Uncertainty Quantification (UQ): includes the implementation and development of novel sampling techniques to support model validation and the prediction of engineering quantities of interest with uncertainty quantification included. The primary focus effort within this area is the development of the QUESO library, a collection of C++ classes and algorithms which support distributed-memory parallelism using MPI and runs within uniprocessor or multiprocessor environments.

2) Physical/Engineering Modeling: includes development within a number of physical domains related to the problem of vehicle reentry (ablation, radiation, chemistry, hypersonic flow, and turbulence modeling). Efforts in this area focus on the continued development of one-dimensional ablation and radiation libraries and coupling methodologies for integrating with  external CFD applications. Companion efforts include the extension of a finite-element hypersonic flow code to support chemically reacting, turbulent flows, and the design of a high-temperature chemical kinetics library.

3) Utility/Performance Monitoring: includes the development of a utility library to centralize common features used by the physical modeling efforts (eg. backwards-compatible input file parsing) and mechanisms for quick hot-spot performance profiling. In addition, several data-reduction utilities fall within this area which are being developed to process raw experimental data for use in model calibration and validation.

Software Management:

software-management-diagram

Figure 1: Software Management Infrastructure

The center relies on a number of open-source projects to support internal development activities, including  day-to-day software management. The top-level organizing software adopted within the center is Redmine, a flexible project management web application written using Ruby on Rails framework. To complete the software management infrastructure, additional utilities are integrated within our Redmine instantiation as outlined in Figure 1. These include Subversion for source revision control, Buildbot, for automatic regression testing, and Doxygen for documentation generation.

Software Approaches

Locally, modelers are working in C/C++ and Fortran90 and these languages represent the focus of our core support for utility library development. In general, development is focused on providing novel functionality and consequently, a number of existing libraries are leveraged to take advantage of various community efforts in scientific computing (eg. GSL, Trilinos, Dakota, and PETSc). Our general philosophy for scientific software development is to first begin with the development of a detailed model document outlining all governing equations, constitutive relations,  and underlying assumptions.  Then, the numerical discretization is defined along with boundary conditions and other items required for model closure along with a demarcation of uncertain model parameters (these parameters are later exposed and altered during the calibration and validation process).  Once the model is implemented in software, a verification effort is undertaken to ensure consistency of the implementation against that of the model definition.  For physical models solving one or more equation sets, the method of manufactured solutions is used.  For models employing iterative methods or discretized approximations, convergence rate tests are also employed.  Finally, one or more regression tests are defined to track relevant output solutions for each developed model.  These regression tests are integrated within the automatic test framework (Buildbot) to ensure early detection of any changes affecting model output.