Plasma physics: multidisciplinary science at the frontier of knowledge
The physics of plasma is rich area of physical science. The simplest models combine fluid dynamics, electromagnetism and statistical mechanics. However, the wealths of plasma resides in the interaction of complex systems, strongly coupled and responding quite rapidly to changes and instabilities. The physics of plasma goes beyond the simple science of electrons and ions interacting via Coulomb collisions. It also grapples with nuclear synthesis and quantum mechanics.
All we see in the sky, from stars to galaxies, is plasma. Yet plasmas are poorly understood. Further, we are now facing a new era of plasma physics where the physics of highly dense material is driven by quantum mechanical affects. This new science offers new directions to study in high energy density plasmas. The physics of plasma is a difficult topic because it couples different areas of physics, across many different geometrical and temporal scales. At the largest scale, It combines fluid mechanics electromagnetism and radiation. As scales become smaller, temporal behaviors are also compressed. At this level, kinetic effects become important and anisotropic. When this happens, the fluid approximation breaks down and kinetic theory has to be used.
Developing an intuition in plasma physics.
We will use python to test different models describing the physics of plasma in many different regimes. To make most of the this you need to follow the guidelines listed below:
Besides plasma physics, you will learn how to use one of the most exciting, simple and efficient tools used by scientists and engineers today: namely python. This is a very high level language (i.e. more bang for your code) that has an immense user-based community. The reason almost everything you think about coding as already been coded and is available in python. It does not mean that this class has its entire set of problems on the Internet. Unfortunately, NO!. But most of the basic tools you will need to succeed this class is pretty out there already.
Python is really the remedy against reinventing the wheel. Yet, it does not mean that you should ignore how the wheel work. In fact, reinventing the wheel is a good exercise to develop your own skills, by learning to do simple things first!
Python is a scripting language that can be used very effectively to analyze data, and possibly to solve problems. However, python is very slow because it is a high level language, that is far removed from what a computer can use to do fast, efficient computations.
Unlike Fortran or C++, python makes a lot of assumptions about the coder, you, did not write. It is short for you to write and python does the big job of turning your "prose" into a code that the computer can understand. Well that comes at a cost: speed! Python can be turned into efficient code one way or another. But, ultimately, this is a cumbersome process for Python. But it's great for you!
So, see Python as an entry point to the world of computing, a free alternative to MATLAB or Mathematica.
The lectures will use notebooks to present and discuss different aspects of plasma physics. To fully benefit from the course, students should consider each lecture as a workshop. Bring your laptops in the lectures and let's code plasma physics together.
Towards the end of the semester, you will have to pick a project and present it to the whole class during the last two lectures, at the end of the semester.
We need to update our environment first. Update Anaconda from root prompt. In the Anaconda Navigator, click on Environments, choose root, then Open terminal from the drop down menu. Then type
conda update -n root conda. After, do a full update using
conda update --all. Make sure you have updated the notebook
conda install -c anaconda notebook.
As Anaconda, Python has its own updater, pip. You can use it to install (much faster) several important packages.For instance, you can install a spellchecker and line numbering tool with
pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable
pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
And let's add a slide capability for your final project!
pip install RISE and then
jupyter-nbextension install rise --py --sys-prefix. If you have a version of Jupyter older than 5.3.0 (please don't) then add
jupyter-nbextension enable rise --py --sys-prefix. RISE's documentation can be found here
In the Anaconda Nagivator, go to Environments, and search for the package Mingw in the top menu. Choose not installed. Mingw should appear on the screen. Add it to the list and click Apply
"Python is an interpreted high-level programming language for general-purpose programming. Python has a design philosophy that emphasizes code readability, notably using significant whitespace. It provides constructs that enable clear programming on both small and large scales." from Ref. 1). In other word, use python when you want to be readable and don't mind some inefficiencies associated with improved readability.
We use python in class because readable code is good when you are learning. And it is pretty quick to learn Python! It has a huge amount of libraries. it's a gift because almost anything you can think of has been done in Python. But it is also a curse because it steepens the learning curve.
We will learn Python as we go. I estimate that you will be Python enthusiast by lecture 5. In the mean time search for cheat sheets. Here is a set of good ones.
"NumPy is the fundamental package for scientific computing with Python. It contains among other things:
Besides its obvious scientific uses, NumPy can also be used as an efficient multi-dimensional container of generic data. Arbitrary data-types can be defined. This allows NumPy to seamlessly and speedily integrate with a wide variety of databases." from Ref. 2 And there is also a good cheat sheet for NumPy.
© Pierre Gourdain, The University of Rochester, 2020