/am225_examples

Harvard Applied Math 225: Code Examples

Primary LanguageC++

Harvard Applied Math 225: Code examples
=======================================
Harvard AM225 is a graduate course in scientific computing that covers a
variety of advanced topics in numerical analysis, algorithm design, and
high-performance computing. This course was developed by Chris H. Rycroft
and taught at Harvard during the Spring 2018, 2020, and 2021 semesters.
The main website is now located here:

https://people.math.wisc.edu/~chr/am225

This Git repository contains example codes from the course. The codes are
primarily written in C++ using the OpenMP library for multithreading. Some
additional programs in Python are provided.

Compiling
=========
The programs make use of the GNU Make utility for automatic building. Each
directory contains a "Makefile", which contains the compilation rules for
each program.

Each directory looks for a common configuration file called "config.mk" in the
top level of the repository, which sets the compiler name and various compiler
options.

To begin, you must create a "config.mk" file from one of the templates
provided in the "config" directory. The simplest method is to create a symlink
(shortcut) from one of the templates. On a Linux system, this can be done by
typing:

ln -s config/config.mk.linux config.mk

On a Mac system using GCC 12 installed with MacPorts (www.macports.org), use
the following:

ln -s config/config.mk.mac_mp config.mk

On a Mac system using GCC 12 installed with Homebrew (https://brew.sh), use
the following:

ln -s config/config.mk.mac_hb config.mk

For a custom configuration, copy one of the files from the "config" directory
into the root directory, and then manually edit it.

Once the "config.mk" file is created, change into one of the project
directories and type "make" to compile everything.

Organization
============
The course is divided into six units:

- Unit 0: Introduction and multithreaded programming
- Unit 1: Advanced ODE integration methods and theory
- Unit 2: Advanced numerical linear algebra
- Unit 3: Finite element methods
- Unit 4: Finite volume methods
- Unit 5: Special topics in scientific computing

Each Unit has several different directories with programs within them:

0a_root_finding - Introductory root finding examples

0b_cpp+openmp - C++ and OpenMP examples

1a_ode_solvers - A variety of ODE solvers (RK4, Euler, Ralston, etc.)

1b_extrap+do - Dense output examples and extrapolation solvers

1c_dop853 - The eighth-order Dormand-Prince DOP853 integrator

1d_symplectic - Symplectic integration examples

2a_linking - Small example of linking to precompiled binary object files.

2b_lapack+krylov - Examples using BLAS, LAPACK. Krylov methods applied to a
radial basis function test case.

2c_fft+ddecomp - Fast Fourier Transform and domain decomposition examples

3a_f_element - Finite element examples

4a_f_volume - Finite volume examples. Comparison to finite difference methods.

4b_traffic - Example programs to simulate the traffic equation, a nonlinear
hyperbolic conservation law

5a_fluid_sim - Simulation of incompressible fluids using Chorin's projection
method

5b_lsm_fmm - Level set method and the fast marching method examples

tgmg - An prototype 2D templated multigrid library developed by the Rycroft
group, which is required by the incompressible fluid simulation