Plasma Physics and Scientific Computing Blog

Our blog features regular articles on numerical methods for plasma and rarefied gas simulations. Subscribe to the newsletter to avoid missing any articles. Interested in publishing your own research? Send us an email.

2020 Papers

The purpose of this post is to summarize papers published, or at least drafted, in 2020. Published Zolotukhin, Daniels, Brieda, Keidar, “Onset of the magnetized arc and its effect on the momentum of a low-power two-stage pulsed magneto-plasma-dynamic thruster”, AIP Phys. Rev. E This paper, mainly written by D. Zolotukhin, presented very interesting experimental results […] (Sep 15 2020)

Particulate Surface Adhesion Sandbox

(TL/DR: This page contains an interactive Javascript sandbox for testing surface adhesion. You can play with it below or in a separate window by clicking here) One of the projects I am currently working on involves modeling the gas-surface or plasma-surface interface. This has dual applications. First, in the world of contamination control, it is […] (Sep 8 2020)

Setting up an Ubuntu Linux Cluster

Step-by-step tutorial for setting up an MPI Ubuntu cluster with network file system to be used for parallel distributed computing (Sep 7 2020)

Interconnected Spheres Javascript Demo

Tutorial for creating a Javascript simulation of a "crystal-lattice" formed by interconnected spheres interacting with the spring force (Sep 7 2020)

Introduction to Modern Scientific Programming and Numerical Methods

Table of contents for the upcoming "Introduction to Modern Scientific Programming and Numerical Methods" by Brieda, Wang, and Martin. Leave us a comment with your suggestions and let us know if you would like to help with the reviews. (Sep 6 2020)

Arduino Plasma Simulation

An example electrostatic particle-in-cell simulation was developed that runs on the Arduino microcontroller. Field results are visualized over serial port using Python. (May 27 2020)

USC ASTE-499 Applied Scientific Computing Debrief

In the spring semester 2020, I had the opportunity to teach an Applied Scientific Computing course at USC. Here is a course summary and a debrief. (May 25 2020)

Effect of Ion Thruster Plume-Thermosphere Interaction on Satellite Aerodynamics in Very Low Earth Orbit

Satellite operations in Very Low Earth Orbit (VLEO), altitudes below 250km, are highly appealing for flexible, high-performing and economical spacecraft operations to deliver low-cost communications and Earth observation data. However, the mission lifetime in VLEO is significantly limited due to the aerodynamic drag from the momentum exchange between the residual atmosphere and satellite. This article describes a recent research of S. Andrews that utilized our Starfish plasma simulation code. (May 25 2020)

Computing pi with CPUs, GPUs, threads, MPI, Javascript, Arduino, and FPGAs

This year, for “pi day” (March 14th), I figured I’ll post a short article demonstrating how to estimate the value of π using different computer architectures. This topic is somewhat in line with the ASTE-499 Applied Scientific Computing Course I am currently teaching at USC’s Astronautical Engineering Department. The goal of that course is to […] (Mar 14 2020)

Introduction to Vlasov Solvers

A simple 1D-1V Vlasov code for two-stream instability is developed. The code is based on a splitting scheme proposed by Cheng and Knorr in 1975. (Sep 11 2018)

Multigrid Solver

The Multigrid scheme for accelerating convergence of iterative matrix solvers is explained and demonstrated with a one-dimensional Python code. (Mar 11 2018)

Handling Surfaces: Line Triangle Intersection Example

This article presents an algorithm for performing particle-surface impact checks using a mixed triangular-quadrilateral mesh with warped and overlapping elements. (Dec 20 2017)

Starfish DSMC Tutorial: Supersonic Jet and Argon Diffusion

This tutorial shows you how setup a DSMC simulation using Starfish. We model expansion of an atmospheric pressure gas to a low pressure reservoir and also compute self-diffusion coefficient of argon. (Apr 14 2017)

Vorticity – Stream Function Formulation for Axisymmetric Flow

Vorticity - Stream Function formulation for incompressible Navier Stokes equation is developed and demonstrated with Python code for flow in a cylindrical cavity. More complex geometry from a Java code is also shown. (May 27 2016)

Fun with Raspberry Pi – plasma simulation code performance

