Competencies for an Undergraduate Degree in Computational Physics
This is a draft of a set of competencies for an undergraduate bachelor degree in computational physics. They have been reviewed by a number of physicists interested in this topic. Not everyone who participated in the review fully agreed with all aspects but this draft represents a reasonable consensus on what students need to know.
The competencies and skills outlined are only for the computational part. We assume that the students will also learn the standard canon although presumably in a somewhat different (i.e. computational, context). People will no doubt have suggestions for changes/additions and deletions. Items marked with a * are optional/advanced topics that may not be included in all programs. The Competencies listed below are appropriate for programs that offer a degree in Computational Physics. Most departments will not be able to do this. Programs that offer a minor or certificate in computational physics will of necessity have to make choices about what topics to omit. Departments that offer only a single course in Computational Physics will have to make hard choices about what to include. However it is sometimes possible to weave computation into the standard undergraduate physics curriculum even when you do not have the luxury of teaching dedicated computational courses.
These competencies are meant to be a guide, not a prescriptive canon. They should be used, as a starting point for thinking about what students should learn from a computational physics program.
In order to be successful either in graduate school or industry a student with a degree in computational physics should be able to tackle unfamiliar computational problems with some degree of confidence and independence. To achieve this requires a skill set that goes beyond simply knowing how to integrate numerically a differential equation. Students should have a skill set (call it "meta-skills") that includes:
- Knowing what can be computed and what cannot.
- The ability to extract physics from the results of a computation. After all, the point of computation is scientific insight not computation.
- Validation and Verification: Is the model being solved correctly? If the model is not exact is it good enough for the problem at hand? Are there special cases that can be checked and have they been checked? How accurate are the results? How accurately do we need the results to be for the problem at hand? How else can we check the code?
- How does the computation scale, i.e. how does the CPU time change as the number of cores, amount and types of memory, and number of CPUs are increased?
- Knowing how to communicate the results in a clear and professional manner.
- Knowing how to document code so that others can understand, use and extend it.
- Knowing how to write modular code and understand why this is important.
- Understanding the importance of "time to science". In other words, when should you spend time rewriting your code to run on a GPU or in parallel or with a faster algorithm, and when should you just be willing just to wait longer for a result.
Students also need what we will call high-level skills. These are less overarching than the "meta-skills" but are broader and conceptually more general than any specific topic or algorithm.
"High-level skills":
- Changing from dimensionless "computational units" to physics units and from physical units to dimensionless units.
- Knowing how to estimate the accuracy of solutions for real world problems.
- Awareness/Insight into picking an algorithm suitable for the problem. Understanding the limitations of the algorithm. Understand that all algorithms have limitations.
- Understanding accuracy and precision and the difference between them.
- Knowing how to figure out where your code is "spending its time", and knowing where it is worth spending your time to speed up a code.
In our experience students have a hard time acquiring both the meta-skills and the high-level skills and these have to be emphasized throughout the curriculum.
Topics:
Topics should when possible be taught in a physics context. The physics topics listed are meant to be suggestive not prescriptive. No one will teach all of the listed topics and everyone will teach some topics that are not in the list. Different institutions will no doubt teach different topics even if the computational topics are the same and a single physics topic may span multiple computational topics. For example the solution of the Laplace equation by finite differences might include a discussion of solutions of systems of linear equations, sparse matrices, and visualization. The list of topics here is minimal. The goal is to develop students that can apply their computational skills to unfamiliar physics problems and learn new numerical methods when needed.
Topics:
-
* Computer arithmetic and errors
- *Physics Topics examples: Error accumulation in upward and downward recursion of spherical Bessel function; accumulation of error in internal reflections within a sphere.
-
Linear Algebra of real and complex matrices
- Solutions of systems of linear equations
- Eigenvalues and eigenvectors
- *Sparse vs. normal matrices
- Physics topics examples: Normal modes of coupled oscillators, solution of Laplace's equation, Standing Waves on a drum by finite differences
-
Numerical Integration
- Low dimensional Integrals: Simpson plus at least one other method
- High Dimensional Integrals: Monte Carlo method
- Physics topics examples: The finite pendulum, diffraction, matrix elements in QM for low dimensional integrals.
-
Numerical Differentiation
- Finite Differences
- Numerical Differentiation of noisy data
- Physics Topics examples: Laplace's Equation, numerical differentiation of data from a physics lab
-
Numerical Solution of Ordinary Differential Equations
- Methods: Euler, Verlet and Runge-Kutta, Symplectic vs. Non- Symplectic. Note: Symplectic vs. Non-Symplectic is an advanced topic which many programs will omit.
- Types of ODE's: Initial value problems, boundary value problems, eigenvalue problems
- Physics Topics examples: Celestial Mechanics, Chaotic Systems, The Schrödinger equation, Molecular Dynamics
-
Numerical Solution of Partial Differential Equations; types of problems and boundary conditions
- Finite Difference
- Physics Topics examples: Solution of Laplace, diffusion/heat equation, Wave Packet Dynamics
- * Finite Elements
- Physics topic example: Poisson Equation
- * FDTD
- Physics topic example Solution of Maxwell's equations in either one or two spatial dimensions.
-
Numerical Root Finding
- Newton, bisection
- Secant Method
- Physics Topic examples: Finite square well. Wave on a circular drum, roots of Bessel functions
-
Monte-Carlo Methods
- Physics Topics examples: One and Two Dimensional Ising Model. Simulations of fluids such as hard spheres, hard disks, and Lennard-Jones models as well as percolation models. Random walk, spontaneous decay simulation
-
Fourier Transforms
- Physics topic examples: Spectrum of data from labs, power spectrum of a chaotic system
-
Fourier Series, discrete Fourier transform, fast Fourier transform
- Physics topic example: Waves on a string
-
Curve fitting including log-log and log-linear scales
- Physics Topic examples: Fitting real data from labs and/or public available data (NASA/CERN and so on) or data generated from undergraduate research
-
Visualization
Emphasis should be on using visualizations to understand the physics/mathematics of the problem
- Physics topics: Almost all
-
Symbolic Mathematics
Students should know a symbolic language such as Mathematica, Maple or Sage.
- Physics topics: Throughout the curriculum as appropriate.
Although not listed above, students should also know:
- The basics of a UNIX/LINUX operating system as well as a windows based system (i.e. Windows or OS X or similar)
- Know how to run a batch job
- A compiled language such as C or Java or Python
- Latex
- How to use and create numerical libraries
- * Experience with version control, such as Git
- At some point students should also do a computational project of respectable length and complexity. This could be a summer research project or a senior thesis or capstone project. Such an arrangement is congruent with the overall undergraduate computational science competencies.
-
Although the physics topics listed are not meant to be prescriptive it is probably true that
there are some physics topics so important that every student should see them. We suggest that
these are:
- Numerical solutions to the Schrödinger equation
- Numerical solutions to the Ising model
- Numerical solutions to the Laplace equation
- Heat Equations
- Wave equations
- Numerical solutions to Maxwell's equations, at least in one dimension
- A chaotic system
- Fourier Series and the idea of expansion in orthogonal functions and implication of a limited number of data measurements.
- Analysis of real data