Simulating a Plasma
In a plasma there are positive ions and negative electrons. Opposites
attract (+ attracts -) so there is a force on each drawing opposites
together and likes repeal (- to - and + to +) forcing them apart.
As each particle moves it appears as a current which creates a magnetic
field. The magnetic fields of adjacent particles cause a force which
pushes at right angles to the magnetic field and the direction of
a particle.
Any particle sees attractive electrostatic forces,
repulsive electrostatic forces and magnetic forces at right angles
to its direction of motion. If we sum up all those forces we get
a net force (vector) pushing it in some direction. Since we know
the mass of the particle we can use F=ma to find its acceleration.
If we integrate its acceleration we get its change in velocity (needed
for the magnetic effects) and integrating that we can find its new
position (needed for electrostatic effects).
For each step in the simulation and for each particle
we calculate its new position and velocity. The assembly of all
the particles represents the state of the simulation for that step.
You start the simulation at some arbitrary state (usually a uniform
distribution) and run it until you see a pattern emerge. Sometimes
the pattern appears static because the particles move through the
plasma in a recurring path. Usually the pattern is like a river
with eddies and currents that are changing but still form a recognizable
pattern. Occasionally there is no pattern and the simulation will
not converge into something recognizable. The fact that the simulation
does not converge may be because the real world device is chaotic
or more likely you screwed up when you coded the simulation.
The nice part of a plasma simulation is that in
the real world the particles are luminous. This means the shape
of the glow in the vacuum chamber should look like the picture painted
on a computer screen by the simulator.
Particle in Cell (PIC) Simulator
The XOOPIC
simulator is the basis for the simulations used in this project.
It is a 2D simulator which means you have to design the experimental
devices to work in a two dimensional plane. This is not a problem
for my project because my plasma amplifiers only do interesting
things in two dimensions. There may be effects from the third dimension
but these should not be large enough to invalidate the ability of
the simulation to predict the behaviour of the devices.
As devices are constructed and the simulations are
run the results will be posted (probably with OOPIC source code
and pictures) here.
Nvidia Video Card Hardware Accelerator Using
CUDA
Nvidia video cards (8400s, 8800, 9800s, 280s) are
designed so they can be used as vector processors or massively parallel
computers. An accurate simulation of plasma is a computationally
intensive problem and the Nvidia cards should make the simulator
run 100+ times faster than a PC CPU.
Nvidia are providing great support for using their
cards as GPUs. They provide a support library (CUDA)
and drivers specifically for operating their video cards as general
purpose computers. Nvidia has written books on the use of their
cards that include working code to demonstrate their capabilities.
GPU Gems 1 and 2 are now freely available at the Nvidia site and
many of the chapters and a lot of the code from GPU Gems 3 is also
available. I have provided the splash page of
GPU Gems 3 DVD for the links along with and extract of the ebook.
I am using "Ch. 31: Fast N-Body Simulation with CUDA" as a starting
point for my attempt to put OOPIC into an Nvidia card.
If you are looking to do something
other than plasma simulation there is an active community at
gpgpu.org that is using Nvidia and other video cards as general
purpose computers.
The Puddles Simulation Computer
My simulator hardware ("Puddles") is a
water cooled computer using a quad core Intel motherboard with dual
Nvida 8800 GTXs cards tied together with an SLI strap. This should
provide nearly a teraFLOP of parallel computer power and allow very
detailed simulations in a reasonable run time. As I work through
trying to get OOPIC on an Nvidia card the progress, pictures and
OOPIC/CUDA source code (some IP witheld) will be provided here.
|