Raspberry Pi 3 Model B is a $40 credit card sized computer with 1.2GHz CPU and 1Gb of RAM. But before buying bunch of the boards to build a small MPI cluster, I wanted to see how the performance compares to a typical PC. (May 16 2016)

Free molecular flow in a cylindrical pipe – with multithreading

In this blog post we develop a multi-threaded C++ program for computing molecular transmission through a cylinder of a varying length. The results are compared against tabulated data of Clausing. (Mar 15 2016)

Brief Intro to GPU PIC with CUDA

This post shows how to develop a PIC plasma simulation code that uses NVIDIA CUDA to perform computations on the graphics card (GPU). Even without any optimization, the GPU version runs almost twice as fast as the CPU version for a large number of particles. (Feb 25 2016)

3D Viewer

WebGL-based interactive 3D plotter for surface mesh files in Paraview's .vtu or .vtp formats (Feb 16 2016)

Particulate Contamination Transport on Orbiting Satellites

Particulates launched from an orbiting object may intersect the satellite on a future orbit and cause contamination of surfaces beyond the line of sight of the originating surface. This post describes a simply Python code that was developed to model this behavior with and without solar radiation pressure. (Jan 27 2016)

CTSP Molecular Contamination Modeling Validation

Summary of CTSP molecular contamination modeling validation effort to date (Dec 28 2015)

Finite Element Particle in Cell (FEM-PIC)

Example Finite Element Particle in Cell code for flow of ions past a charged sphere on an unstructured mesh (Dec 23 2015)

Advanced PIC Course Debrief

Some observations and lessons learned from the Advanced PIC course. Were you a student? I would love to get your feedback! (Nov 10 2015)

QCM Analyzer

Interactive on-line analyzer of Quartz Crystal Microbalance (QCM) log files. The analyzer can visualize multiple channels, automatically compute smoothed delta-deltas, and lets you interactively analyze TGA data. (Nov 9 2015)

Detailed Surface Model

New detailed model was developed for the space-surface interface. Instead of using sticking coefficients, the model uses residence time to determine if a molecule "sticks". Adsorbed molecules are added to a surface layer and objects can also contain trapped gases diffusing to the surface. (Jun 30 2015)

Particle In Cell Method in Cylindrical Coordinates

Details of implementing plasma simulations with the Particle In Cell Method in cylindrical coordinates. We develop a simulation of a simplistic ion gun. (Jun 15 2015)

Two Stream Instability Javascript Simulation

Particle In Cell (PIC) plasma simulation of two-stream instability implemented in Javascript and running in your browser. Two cold beams interact with each other until streaming is destroyed and particles become trapped in phase space vortices. (Apr 29 2015)

Modeling Diffuse Reflection (or How to Sample Cosine Distribution)

Molecules impacting surfaces reflect either diffusely or specularly, Since diffuse reflection is more common, it is important to model it correctly. In this article we discuss how to model diffuse reflection by sampling from Lambert's cosine law. (Apr 2 2015)

Sputter Calculator (alpha version)

Online calculator and plotting program for normal and angular sputter yields using the models of Yamamura and Matsunami. (Mar 11 2015)

XY Interpolation Program

Online interpolation program that takes arbitrarily spaced unsorted X-Y data, fits a spline to it, and generates equidistant points. (Feb 21 2015)

Stretched Mesh

Tutorial on implementing mesh stretching in Particle In Cell codes. Equations for node positions and finite difference coefficients are derived. (Feb 18 2015)

Potential Solver for Composite Dielectrics

Form of Gauss' law for composite dielectrics is derived. The governing equations are demonstrated with a 1D program that solves electric potential across several pieces with a variable permittivity and mesh spacing. (Jan 18 2015)

Some recent papers

This post is bit of an advertisement, in that I wanted to share with you some recent papers that I was involved in. Recent here is to be taken with a bit of grain of salt, since some the papers noted below are from as far back as 2010. (Dec 4 2014)

Advection Diffusion Crank Nicolson Solver

Online Advection Diffusion equation solver implemented with Javascript and HTML5, and based on Crank Nicolson Finite Volume Method. (Jun 8 2014)

Current Density Limit

Ion thrusters are space charge limited devices, with maximum current density given by the Child Langmuir law. This simulation code explores the impact of space charge saturation on the flow between two planar electrodes. (May 27 2014)

Turbofan Calculator

