Magnetic field calculations are often a bit more complicated than electrostatic ones since potential is a vector and there are complications of permeability, current density, and hysteresis.

In SIMION, there are three main ways to define a magnetic field:

  • in terms of magnetic scalar potentials
  • in terms of magnetic vector potential (experimental in
  • in terms of magnetic field vectors

These cases are explained below:

  • in terms of magnetic scalar potentials – Scalar magnetic potential is analogous to scalar potential in electric fields (i.e. voltage). The magnetic field vector is the negative gradient of scalar magnetic potential, just as the electric field vector is the negative gradient of electrostatic potential. SIMION can solve scalar magnetic potential using the Laplace Equation in the same manner as electric potential is solved, and after doing so the magnetic field vector can be immediately obtained and used for particle trajectory solving. However, not all magnetic fields can be expressed as scalars but rather as vectors, and the meaning of potential can be less intuitive with magnetic fields. Magnetic potential will be a scalar under certain conditions, such as when there is no current density in the domain modeled (and in a different way if the system has 2D symmetry). See Magnetic Potential for details. SIMION Early Access Mode adds Permeability support.
  • in terms of magnetic vector potential – Magnetic vector potential can take into account a non-zero current density in space. SIMION Early Access Mode has experimental support for magnetic vector potential. See Magnetic Potential.
  • in terms of magnetic field vectors – Magnetic fields hre are defined directly in terms of field vectors. During the trajectory integration the magnetic field vector seen by the particle can be defined programmatically. You may have an analytical mathematical expression for it, or you may have field data (calculated from some external program and stored in a text file) that can be interpolated (SIMION 8.0.3 includes field grid interpolation routines, and SIMION 8.1.0 allows regular PA files to represent this), or the magnetic field may be defined via a configuration of wire currents (SIMION 8.0.3 provides support for Biot-Savart Law calculations). In all these cases, the magnetic field can be superimposed on a system via an mfield\_adjust user program segment attached to an empty magnetic potential array. This program segment defines magnetic field vector directly however you like. SIMION adds some capabilities and examples that make this easier to use in terms of storing vector data in regular PA files and visualizing the field vectors (and/or Biot-Savart wires) on the View screen (see SIMION Example: contour (contourlib81), SIMION Example: helmholtz_coil, and SIMION Example: solenoid).

Related Resources:

Applying a constant magnetic field

It’s very common to require simply a constant magnetic field, so we describe that here. There are two main methods to define a constant magnetic field in SIMION: with a user program or without a user program. Each is explained below. Both methods are almost equally suitable, but the user program approach is recommended because it avoids magnetic potentials and therefore can be more intuitive.

Via a user program in SIMION 8/8.1

For this example, we’ll assume you want a constant 100 gauss magnetic field in the +X direction.

  1. Create an empty basic PA of “magnetic” type. We’ll assume this PA is named “”. This PA will not define a magnetic field itself but rather just defines the volume in which the magnetic field is to be applied (by a user program). So, it must be sized appropriately. It does not contain any pole points nor does it need to be refined. To conserve memory, it’s recommended to make this PA be 2D planar or 2D cylindrical (no need for a 3D array), and it doesn’t matter if your magnetic field does not actually have that symmetry since it’s merely defining a volume. Note: this step can be avoided when using sim_segment_global (in version 8.2EA).

  2. Add an instance of the PA to a workbench (View > PAs > Add). We’ll assume this IOB is named “system.iob”. Appropriately size and position the PA instance in the workbench (View | PAs | Positioning). If you use 2D planar, be sure to set the “nz use” value appropriately in “View | PAs”. You may rescale the array size on the workbench too (“View | PAs | Positioning | scale”). The magnetic PA may overlap your electric PA’s if you want electric and magnetic fields to overlap. Note that if a particle is located at a point inside multiple PA instances, it only sees the electric field from the electric PA of highest priority number and only sees the magnetic field from the magnetic PA of highest priority number. (Priority numbers are seen on the PA instances list on the PAs tab and are changeable via the L-/L+ buttons).

  3. Add a user program to your workbench. The simplest way is to click the “User Program…” button on the Particles tab. (This creates a file “system.lua”–i.e. with the same base file name “system” as the IOB file and in the same folder.) Paste the following text into it and save:

    adjustable bx = 100   -- gauss
    adjustable by = 0     -- gauss
    adjustable bz = 0     -- gauss
    function segment.mfield_adjust()
      ion_bfieldx_gu = bx
      ion_bfieldy_gu = by
      ion_bfieldz_gu = bz

    This works as follows. SIMION sees the system.iob has a corresponding system.lua, and whenever a particle is flying inside, this user program applies a constant magnetic field to the particle.

  4. Verify the correctness of the magnetic field with SIMION Data Recording. Caution: The magnetic field defined via a user program (rather than without one) will not normally be visible with the PE/Contours viewing options (though can be visualized with contourlib81 in SIMION Example: contour).

The above approach is taken in the SIMION Example: icrcell. SIMION Example: mfield_adjust (added in SIMION demonstrates a simple mfield_adjust segment as described above.

Via a user program in SIMION 6 or 7 (also works in 8)

SIMION 7 can do this with a PRG program. Create a user program file “mag.prg” (i.e. with the same base file name “mag” as the PA file, not IOB file, and in the same folder):

defa bx 100    ; gauss
defa by 0      ; gauss
defa bz 0      ; gauss
seg mfield_adjust
  rcl bx sto ion_bfieldx_gu
  rcl by sto ion_bfieldy_gu
  rcl bz sto ion_bfieldz_gu

Via magnetic potentials in a PA

An alternate method of creating a magnetic field is to create magnetic pole in a magnetic PA. The negative gradient of the scalar magnetic potential then defines the magnetic field. This is suggested on p. 2-10 of the SIMION 8.0 and 7.0 manuals. This is described in Magnetic Potential.

Combining electric and magnetic fields

Electric and magnetic fields cannot be combined in the same PA. Rather, you need two PA’s, one electric and one magnetic. You then overlap the PAs on the workbench. If a particle is inside multiple PA’s, it will see the electric field from the electric PA of highest priority number (in the PA Instances list on the PAs tab) and the magnetic field of the magnetic PA of highest priority number. See also the SIMION Example: magnet (magnet1.iob) example, which does this, or SIMION Example: icrcell.

Mu Metals (High Permeability)

Mu metals (i.e. metals with high Permeability \mu) are often used for magnetic shielding. Mu metals can be handled in SIMION. See the discussion in Floating Conductor and the user group posts linked from that page. The approach for doing mu metals is similar as noted in the user group posts.


See Permeability.

Plotting Fields

See Plotting Fields.

See Also