The goals of this class are modest in terms of depth but ambitious in terms of breadth. The class will contain topics from computer science as well as from applied mathematics. At the end of the class you should be familiar with some new tools allowing you to better tackle future projects involving scientific computing.
Basic Linux / Unix Version control - GIT Basic scripting - Perl / Python Fortran Hardware and programming models The topics may not be covered in order or in a ‘’two steps forward one step backward fashion’‘
Parallel programming Associated metrics - scaling - efficiency OpenMP - shared memory MPI - distributed memory Time permitting we will do a little bit of CUDA
How to numerically solve ODEs / PDEs ODE solvers: Runge Kutta - multistep methods Evolution equations Wave propagation problems (acoustics, Electro-magnetics) Finite difference methods Discretization on curvilinear grids
Basic calculus, chain-rule, Taylor-expansion Manipulate logarithms and exponential (order of accuracy / convergence) Basic ODE, make sure you can solve \(y'= \lambda y, \, y(0) = y_0\)
Basic programming skills Programming experience in some language (Matlab, Fortran, C, C++, etc.) Understand the structure of a program Subdivision into smaller problems Understand and use do and while loops and conditional statements
You will need access to a computer with a Linux/Unix operating system You will also need to be able to install software on that system (if it does not have it already) linux.unm.edu is one option, a personal computer with some Linux distribution or a Mac with the developer tools installed are two other options. For the parallel computing projects we will use XSEDE resources (Stampede at TACC)
ssh into linux.unm.edu Get the class repository Correct the first page using an editor Compile and check the results Commit Push