Interactive turbofan calculator based on the one-dimensional model in Hill and Peterson's Mechanics and Thermodynamics of Propulsion. (May 23 2014)

2D Data Plotting

Demo of plotting 2D scalar mesh scalar values using HTML5 canvas and rainbow RGB colormap. (Mar 4 2014)

Converting Scalars to RGB Colormap

We can visualize variation of mesh-based scalars by converting each scalar to a color with the help of some colormap. This article describes how to convert a scalar to the rainbow colormap, which ranges from blue to red as the value increases from the minimum to maximum. (Mar 4 2014)

Flow in a Nozzle

By considering one-dimensional flow, we can derive an expression for the variation of Mach number in a nozzle with a variable area change. Such a relationship is explored here with an interactive demo that allows you to change the shape of a converging-diverging nozzle and observe how the flow speed changes. (Feb 7 2014)

IEPC2013 Debrief

The 33rd International Electric Propulsion Conference, IEPC2013, turned out really well with record attendance despite the on-going government shutdown. (Oct 11 2013)

Scammers Everywhere

Interesting experience with a scam registration for a technical conference using a "virtual" credit card, and requesting a wire refund after their visa was supposedly denied. (Sep 1 2013)

Computing Intersections Between a Cubic Bezier Curve and a Line

Interactive SVG+Javascript code for computing intersections between a line and a cubic Bezier curve. (Aug 10 2013)

On partial pressure determination of condensable materials with a TQCM

In this article we look at how we could use surface flux collected by a quartz crystal microbalance (QCM) to compute the volumetric partial pressure of condensable materials such as magnesium vapor. (Jul 28 2013)

Initial Progress on Micro Cathodic Arc Thruster Plume Simulations

Preliminary results from a fully-kinetic simulation of a micro cathode arc thruster for nanosatellites. The thruster uses a magnetic field to turn an initially radial jet into the axial direction to crate thrust. (Jul 14 2013)

Bird’s DSMC0.FOR in Java

G.A. Bird included several example codes with his book on the DSMC method. These codes are written in Fortran 77 which makes them somewhat hard to understand due to short variable names and reliance on global variables. This post is a summary of my effort to convert DSMC0.FOR to Java. (Jun 29 2013)

Surface Erosion

Every time a particle impacts a surface there is a chance that it will knock off or “sputter” some material from the surface. Over time this can cause noticeable degradation in high flux areas such as Hall thruster channels, electrostatic acceleration grids, etc. Even structures far downstream of a thruster can erode over time if they are near the main plume. This article explains the basic algorithms involved in determining how a surface will erode when exposed to a given flux. (Jan 1 2013)

HTML5 + Javascript DSMC Simulation

Details of the Javascript implementation of the Direct Simulation Monte Carlo (DSMC) method and a how to guide to plotting animated simulation results with Javascript and HTML5 canvas element. (Dec 26 2012)

Direct Simulation Monte Carlo (DSMC) Method

DSMC, or Direct Simulation Monte Carlo, is a particle based method for simulating gas kinetics. Popularized by G.A. Bird in the 60's, this method is now commonly used as an alternative to CFD. In addition, DSMC is commonly combined with PIC codes to include collisions in plasma simulations. This article demonstrates the method with an interactive HTML5 DSMC demo. (Dec 19 2012)

Starfish Tutorial Part 5: Collisions and Chemical Reactions

The final part of the multipart Startfish tutorial. In this part we discuss adding material interactions, including chemical reactions, Monte Carlo Collisions (MCC), and Direct Simulation Monte Carlo (DSMC). (Dec 12 2012)

Starfish Tutorial Part 4: Steady State, Surface Flux, and Averaging

Part 4 of the multi-part Starfish tutorial. In this part we add commands to export surface properties such as surface flux, learn about steady state, and setup data averaging. (Nov 21 2012)

Starfish Tutorial Part 3: Surface Interactions

Part 3 of Starfish plasma simulation solver tutorial. Here we introduce surface interactions and modify the input files to simulate the recombinations of ions at the surface of the cylinder. (Nov 12 2012)

Starfish Tutorial Part 2: Particles and Animation

The second part of the multi-part Starfish tutorial. In this part we add particle sources to simulate flow of plasma over a cylinder. We also introduce animations. (Nov 6 2012)

