Codes from my Numerical Methods ClassThere are a number of examples of various methods (mostly in python) on my course webpage: Numerical Methods for (Astro)Physics. Some of these are repeated below.
Simple Numerical PDE Examples
Godunov methods for linear advectionA simple second-order accurate finite-volume method for the linear advection equation in one-dimension. A choice of reconstruction is provided: Godunov (piecewise constant), Piecewise Linear, and Piecewise Parabolic (PPM). This advects the initial condition through a periodic domain. The code is structured to with the subroutines you would find in a typical hydrodynamics code. Sample output showing a tophat advected for 5 periods with 128 zones.
A python version (without ppm) is available on my github page:
2nd order finite volume method for Burgers' equationA simple Fortran second-order accurate finite-volume method for the 1-d Inviscid Burgers' Equation:
ut + [1/2 u2]x = 0
A choice of limiters is provided, and periodic BCs are implemented. The code is structured to with the subroutines you would find in a typical hydrodynamics code.
An alternate python version is available on my github page:
Viscous Burgers' equation solverSolve:
ut + [ 1/2 u2 ]x = ε uxx
using a second-order Godunov method for advection and Crank-Nicolson implicit diffusion for the viscous term. The two processes are coupled together.
Multigrid examplesA simple python class for solving 1-d Poisson and constant-coefficient Helmholtz equations on a finite-volume grid. The driver program (mg_test.py) solves uxx = sin(x), u(0)=0, u(1)=0. The discretization is second order (mg-converge.png).
multigrid solver github page
Also see pyro for a 2-d solver.
DiffusionSimple 1-d second-order explicit and implicit diffusion codes. The implicit code uses a Crank-Nicolson time discretization and the banded matrix solver from SciPy.
Also see pyro for a 2-d solver.
φt = κ φxx + (1/τ) R(φ)
using Crank-Nicolson diffusion and Strang-split reactions. This setup gives rises to a spreading burning front.
pyro: hydro by exampleA tutorial code and set of notes to introduce new students into computational hydrodynamics. The (mostly) python code implements 2-d solvers for linear advection, compressible hydrodynamics, multigrid, implicit diffusion, and incompressible hydrodynamics.
The code and documentation can be found on the pyro website
hydro1d: a 1-d compressible hydro solverA simple 1-d compressible hydrodynamics code that implements piecewise constant (Godunov), piecewise linear, and piecewise parabolic (PPM) slope reconstruction in a finite-volume framework. Some simple test problems (e.g. Sod) are included.
Castro: an AMR parallel hydro codeCastro solves the equations of compressible hydrodynamics using a dimensionally unsplit PPM method, includes reactions, support for a general equation of state, and self gravity, and uses an adaptive mesh refinement integration strategy with subcycling in time. Castro is developed primarily by my collaborators at CCSE/LBL (I've hacked a bit on the hydro and microphysics). Castro is open-source and distributed can be cloned/forked from its github page.
Maestro: low Mach number stellar hydroMaestro is optimized to solve low speed convective flow problems in tight hydrostatic equilibrium. A full description can be found on the Maestro page. Maestro can be cloned/forked from its github page.
OpenMP Relaxation Solver of Poisson's EquationSolve the 2-d Poisson equation with pure relaxation (we do a fixed number of iterations). This is parallelized with OpenMP.
MPI Relaxation Solver of Poisson's EquationSolve the 2-d Poisson equation with pure relaxation (we do a fixed number of iterations). This is parallelized with MPI, doing a one-dimensional domain decomposition in the x direction.
Parallel I/O TutorialA simple parallel I/O tutorial showing various ways to output data from a parallel hydrodynamics code into a single HDF5 file.
Python interface to JINA ReaclibAn object-oriented interface to the JINA Reaclib nuclear reaction rates.
Other Numerical Examples
Matplotlib ExamplesSome useful bits for matplotlib that I've used.
Monte Carlo Demo (Poker Odds)A simple demonstration of Monte Carlo techniques—computing the odds of the different hands in a straight 5-card poker game.
Simple Backup ScriptA simple script for automatically backing up several directories in your home directory to another disk mounted on your local system. To have this run automatically, set it up as a cron job.
Fortran Makefile Dependency GeneratorA simple simply python script to generate dependency pairs for Fortran 90 source files for use in makefiles.
ApJ Submission FormatterA simple python script that takes a LaTeX ApJ manuscript and renames all the figures (both in the file and on disk) to conform to the f1.eps, f2.eps, ... naming convention that ApJ wants. Use at your own risk--this is still beta quality. See the notes contained within.
Research JournalA python script to manage a research journal / logbook in LaTeX. It is distributed (uses git under the hood), so you can use it on all of the machines you work on and keep things in sync, and it is commandline driven, so the barrier to entry to make a journal entry is very low. It supports images in an entry, editing previous entries, and has simple sub-commands to build and display your PDF journal.
Makefile ExamplesMakefile examples of increasing complexity, showing how to use macros, the clean target, file interdependencies, debug/production builds, debugging the makefile itself, and storing the git hash of your project into your source code at build time.
mencoder WrapperA simple python script that can be used to convert a series of PNG images into AVI and MP4 movies (with MPEG-4 encoding). Supports doubling frames and adding some extra frames at the end. The mencoder options picked seem to be supported on most platforms.