Starting in the spring 2013, I videotaped the lectures for my MATH 676: Finite element methods in scientific computing course at the KAMU TV studio at Texas A&M. These are lectures on many aspects of scientific computing, software, and the practical aspects of the finite element method, as well as their implementation in the deal.II software library. Support for creating these videos was also provided by the National Science Foundation and the Computational Infrastructure in Geodynamics.
The videos are part of a broader effort to develop a modern way of teaching Computational Science and Engineering (CS&E) courses. If you are interested in adapting our approach, you may be interested in this paper I wrote with a number of education researchers about the structure of such courses and how they work.
Note 1: In some of the videos, I demonstrate code or user interfaces. If you can't read the text, change the video quality by clicking on the "gear" symbol at the bottom right of the YouTube player.
Note 2: deal.II is an actively developed library, and in the course of this development we occasionally deprecate and remove functionality. In some cases, this implies that we also change tutorial programs, but the nature of videos is that this is not reflected in something that may have been recorded years ago. If in doubt, consult the current version of the tutorial.
Lecture 2.91: A (very brief) introduction to Linux. Part 2: Compiling programs
Computational science is, at a fundamental level, about developing and implementing algorithms and data structures — in other words, you can't avoid the need to do some programming.
This lecture is an overview of what actually happens when you compile a program. In particular, I talk about the two stages of building an application: compiling individual source files into "object" files and linking multiple object files into an "executable". I demonstrate this using a very simple program, including the kind of error messages you may get from either.
In practice, one does not issue the compile instructions by hand every time a file has been modified. Rather, one uses programs that automatically track which files need to be re-compiled. The classical choice for this is the make tool. I briefly show how it is used. It has a rather clumsy syntax and few people today write make scripts by hand, but it demonstrates the general principle behind any of the alternatives. In particular, one can generate make scripts from the CMake tool we use in deal.II; likewise, CMake allows to generate scripts similar to those used by "make" for Integrated Development Environments such as Eclipse or Visual Studio, as we will show in later lectures.
Note: The excellent Software Carpentry project also has an excellent lesson on make and the automation this tool allows.
Slides: click here