Coding

I have experience with a variety of different programming languages, which started with the simpler IDL (interactive data language) and MATLAB languages meant for data analysis leading to Python and Fortran and a variety of relatively random for-fun experiences in languages such as Haskell and Julia.

My research is based on plasma simulations using the two simulation codes, GTC & ANC, as described below. I have also worked on a one and “two-halves” dimension PWFA code and the EPOCH code, both designed for laser-plasma interactions. For data analysis, I have a clear fondness for IPython and the Jupyter notebook interface.

I’ll post some of my analysis scripts here soon. You’ll find scripts for analysis of GTC simulation data, of ANC simulation data, of the plasma-wakefield-1D data,of the nonlinear 3d gyro-kinetic slab geometry code data, and more. Repositories of my scripts and our codes can also be found on https://bitbucket.org/iamcalvinlau/

This page will be updated with clearer links. Please check back soon!


GTC (Gyrokinetic Toroidal Code)

titan_hour_combined
The amount of computing hours I personally used on Oak Ridge’s Titan supercomputer in 2014.

GTC is a “first-principles” plasma turbulence simulation code written in Fortran, initially written by my advisor, Zhihong Lin, about twenty years and many, many publications ago. This code has been extensively used for microturbulence, energetic particles, magneto-hydrodynamics (MHD), neoclassical effects, and RF heating/current drive by GTC users and physics-collaborators located in Irvine, San Diego, Princeton, Oak Ridge, China, and more. Currently, GTC is mainly developed by the GTC group at the University of California, Irvine with code-collaborators at Peking University, Princeton University, and Oak Ridge National Laboratory.

My development work on GTC has mostly involved upgrades to allow simulations of the field-reversed configuration (FRC) geometry. Initially, our FRC simulations solved the Poisson equation using finite difference which turned out to be pretty inefficient for our purposes at the time (Fulton 2015, see publications). Taking advantage of the FRC geometry, I modified GTC’s solver to solve the Poisson equation with a semi-spectral method as well as some domain modifications. This dropped my computing usage from rough about twelve million computing hours per month to about a half million computing hours per month.


ANC (A New Code)

field_aligned_mesh
An example of the field aligned mesh.

ANC is also a “first-principles” plasma turbulence simulation code written in Fortran. It was initially developed by Daniel Fulton, an alumni of our GTC group, and Ihor Holod, a scientist formerly with our GTC group. The main reason for the development of ANC is due to the Boozer magnetic coordinate system which GTC is based on. The Boozer coordinate system, while more efficient for plasma simulations inside the last-closed-flux-surface AKA the separatrix, cannot allow for simulations across the separatrix. However, the regions inside and outside of the separatrix are tightly coupled in the FRC and so ANC was developed using cylindrical coordinates to allow for turbulence simulations across the separatrix.

I began collaborating with Daniel on the development of ANC this year (2016), and we’ve since re-written the Poisson solver, added the drift-kinetic electron model and the fully-kinetic ion model, implemented a divergence-free magnetic field model, and much more. We also have recurring assistance from scientists of our current GTC team, Jian Bao and Animesh Kuley. With my previous experience working on GTC and driftwave simulations, I was able to help immediately with developing ANC, especially with crafting good benchmark cases to speed along the development process.


PWFA (Plasma Wakefield Acceleration)

A simulation result from PWFA showing the difference in the response of mobile and immobile ions when a laser propagates through the plasma (that is, the formation and non-formation of a plasma wakefield).
A simulation result from PWFA showing the difference in the response of mobile and immobile ions when a laser propagates through the plasma (that is, the formation and non-formation of a plasma wakefield).

PWFA is a “one-and-two-halves-dimension” (x, vx, vy, vz) serial code capable of electromagnetic nonlinear dynamics with fully kinetic particles that was initially written by K. Nagata, then further developed by myself in 2014. This was the first Fortran code I really did extensive coding with, including modifications that eased parameter scans and parallelized the simulations to run more efficient on our campus HPC cluster. After the development work I did on PWFA, I used it to study the physics of ponderomotive acceleration in ultra-relativistic regimes (Lau 2015, see publications). I have also used it as a way to help introduce students to computational plasma physics (and, especially, particle-in-cell codes), but I’m actually slowly writing a very transparent Python version of this to be an even better teaching tool.


EPOCH (Extendable PIC Open Collaboration)

An EPOCH 2D-simulation of an intense laser driving a wakefield.
An EPOCH 2D-simulation of an intense laser driving a wakefield from one our early tests for the betatron radiation research.

EPOCH is a particle-in-cell (PIC) code developed by University of Warwick and is capable of up-to-3D electromagnetic nonlinear simulations with fully kinetic particles. It is a fantastic and well written code that is easy to use and easy to read. In 2015, we (a team of graduate students under the direction of Toshi) began using this code for the investigation of betatron radiation driven by intense lasers and energetic beams in astrophysical regimes (Farinella 2016, see publications).