Physics 261: Computational Physics: Spring 2023
(*using the julia programming language)

Course Information

Physics 261 is a three credit laboratory course which meets for 6 hours/week. This course is designed to be taken by physics majors in their second semester, and it typically taken concurrently with Physics 123. Because our physics curriculum integrates computational throughout all our upper level courses, it is essential to take this class before advancing to any other 200+ level physics courses. 
This course is project based, and students are not expected to have any prior programming experience. Although prior versions of this course have used python, we are now teaching and advocating the Julia Programming language, due to its improvements in speed, its ability to use unicode characters as variables, and its use of multiple dispach. 

Learning Goals

By the end of the semester, you will have experience with:

  • The Bash Shell (basic commands like ls, cd, mv, rmdir, etc)

  • Logging into a JupyterHub server and using the Jupyter Lab  interface

  • Learning how to install and maintain a working Julia distribution on a personal computer

  • Uploading data, Julia notebook files to the server

  • Learning the basic data types and control structures in Julia

  • Reading in and writing data files in multiple formats

  • Become proficient in using Markdown syntax and incorporating basic LATEX code to typeset mathematics.

  • Become proficient in technical written communication.

  • Learn how to use the Euler, Euler-Cromer, Verlet, and Runge- Kutta methods for solving ordinary homogeneous and inhomogeneous differential equations.

  • Using simulation to solve random systems (randomwalks in 1 and 2D, percolation theory)

  • Use Julia to read in data, make technical plots, perform fits to the data, as well as the uncertainties in the fit parameters.

  • Simulate the motion of simple systems such as projectile motion, planetary motion (with and without air resistance)

  • Explore the behavior of chaotic systems such as a driven non-linear oscillator)

  • Work together on a team to solve a larger programming project.

  • Walk away from class with a computational toolset that can be used for all further coursework, and provides a framework of understanding relevant to a STEM Career and further scientific work.

Computing in this course

I have two Recommendations for running Julia.
Option 1:
Every student will be given a JupyterHub account on the Physics Department’s Linux Server; this System76 Linux server has two 10-core processors, 256 Gb of Ram, and a GeForce RTX 2080 Ti GPU with 4352 CUDA cores. Your server login will be your university email address (not including the @maine.edu part) and your normal password. The server can be accessed with any web browser, so you can use a laptop, a tablet, or even your phone (this last option is obviously less than ideal, and highly discouraged)
Option 2:
Run Julia on your own computer. I will show you how to do this in class.
If you’re in the nice position of being about to purchase a new computer, I strongly recommend using either the Mac OS or Linux (System 76 has excellent Linux laptops and desktops).