PHY 504

Intro & Logistics

  • Getting Started
  • Topics
  • Computation
  • Hello, World

The UNIX Shell

  • Why Use the Command Line?
  • Navigating the Filesystem
  • Create Files and Directories
  • Redirection and Pipes

Git and Version Control

  • Version Control
  • Dotfiles and the Mathlab
  • A Git Walkthrough
  • Git Branches
  • Git Remotes
  • github
  • Pull Requests

Shell Scripting

  • Looping on the Command Line
  • Shell Scripts
  • File Permissions
  • Find and Grep

Introduction to Programming

  • C++ Textbook
  • Computer Hardware
  • Software Development Tools
  • Structure of a C++ Program
  • Helpful C++ Tools / Resources
  • Compiling
  • Editors
  • A First C++ Project

C++ Basics

  • C++ Datatypes
  • Vectors
  • More Vectors
  • Example: Matrix
  • Aside: Sequence Containers
  • Strings
  • auto and decltype
  • Structures
  • Arrays
  • References
  • Pointers
  • Loops and If-Tests
  • Maps
  • File I/O

Functions

  • Functions
  • More Functions
  • Example: Planetary Orbit
  • In Class: 2nd Order Runge-Kutta Orbit
  • Lambda Functions
  • Example: Sorting Planets

Elements of Software Engineering

  • Making the Compiler Do the Work
  • Working with Multiple Files
  • Makefiles
  • In-Class Example: Splitting Up Our Orbit Code

Classes

  • Introduction to Classes
  • Object-Oriented Design
  • In-Class Example: A Simple Grid
  • Example: Mathematical Vectors
  • In-Class Example: Orbit Integrator Class
  • Example: Multidimensional Contiguous Array

Some Random Bits...

  • Preview: C++23 mdspan
  • Preview: C++23 enumerate and zip
  • enum
  • Casting
  • I/O Manipulators
  • Preview: C++23 Print
  • Filesystem Library
  • Operators
  • Floating Point
  • Floating Point Exceptions

Testing

  • Testing
  • Unit Testing
  • Continuous integration and github
  • Convergence Testing
  • Valgrind
  • Debugging
  • clang-tidy

Digging Deeper into C++ Classes

  • Inheritance and Access
  • this
  • Copy, Assignment, and Destructors
  • Compound Assignment Operators
  • In-Class Example: Orbit Integrator Compound Operators
  • Move Semantics
  • Allocating Memory
  • Example: A Simple Container

Documenting Code

  • HTML + CSS
  • Github Pages
  • Doxygen
  • Sphinx
  • Sphinx + Doxygen

Templates

  • Templates
  • Example: Templated Array
  • More On Templates
  • constexpr
  • Function Objects

Some Numerical Algorithms

  • Root Finding
  • Monte Carlo Methods
  • Adaptive Runge-Kutta
  • Poisson Equation and Relaxation

Parallel Programming

  • Introduction to Parallel Programming
  • OpenMP
  • OpenMP Poisson Relaxation
  • OpenMP Monte Carlo \(\pi\)
  • MPI
  • MPI Send and Receive
  • MPI Linear Advection Equation

Calling C++ from Python

  • pybind11
  • Passing a NumPy Array into C++
  • Vectoring a C++ Function
  • Returning an Array to Python

To Be Continued...

  • Stuff We Didn’t Cover
  • Coming in C++20
  • Coming in C++23
  • Some C++ programming terms

Homework

  • Homework 1
  • Homework 2
  • Homework 3
  • Homework 4
  • Homework 5
  • Homework 6
  • Homework 7

Project

  • Final Project
PHY 504
  • Search


© Copyright 2022-2024, Michael Zingale.

Built with Sphinx using a theme provided by Read the Docs.