Chapter 1: Introduction

DAGH (which stands for Distributed Adaptive Grid Hierarchy) was developed as a computational toolkit for the Binary Black Hole NSF Grand Challenge Project. It provides the framework to solve systems of partial differential equations using adaptive finite difference methods. The computations can be executed sequentially or in parallel according to the specification of the user. DAGH also provides a programming interface so that these computations can be performed by traditional Fortran 77 and Fortran 90 or C and C++ kernels.


Motivation for the tutorial

DAGH was developed as a programming infrastructure to support the solutions of partial differential equations, that arise in general relativity, using an adaptive mesh refinement method. It became apparent very soon that it could be used in other disciplines as well. Thus there was a need to explain the conceptual frame work of DAGH and give guidelines on how to use it. A tutorial introduction to the use of DAGH annotated with examples follows.


Goals of the tutorial

The goals for the tutorial are:

After you have gone through this tutorial you will be able to write a driver for DAGH and run it in either sequential or parallel mode.


Layout of the tutorial

In Chapter 2 we explain the motivation behind adaptive mesh refinement (AMR) and briefly discuss the concept of AMR. We illustrate the use of adaptive mesh refinements in Chapter 3 through the Berger-Oliger algorithm. We give a sketch of the algorithm and the data structure they suggest using.

DAGH is introduced in Chapter 4. We give a conceptual overview of DAGH, the structure of DAGH based code, and the interface that DAGH provides to applications.

The transport equation, our working example, is defined in Chapter 5. We include a segment of Fortran 90 code that traces the evolution of this equation. We start with a single grid and a single processor. We analyse the structure of the driver and the makefile needed to run it. We discuss the input parameters and output data for this run. We then show what changes are required to run this example on several processors. Finally we analyse an adaptive mesh refinement version of this driver that is run on several processors.

Our simple example does not cover all the classes and functions that are available in DAGH. For more complex problems you may need a larger set of classes or functions. Though, not a part of this tutorial we provide an annotated glossary of all the classes, terms, and interfaces that are available.


Next chapter: Adaptive Mesh Refinement

Return to: Table of Contents