Starfish Tutorial Part 1: Domain, Boundaries, and a Potential Solver

The first part of the multi-part Starfish tutorial. In this article we introduce the input files needed to setup a simulation for a flow of plasma over an infinitely long cylinder. (Oct 29 2012)

Exporting Magnetic Field from FEMM

FEMM is a powerful (and free) 2D magnetic, electrostatic, and heat transfer solver. FEMM contains a nice GUI for defining and analyzing the problem. It does not contain an option for exporting the results. However, you can export the results from FEMM easily with a simple LUA script. (Sep 7 2012)

Finite Element Experiments in MATLAB

Collection of examples of the Continuous Galerkin Finite Element Method (FEM) implemented in Matlab comparing linear, quadratic, and cubic elements, as well as mesh refinement to solve the Poisson's and Laplace equations over a variety of domains. (Aug 30 2012)

A quick summary of the past six months

A quick summary of the projects completed over the past 6 months. These include development of a 2D plasma simulation code Starfish, publication of two papers, initial analysis of a plasma-wall interface, and development of a Java-based VTK GUI. (Aug 24 2012)

Interactive Elliptic Mesh Generation with SVG and Javascript

SVG and Javascript can be used to create interactive applications and graphical user interfaces. Here is an example of an interactive elliptic mesh generator. (Jun 22 2012)

Smooth Bézier Spline Through Prescribed Points

How do you construct a smooth line through a set of prescribed points? This article shows you how. It also includes an interactive SVG demo that allows you to try it in real-time. (Jun 17 2012)

Efficient Particle Data Structures

Particle codes have very different memory optimization requirements than fluid-based solvers. Here we consider three types of data structures for holding particles that offer an efficient way of adding and removing particles and compare their performance. (Jun 11 2012)

2D Finite Element Method in MATLAB

This tutorial discusses how to generate unstructured meshes using a Matlab code distmesh.m and how to use the mesh in a Matlab Finite Element Solver to solve the Poisson's equation on an unstructured domain. (Jun 8 2012)

Interpolation using an arbitrary quadrilateral

This article describes how to interpolate data between a particle and an arbitrary quadrilateral cell used in non-Cartesian grids. The technique is illustrated with several Matlab / Octave examples. The examples show how pick points located inside the polygon, how to classify their position, and how to scatter and gather particle data. (Jun 4 2012)

Loading an isotropic velocity distribution

Tutorial on the simple but important topic of loading particles with uniform spatially distributed velocity. This loading is important when loading background gas for particle simulations or when loading drifting Maxwellian beams. (May 24 2012)

Implementation of VTK-based 3D visualization capability in a solver GUI

Over the past few weeks, we at PIC-C have been busy integrating VTK (The Visualization Toolkit) into a client’s graphical user interface. The client for this project is a company specializing in CFD software for turbomachinery aerodynamic analysis. The client’s solvers are integrated with a Java-based GUI which allows the user to specify input parameters […] (May 3 2012)

Nonlinear Poisson Solver

Nonlinear Poisson's equation arises in typical plasma simulations which use a fluid approximation to model electron density. This article describes how to solve the non-linear Poisson's equation using the Newton's method and demonstrates the algorithm with a simple Matlab code. (Apr 30 2012)

Code Optimization: Speed up your code by rearranging data access

Often, a significant code speed up can be accomplished by simply rearranging the way data is stored or accessed in memory. This article compares data access with arrays vs. linked lists, and compares loop ordering for 3D data sets. It also looks at a flat 1D array representation of 3D data via a mapping function. (Apr 22 2012)

Orthogonal Curvilinear Coordinates

Cylindrical and spherical coordinates are just two examples of general orthogonal curvilinear coordinates. In this article we derive the vector operators such as gradient, divergence, Laplacian, and curl for a general orthogonal curvilinear coordinate system. (Jan 16 2012)

Data Visualization with Java and VTK

VTK is a powerful library for analyzing and visualizing scientific data. This example shows how to develop a simple Java application that uses VTK to render surface geometry, isosurfaces, and cutting planes. (Dec 16 2011)

Simple Particle In Cell Code in Matlab

This article includes the source code for a simple particle in cell code. The code simulates flow of plasma over a charged plate and is written in Matlab. (Nov 28 2011)

