Please consider helping us improve by answering our 3 question survey.

### NOTE: This proxy app is currently UNSUPPORTED and EXPORT CONTROLLED (EAR99)

## Introduction

Mulard is a mini application that solves the multi-group diffusion equations coupled to a material energy equation – a common approximation used in multi-physics hydrocodes. In this approximation, anywhere between one and hundreds of diffusion equations for the radiation energy at different photon frequencies are coupled to each other through a material energy equation. Each of the group diffusion equations comes from discretizing the photon energy dependence.

Mulard implements a finite-element discretization on an unstructured mesh for the coupled, implicit diffusion solves. The amount of matrix data needed to solve the tens to hundreds of coupled diffusion equations can be very large, but the related nature of the group matrices presents new opportunities for optimization not possible when optimizing a single implicit diffusion solve.

## About the application

This mini-app is a little heavier weight than many others. The idea behind this is to preserve a little more of the complexity and limitations of a production code that aren’t present in some of the smaller mini-apps. In particular, several features are kept to increase the code complexity more representative of that required by the production codes. These include:

- Abstract material properties and problem setup and several test problems are supported.
- Multiple, related and coupled diffusion equations are solved together.
- The spatial order of the discretization can be changed.
- The visualization files can be written.
- Many of the code abstractions parallel the mathematical operations, allowing more rapid code development.

A secondary goal in creating this mini application is to provide a useful vehicle for doing research on numerical methods used to solve this physics. Specifically, the new feature not seen in production codes is the ability to change the discretization order; this has the potential to increase the computational intensity needed per byte, which might be needed on future platforms.

Mulard is designed to explore the intra-node parallelism techniques that we expect to be needed in the future. This includes programming paradigms such as CUDA, OpenCL, threads, and transactional memory features. Currently, Mulard is only a serial application, although there are plans to extend it to use MPI.

Mulard also includes in its distribution a mini-mini-application, Hatchling, which solves a simple, steady-state diffusion equation using the same discretion as the multigroup, time dependent problem. This is a good place to start if want to become familiar with our implementation of the finite element method before diving into the more complex case.

## Other information

Mulard requires one third party library MFEM. This library handles the mesh and finite element infrastructure, but is small enough to be easily modified itself.

## How to cite this work

@misc{MulardProxyApp,

author = {Thomas A. Brunner},

title = {{M}ulard: {A} {M}ultigroup {R}adiation {D}iffusion {P}roxy {A}pplicaiton},

howpublished = {\url{https://codesign.llnl.gov/Mulard}},

note = {{LLNL}-{CODE}-574952},

year = {2012}

}

## Publications

- A tutorial on proxy applications was given at Supercomputing 2012. Here is the link to that presentation.
- There is a short summary of the code and its equations here.

## Similar projects

MFEM itself has several example drivers that are at a slightly higher level than even Hatchling.

The Mantevo project from Sandia National Laboratory includes a mini-applicaiton called MiniFE, which also solves a diffusion equation using a finite element method.