  # Developer Training

#### Modules

ModuleContentsExercises
1: The first Diffpack encounter

2h lecture and 1h exercise

Connecting yourself to Diffpack, "Hello World!" programs, a 1D heat conduction problem, a 1D wave equation, curve plotting. Ch. 1.1, 1.2.2-1.2.5, 1.3.2-1.3.4, Appendix B.2.1. Type a "Hello World!" program.
Exercise 1.4.
2: Intro to C++ programming

1h lecture and 1h exercise

Dissection of a simple C++ class (MyVector) for representing vectors; constructors, inline functions, overloaded operators, the const concept, the C/C++ preprocessor, arguments passed by value and reference. Ch. 1.5.2. Exercises 1.9-1.11.
3: Intro to object-oriented programming (OOP)

2h lecture and 1h exercise

Motivation for the object concept, outline of C++ classes, inheritance, virtual functions. Examples: programming with various matrix formats, designing an ODE solver environment, grid and field abstractions, a PDE solver coded as a class. Ch. 1.5.1, 1.5.3-1.5.5, 1.6.1. Exercise 1.17.
4: Intro to finite element programming

2h lecture and 1h exercise

A very simple Poisson equation solver in 2D (class Poisson0); explanation of each function. Ch. 3.1. Extend class Poisson0 to a 2D convection-diffusion (CD) solver (with constant velocity), u=0 on the boundary and a constant source term.
5: Visualization support and the Diffpack menu system

2h lecture and 1h exercise

Recoding class Poisson0 with more flexibility: class Poisson1. Operating and coding with the menu system, "space-dimension-independent" code, storage of fields, visualization of fields. Ch. 3.2-3.4. Repeat the previous exercise with class Poisson1 (put the velocity components on the menu). Visualize the solution field in Plotmtv, Vtk, Matlab etc.
6: Finite element programming tools

1h lecture and 2h exercise

Representing boundary condition information, line/surface integrals, simple mesh generation tools, debugging, automatic report generation, using OOP to extend or specialize a simulator. Ch. 3.5. Repeat the previous exercise, but implement the solver as a subclass of ReportPoisson2. Generate a non-trivial geometry, introduce an "outflow" boundary with Neumann conditions, and visualize the simulation results.
7: Time-dependent finite element problems

1h lecture and 2h exercise

Heat equation solvers as a minor extension of the Poisson equation solvers, class TimePrm for time data, visualization of time-dependent data. Ch. 3.9-3.10. Exercise 3.11.
8: A fast wave equation solver

1h lecture and 1h exercise

Increasing the efficiency by precomputing components of the linear system, application to a 1D/2D/3D wave equation in general geometries, the field concept, restarting simulations. Ch. 3.11. Exercise 3.14-3.15.
9: Nonlinear problems

1h lecture

A nonlinear heat equation as a simple extension of a linear heat equation, successive substitutions and Newton-Raphson iteration. Ch. 4.2.
10: A solver for 2D/3D thermo-elasticity

1h lecture

Definition of the PDEs in the linear thermo-elasticity problem, finite element discretization, implementation of a vector equation in Diffpack, computation of derivatives (stresses). Ch. 5.1.
11: Solving systems of PDEs by assembling independent solvers

2h lecture and 2h exercise

If a system of PDEs can be solved by a sequential approach, Diffpack offers tools for combining existing solvers (e.g. Poisson eq. solvers, convection-diffusion solvers, elasticity solvers etc.) to build a solver for the system without modifying the original codes. Ch. 7. Coupling of thermo-elasticity and transient heat conduction.
12: Advanced Diffpack Toolboxes

1h lecture

Overview of the Adaptivity Toolbox, plus the upcoming Multigrid Toolbox, Domain Decomposition Toolbox and the parallel-Diffpack Toolbox. Each of these toolboxes can be incorporated in existing solvers by about 10 lines of extra code.
13: Two finite element Navier-Stokes solvers

1h lecture

An implicit Navier-Stokes solver based on the penalty method and an efficient explicit solver based on velocity correction. Ch. 6.3 and 6.5.
14: Tools for representing and solving sparse linear systems

1h lecture

Overview of vector and matrix storage formats, abstractions for linear systems, preconditioners, and linear solvers. Examples on the use of these abstractions in finite difference solvers for the Poisson equation. Appendix D.