Monte Carlo Collisions (MCC) Example

Monte Carlo Collisions (MCC) is a simple algorithm for modeling particle collisions in situations where the target species is much denser than the source. In this example we use this method to model the charge-exchange (CEX) process in the plume of an ion thruster. We include an animation and the example Java source code. (Nov 24 2011)

Charge Exchange Collisions (CEX)

Charge exchange is an important reaction occurring in the plumes of electric propulsion devices. In this reaction, an ion and neutral come into a close contact and exchange an electron without any corresponding change in the momentum of the two particles. In the EP plumes this results in the formation of slow moving ions near the thruster exit. These ions are then accelerated radially out of the plume into areas with no line of sight to the thruster. (Nov 16 2011)

HTML5 for Scientific Computing

HTML5 is the new standard for writing webpages. It introduces several new powerful capabilities, such as embedded video and drag and drop. It also introduces a new tag called canvas that allows us to do real time graphing and visualization using Javascript. In this example we show you how to plot XY graphs using Javascript and HTML5. (Oct 28 2011)

Multiscale Modeling of Hall Thrusters

One of the topics we specialize in at Particle In Cell Consulting is modeling of electric propulsion (EP) thrusters. These devices generate thrust by accelerating ionized propellant (plasma). One of the most efficient EP devices is the Hall thruster. These devices have been flown for over 40 years, however, much still remains unknown about the details of their operation. (Aug 24 2011)

2013 IEPC at GWU

The International Electric Propulsion Conference (IEPC) is the premier international conference for researches studying electric propulsion (plasma) rockets. The 2011 conference took place in Wiesbaden, Germany. The next conference will take place in 2013 at the George Washington University in Washington, D.C. Particle In Cell Consulting will be helping to make this a great event. See you there? (Jul 31 2011)

Particle Push in Magnetic Field (Boris Method)

A follow up on the previous article, in this tutorial we show you how to integrate the particle motion in the presence of a magnetic field. Inclusion of the magnetic field makes the integration an implicit problem, and care needs to be taken to conserve energy. A simple forward differencing would result in a non-physical energy gain, and the particle would spiral away from the guiding center. (Jul 11 2011)

Leapfrog Particle Push (Velocity Integration)

In this article we discuss probably the most fundamental aspect of numerical simulations with the particle in cell (PIC) method: pushing particles. We introduce the commonly used leapfrog method, and provide a simple numerical algorithm in the form of an Excel spreadsheet that implements this method. (Jul 10 2011)

Get results faster with Java multithreading

Code parallelization is the process of modifying a simulation program so that it can take advantage of multiple computational cores to obtain results faster. One method is to distribute the workload locally in the form of computational threads. Java makes it easy to add multithreading to your code. Here we show you how to implement a "poor-man's" method, in which individual cases run serially, but multiple cases are launched concurrently. (Jun 25 2011)

Spacecraft Surface Charging

A spacecraft acts as an isolated probe and will become charged due to the presence of space plasma. Surface potential will change due to the thermal motion of electrons and ions. The potential will continue to change until the fluxes of the negative and positive charges perfectly balance each other. In this article we discuss the basics behind spacecraft charging and provide a simple spacecraft charging code example. (May 10 2011)

The Finite Volume Method

The Finite Volume Method (FVM) is an algorithm for solving differential equations. It is based on the integral formulation of the problem, with each computational element corresponding to a volume over which the integration is performed. It is somewhat more complex than the Finite Difference, however, it can be applied to arbitrarily shaped domains. In this article we show you the basics of this method and provide a simple solver. (Apr 19 2011)

The Finite Difference Method

Numerical simulations generally involve solving some differential equations on a computational domain too complicated to solve analytically. The Finite Difference (FD) is a method for solving differential equations. It is a very popular method since it is very easy to understand and implement. Here we introduce the basics of this method and provide a simple example. (Mar 1 2011)

The Electrostatic Particle In Cell (ES-PIC) Method

Particle In Cell (PIC) is the name of a method used to numerically model dynamics of ionized gases, or plasmas. Its name stems from the fact that the gas is represented by a large number of computational particles that move in a disretized domain. The mesh cells are used to determine the global interactions between the charged particles. In this tutorial we show you how to implement the PIC method and provide a simple Matlab PIC code. (Nov 8 2010)