SIMION Software Change Log

For a summary of major developments see SIMION Advances, SIMION® 8.0, SIMION® 8.1, SIMION® 8.2, and SIMION® Roadmap (8.2 and Beyond).

  • The latest SIMION 2020 release is (binary and full installer)
  • The latest SIMION 8.1 production release is (binary and full installer)
  • The latest SIMION 8.1 production release is (binary only).
  • The latest SIMION 8.0 production release is (binary only).
  • The latest SIMION 8.0 production release is (binary and full installer).
  • The latest SIMION 7.0 production release is

Key: X=fix, A=addition, C=change, (lowercase)=minor, *=user-requested, B=backported to 8.0, EA= early access. (not yet released)

  • A GEM: gem stl() can now extract a single fully connected surface closest to a given point (x,y,z). This is another mechanism to assign different voltages to different parts of a system without splitting it into multiple STL files[*]. See examples\geometry\two_cylinder.gem:

    pa_define{100*mm,20*mm,20*mm, 'planar', dx=1, surface='fractional'}
    locate(0,10,10) {
      e(1) { stl("two_cylinder.stl", 5, 15, 0) }
      e(2) { stl("two_cylinder.stl", 25, 15, 0) }
  • A SL Tools: STL -> PA: Add electrode assignments list to assign voltages (V) to fully connected surfaces closest to the given point (x,y,z).

  • A SL Tools: STL -> PA: Add symmetry and mirroring switches. No longer needs done via Modify Set.

  • A SL Tools: STL -> PA: Add “Make GEM File” option, which writes a GEM file (that imports an STL file) that can be used to generate the PA within SIMION.

  • x SL Tools: STL -> PA: View GUI sometimes does not display surface enhancement.

  • x SL Tools: STL -> PA: Empty STL should not fill.

  • x SL Tools: Reduce number display precision to 16 digits to avoid 0.10000000… numbers.


The prominently includes STL enhancements, including using STL files in GEM files and importing STL as solids, with or without surface enhancement.

  • A GEM: Support for using STL files in GEM files and using them like any other shape. gem stl()
  • A SL Tools: STL -> PA: New “solid fill” solid strategy, which fills all points between electrodes with solid electrode points. Supports surface enhancement too. See solid strategy.
  • A SL Tools: STL -> PA: “surface enhancement” solid strategy officially added. This was previously in a special build of SL Tools. See solid strategy.
  • A SL Tools: Display surface enhancement in 3D viewer (like SIMION).
  • C Click sound now disabled on particle splats (slows down Fly’m).
  • X SL Tools: STL -> PA: Fix rotation support in “surface enhancement” solid strategy.
  • C Log window: increase number of lines to 10000 (was 500).
  • c Example(drag) - drag_mobility_diffusion.lua: Fix units on variables, to be consistent with the library.
  • a Doc(particle_trajectory_calculation): Add example of backflying particles in reverse direction.
  • c Example(poisson) - fix piclib.lua might not refine if electric and charge PA’s are not the first two instances in the workbench.
  • x Example(magentic_sector) - Update to GEM2 syntax (and fix “n” variable conflict).
  • a Example(geometry) - new spiral custom shape (spiral.gem) example
  • c Example(collision_hs1) - add README notes on collision cross section.
  • c simion.experimental.display.load: allow non-integer zooms_3d.

  • C View screen: 3D (OpenGL) view automatically updates when PA instances moved or reloaded or contours change. 3D contours displays only when 3D checked.
  • C View screen: 3D (OpenGL) view upon mouse hovering properly displays coordinates and voltages for multiple PA instances.

  • C Help: Fix CHM help crashing sometimes when typing in index. Also “Topic Found” now display titles.
  • X Modify/GEM: Fix Modify screen display corruption if GEM reloaded with new array size. Regression in
  • C Main/File Browser: Add Refresh button to refresh directory tree if changed.
  • c Main/File Browser: Support Run Lua command on right clicking Lua file.
  • c GEM: In .preprocess.gem (for debug), translated coordinates in comments now in gu. Also fix box3d comment had wrong coords.
  • c Example(count_transmission) - use sim_ions_count variable
  • c Doc(editortut) - updates

  • X Modify PA size changing with Halve/Double/GeomF causes display corruption until window refreshed. Possibly other size changing functions affected as well. Broken in 2017-06-03.
  • X PA size changes was no longer checked on entering View screen. This is the “Warning PA symmetry, size, or mirroring changed” message. Skipping this could cause crash. Broken in 2017-02-14.
  • x 3D OpenGL display of 2D cylindrical PA’s with mm/gu not equal to 1 were not displaying cut plane surface.
  • A File Browser: Add “Show in Windows Explorer” right click option. Also allow opening README.html files.
  • c Example(kingdon_trap): updated quadro_logarithmic.gem to GEM2 format.
  • c Doc(potential_array_types) - improve text

  • x Example(dielectric): fix nil error on cylinder_2dp.lua.
  • x installer: fix license file fails to install if renamed

  • C new full installer package.
  • c Add full manual link to Help menu.
  • X sltools - fix PA viewing broken in 2019 release

  • X fix window quitting or freezing at certain times like user switching. This is related to early access removal in SIMION 2019. [*]
  • C internal: compiler update
  • a Example(swirl): add GEM version (swirl.gem) of geometry
  • c short course: update sessions 7 and 10 from PRG to Lua code

  • C Add 8.2 files missing in 2019 release. examples/field_array ( ansys.dat ansys_to_pa.lua comsol_to_pa.lua comsol_vx.txt comsol_vy.txt ds2v_to_pas.m ds2ff.dat opera_to_pa.lua opera.table solidworks.txt solidworks_to_pa.lua ) examples/hda r0_82.gem r0_82f1_1000.* examples/helmholtz_coil/saddle_coil/ examples/matlab/ examples/molecular_beam/ examples/multiprocess_zmq/parallellib.lua examples/octupole/octupole_ideal_build.lua
  • C remove Windows XP support.
  • C internal: compiler update
  • X GEM: fix error about early access when using include()


  • c reimplement simion.import as pure Lua function (internal change only).
  • c simion.import supports relative paths when used inside GEM files because the GEM file processor now sets current folder to GEM file’s parent. Note: normally include() is used instead to load other GEM code, but simion.import may be used to load pure Lua code.
  • A Doc(lua_scope) - new page on variable visibility and scope
  • A Doc(ion_funnel), Doc(detector) - new pages
  • A Example(helmholtz_coil) - add “thick_coil” example of approximating a thick wire with many thin wires


  • X Fix sim_segment_global with mfield_adjust, off by factor of 10000. Feature added in EA.

  • A Example(particles): new distribution_rejection_sampling.fly2 example, for generating custom distributions in FLY2 files using a simple rejection sampling technique.
  • a Doc(quadrupole_mass_filter) - new page
  • x GEM: Fix error about “attempt to perform arithnetic on local ‘tsin’ (a nil value)” with large angles in locate (broken from recent GEM changes in 8.1.3)
  • x Example(helmholtz_coil) Fix broken examples\helmholtz_coil\rectangular_coil\rectangular_coil.iob file.
  • x Fix –default-num-particles command line option broken in


  • X GEM2: Fix infinity (inf) in cylinder3d [*].

  • A OpenGL: Add display quality (“Qual”) control on Modify/View “3D” (OpenGL) views, for faster display (reduced quality) of large/complex arrays.
  • c OpenGL: Change “3D” background color to white (was black), consistent with other views.
  • A Main GUI: Add “Unload” button on main screen to unload individual PA’s from RAM.


  • A Main screen: New file folder tree on Main screen, with file-specific commands as pop-up menus by right click. See Main Screen [8.2].

  • Modify: fix PA cleared when PA setttings (Set) changed. Broken in
  • Fast Adjust Screen: update displayed potentials if simion.pas[i]:fast_adjust{…} invoked from command bar within this screen. [*]
  • Fix digital signature in EXE, missing since
  • Example(trap): set trajectory, group, and repulsion settings upon load and limit time.
  • Example(gnuplot): gnuplotlib.lua:
    • GNUPLOT.plot writes data directly to pipe and plot (not temporary file and replot), similar to what GNUPLOT.plot_surface does.
    • GNUPLOT.plot_surface now has xtics and yticks parameters.
    • Setting GNUPLOT_TRACE = true (e.g. from the SIMION command bar) causes all gnuplot commands to be written to a file (gnuplot.txt) in the current folder rather than sent to gnuplot.
  • Doc(gem_geometry_file): incorporate GEM documention from 8.1 manual
  • harminv.lua: support writing complex data [*]
  • simion.chm: internal: update documentation system to latest version

  • Modify: Allow PA size to be increased beyond reserved max PA size, without Remove All PAs from RAM.
  • Modify/GEM: Update PA size and header when GEM pa_define changes. [*]
  • GUI: Add Windows process ID and version number to title bar and Log window title. [*]
  • GEM: Allow for numerical error in converting reals to integers: pa_define(7.6/0.2,10,1) or pa_define(37.999999999999993,10,1) rounds up to pa_define(38,10,1). Affects but not as much earlier versions.
  • GEM: Fix possible shape command raising error in multithreading. Affects
  • GEM: Fix extrude_xy/yz/zx length when 1/2 gu adjustment omitted, like surface=fractional. Affects
  • Example(test_plane) - add draw() function to draw test planes on screen
  • examples: move upper-case file names in .iob example files (Linux compatibility)
  • internal: upgrade build system (should not have effect).
  • internal: upgrade GUI library (should not have effect).
  • internal: upgrade Boost libraries (should not have effect).
  • internal: upgrade compiler. simion.exe now depends on vcomp140.dll (not vcomp110.dll).


  • GEM: add transformed coordinates (from locate statements) to comments in *.processed.gem files for debugging. locate(5) { circle(1,1) } ; 6,1
  • Example(field_array)
    • add DS2V gas flow import example using Matlab or Octave to resample points using the griddata function.
    • add Opera B field import example
    • add ANSYS gas flow import example
    • refactor SolidWorks gas import example some
    • add cfd.iob example: basic example of reading gas flow PA’s in user program.
    • shorten names of some Lua programs (minor)
  • Example(matlab) - changed simion_pa_save interface, with more parameters.


  • c(internal): refactoring of GEM processing. should have no effect.
  • x Fix properly raise error on 200 PA instances.
  • x GEM GUI: block buttons during GEM compile (minor).
  • x Fix some memory leaks on program exit (minor).

  • C IOB: Allow workbench IOB’s to contain zero PA instances. This is related to sim_segment_global which allows efield_adjust/mfield_adjust segments to define fields without PA instances. Also, create empty IOB on pressing Cancel on entering View screen.
  • c GUI: remove welcome flash screen on startup.
  • c(internal): refactoring for trajectory calculation segment calling (sim_segment_global); should have no effect.


  • A Segment: New sim_segment_global reserved variable. Set this to 1 to cause program segments to be always called even when particles are outside PA instances (or none exist). Normally this is 0, which uses traditional SIMION behavior of only calling segments for particles inside PA instance volumes. Example:

    sim_segment_global = 1 -- ensure segments always called, even outside PA instances
    function segment.mfield_adjust()
      -- Defined B field even without a dummy magnetic PA instance!
      ion_bfieldx_gu = 10
    function segment.terminate()
      -- Always called even if particle terminates outside PA instance!
      print(ion_number, ion_px_mm)
    -- Note: terminate is called for each terminating particle,
    -- unlike terminate_run which is called exactly once and
    -- without access to particle information.
  • A Segment: New segment.instance_adjust() segment to programatically control PA instance priority during a run. Useful for ignoring ends of overlapped PA instances. See also Programmatically Controlling PA Instance Priority.

  • x simion.experimental.add_particles() - Fixed not properly initializing particles, sometimes not calling initialize segment or crash for new particles. Possibly might affect .ION definitions too.

  • c Example(mfield_adjust) - add note on sim_segment_global.

  • C API(simion.wb): Renamed instance:potential_wc and instance:field_wc to simion.wb instance:potential() and simion.wb instance:field() respectively. Only named are deprecated but preserved for compatibility.
  • x IOB: auto-refine basic PA’s when loading IOB in –nogui mode. simion.exe –nogui lua -e ‘simion.command “test.iob”’ Previously, only PA# arrays auto-refined in –nogui mode.
  • x Doc(lua_simionx.SimplexOptimizer) Fixed stability of optimizer for dimensions > 2, particulary in computing mid-point and more closely following Lagarias et al. Example: optimizing f(x,y,a,b) = (x-x0)^2 + (y-y0)^2 + (a+a0)^2 + (b+b0)^2 [*qh]
  • A Added “harminv.exe” binary, similar to FFT. This is a separate download (see Check for Updates), compiled by SIS for convenience, not part of SIMION.
  • A Example(lens_propeties): New beam_minmax_diameter.iob example (computes beam min/max diameters from full trajectory data) and particle_distance_traveled.iob example (computes distance traveled by particle, i.e. length of trajectory).
  • A Example(drag): new drag_mobility_diffusion.iob (mobilitydiffusionlib.lua) example that superimposes random diffusion, similar to SDS model but using longitudinal and laterial diffusion constants calculated from ion mobility constants (non-Einstein diffusion).
  • A Example(extension/gsl) - sample demonstrating method for compiling C functions from a library like GSL for personal use.
  • A Example(tune) - add new genetic algorithm sub-example (tune_genetic.iob) and library (geneticlib). This is basic but adapatable.
  • c Example(tune) - tune_series.iob - changed to calculate beam radius not acceptance.
  • a Example(contourlib) - Add streamline plotting functions, CON.streamline and more.
  • c Example(poisson_superfish) 2016-07-07: psflib: “convert” sets any PA instance origin to (0,0) from SF7 array.
  • a Example(excel)/Example(gnuplot) - New gridlines parameter to plot (defaults true) to plot grid lines.
  • c Example(misc): particle_distance_traveled.lua - modularize code.
  • a Example(gui): New counter.lua - popup window displaying counter or other data
  • a Example(gui): add mode_select.iob example of GUI popup to select from different sets of programming segments to run (program modes).
  • a Example(misc): Add quadrilateral.fly2 - FLY2 with starting points within an arbitrary quadrilateral, either uniformly or randomly distributed. Add disc_seq.fly2 - FLY2 file for filled circle of equally spaced points (rather than randomly spaced).
  • a Example(test_plane) - New project_coordintes.iob - Demonstrates how to rotate coordinates onto the test plane coordinate system when particles hit a test plane. [*]
  • a Example(geometry): add skimmer.gem hollow skimmer cone.
  • a Example(poisson): add childs-law.xlsx Child’s law calculation spreadsheet.
  • a Example(misc): add pa_move_electrode.lua - move electrode in PA file by offset.
  • a Example(geometry_optimization): add move_electrode.iob example, moves an electrode in a PA/PA# file, without GEM file.
  • c Example(field_array): moved gas flow (fluent,comsol,solidworks) import examples from Example(misc) into this folder. fieldlib.lua make_field support scalar fields too.
  • x print: Fixed “Temporary metafile creation problems” when writing WMF files from read only current directory.
  • c Example(gnuplot) treat non-numeric or non-finite values as NaN in data.
  • A Example(dump_field) new example dumps field/potential data from workbench to log, CSV file, Excel, or gnuplot.
  • a Example(misc), Plotting Fields: add 3D OpenGL PA color plot example (field_color_pa.lua).
  • a Example(magnetic_potential) - add solenoid_2dc.iob - 2D cylindrical solenoid with permeable material.
  • A Doc(particle_trajectory_calculation): Page greatly expanded to show many common techniques for controlling particles or recording particle information, often via user programming or other methods.
  • A Doc(parallel_plate_analyzer): New page
  • A Doc(fast_fourier_transform): New page
  • a Doc(data_recording), Doc(marker), Doc(excel), Doc(velocity_map_imaging), Doc(charge_repulsion), Doc(particle_gun), Doc(secondary_particles) - add pages


  • A Batch/Logging: New --quiet options to suppress printing status messages [*]

    • Command line: simion.exe --nogui --quiet fly drag.iob See –quiet.
    • Command API: simion.command("--nogui --quiet refine")
    • Lua PAs API refine function: simion.pas[1]:refine{quiet=true} Also, pa:fast_adjust, pa:save, pa:load, simion.pas:open functions are now always quiet.

    This suppresses output like status,Refine completed: Iterations 1, Delta=1e-100 V in 0.00 Sec.

  • pa:refine has new resume parameter to select whether to to resume resume refine. Avoids Resume Refine? prompt. E.g. ‘’pa:refine{resume=false}`` never resumes. true resume. nil (default) prompts if necessary. Also supported on command line: simion.exe --nogui refine --resume=0 (0=no,1=yes,default prompt) refine –resume

  • x fix “chdir” fail in release upon loading IOB file from batch mode.

  • x Example(collision_hs1) - in test2.lua fix mode 1.4 giving error “attempt to call field ‘velocity_x’ (a userdata value)” [*20160113]
  • a Example(geometry) - add cylinder_mesh.gem (cylinder mesh) example
  • a Example(magnetic_potential) - add ring permanent magnet examples (mag_2ring_2dc.iob, mag_ring_2dc.iob), similar to disc magnets but with holes.
  • a Example(excel), Example(gnuplot) - excellib and gnuplotlib plot - add xtics and ytics to parameters for spacing between tic markers
  • a Doc(fly2_file): support vectors inside FLY2 sequences, e.g. position = sequence { vector(10,0,0), vector(10,1,0), vector(10,3,0) }
  • c SL Libraries Fix Python 3 compatibity (except).
  • a simionx.Constants - Various physical constants: add CODATA2014 table of constants (note: SIMION still uses CODATA2010).

  • x SLTools and SL Libraries C++: Fixed PATXT -> PA, was importing points as single precision floats rather than more accurate double precision. [*sm20150817]
  • x Example(poisson_superfish) - Fix planar non-mirrored symmetry import failure in psflib.lua:convert (unrecognized symmetry). [*ro1158-th1686]
  • c Example(lens_properties) - beamutil.lua - eliminate lensutil.lua dependence and make plot library optional. [*as20150918]
  • c Example(misc) - fluent_to_ip_simion_pas: Add support for Fluent version 3 IP files.
  • a Example(helmholtz_coil) - add rectangular coil example [*20160104]


  • A Modify display enhancements:
    • C Modify: Colored electrodes in 2D views based on potential. See Modify Color. [*dc]
    • C Modify: Edges of electrodes are now outlined in 2D views, reduces chance of interpreting electrodes as one grid unit wider than they really are. See Modify Edges.
    • C Modify: 2D views now show electrode points in other planes as non-electrode points of a different shade of green. Allows understanding layered cross sections better. See Modify Planes.
  • a Modify: “Flood Fill” now works on 3D OpenGL view as well after clicking point.
  • x Modify: 3D OpenGL view now updates on GEM file updates (GeomF button), as well as Replace/Edge F.

Minor updates to examples/documentation. Plus new “flood fill” command in early access.

  • c Example(excel), Example(gnuplot) - Improvements to incremental update of surface plot (plot:update), refreshing only every two seconds or plot:force_update() when plot.queued_updates true.
  • c Example(excel), Example(gnuplot) - new chart_type of none to display plotting chart (e.g. only tabulate data in Excel but not plot). Also supported on plot_surface in excellib. [*tz201505]
  • c Example(excel), Example(gnuplot) - new bar gap parameter to plot function.
  • c Example(lens_properties): beamutil.lua improvements: (1) Ignores dead particles, (2) Linear interpolates between steps. (3) Allows beam to go in negative x direction also. (4) Uses plotlib.lua–faster and allows using both Excel and gnuplot.
  • A Doc(ganil_2015) - Link to GANIL SIMION day user meeting 2015 notes.
  • A Doc(lambert_cosine) and A Example(particles) (with lambert_cosine.fly2) Lambert cosine distribution for emission.
  • c Doc(lorentz_force_law): expand notes on gravity and m/z


  • A Modify: New “Flood Fill” button to replace points in contiguous region containing selected point. This is also known as a “seed” or “bucket” fill in paint programs. This makes changing electrode numbers on complex shapes trivial, as well as filling in hollow electrodes from STL import. There is also a Lua API function: pa:flood_fill.


  • A Doc(calling_external_programs) - much expanded, with command-line, ZeroMQ, TCP socket, pipe, and other notes.
  • A Example(multiprocess_zmq) - Multiple SIMION process parallel Fly’m example formally incorporated (e.g. splitting Fly’m jobs across multiple SIMION instances, such as for optimization problems – tune_series.iob). Also added ZeroMQ client-server computation example, demonstrating communication with various between SIMION and languages (Lua, Python, Perl, C, C#, and F#) via ZeroMQ. See also Calling External Programs.

  • X(critical) Refine/Poisson: Fix Poisson Refine failure resulting in indeterminate (-1#IND) potentials throughout the entire PA. This bug only affected 2D PA’s with space-charge (Poisson) in SIMION TEST versions starting with due to major code refactoring in Refine code in that TEST update. Skipped-point or surface enhance refine must also be enabled for the problem to occur. Fortunately, this error is easy to see when it happens, as all non-electrode points in the PA would generally become indeterminate on such a refine, making the PA unusable. The bug pertained to indeterminate order-of-execution evaluation of the space-charge term and might not occur when –num-threads=1. It is observed in the examplespoissonpierce_2dc.iob resulting in -1#IND potentials throughout the entire PA after the first iteration. [*dl20150126].
  • c Particles: Time-of-birth (TOB) maximum now 1E+14 microseconds. Was 1E+6 microseconds. [*am20150427]
  • c Modify: Now show mm coordinates and fractions of a grid unit coordinates in status bar.
  • c Modify: Mouse hover delay reduced to 0.1 s (from 0.2 s) for faster responsiveness in status bar.


  • A Refine: New RAM-only PA# Refine option – Refines PA# arrays entirely in RAM, without writing solutions array files (e.g. .PA0, .PA1, etc.) to disk. Usage: pa:refine{disk=false} (pa:refine) or simion ..... fly --disk=0 quad.iob (fly –disk=d). [Sponsored feature *kp20141124]
  • c Linux: Temporary files are .simion/GUI*.TMP not .simion\GUI*.TMP. [*kp201501]

This update reduces multicore refine performance loss during heavy CPU load from other programs and makes some other changes.

  • c Refine: Mitigate major Refine performance loss when other programs using CPU cores that Refine is using. See Doc(multicore) notes on OMP_WAIT_POLICY=ACTIVE Windows environment variable, which is now the default setting.
  • c Linux: timers now measure wall-clock (not CPU) time, such as when reporting Refine duration, like on Windows.
  • c Particles: allows charge weighting factor (CWF) to be negative in particle definitions–useful for Poisson solver piclib.lua.
  • c minor enhancements to “not enough disk space” Refine error.
  • c Example(poisson): piclib.lua: Add new option PIC.refine_skipped_point to enable skippd point refining, which sometimes improves performance when the charge distribution changes little between refines.
  • c Example(bender_cut): quadrupole deflector turning_quad_xy.gem now has a proper enclosure to reduce fringe fields outside the 90 degree turn. Also added page Doc(quadrupole_deflector).
  • X Example(quickfield): qflib: fix imported magnetic cylindrical scalar potential values in PA values being 1000x too small due to older QuickField versions wrongly reporting units “A (Wb/m)” rather than “F (Wb)”. Works arounds problem by correcting units.
  • c internal changes (not visible to user): refactoring of Refine




  • A Doc(intel_xeon_phi) - Preliminary native non-GUI SIMION binaries for the Intel Xeon Phi coprocessor now available. Warning! largely untested.
  • a Doc(hpc_cluster) - new preliminary page on clusters

  • a API: New simion.experimental.binary_pack() and simion.experimental.binary_unpack() for packing and unpacking numbers as binary bytes in string.
  • a CommandLine: New --lua <code> command line argument to execute Lua statements or file upon opening SIMION (and prior to executing any other commands on command line). See –lua <code>.
  • c simion.lua: Error in SIMION startup script (simion.lua) will no longer terminate SIMION if not running a command.
  • c simion.lua: Make simion.exe lua -i test.lua (GUI interactive mode) not freeze GUI.
  • X Modify: Fix: switching between ZY/XZ/XYZ Modify views was often crashing. This was a regression in
  • x simion.lua: Fix: simion.exe --nogui (without arguments) wasn’t executing SIMION startup script (simion.lua) (minor).
  • x Example(drag), Example(collision_sds), Example(faims): properly handle mobility for multiply charged ions. Previous versions assumed ions were singly charged, causing TOF’s off by a factor.
  • x API(simion.wb): PA instance rotation angles when set from the API (simion.wb, simion.wb instance.el, simion.wb instance.rt) or GUI (View > PAs > Positioning) are no longer automatically changed to standard form. For example, (az,el,rt)=(0,180,0) and (az,el,rt)=(180,0,180) represent the same rotation, and the former used to be automatically rewritten to the latter form. But this rewriting can cause confusion if the three angles are set one at a time. The rewritting also wasn’t properly updated in the GUI. [*r th1515].
  • x Example(poisson): piclib.lua: Minor fix to error message if charge PA size wrong. Was displaying “attempt to concatenate local ‘pa’ (a userdata value)”. [*ja th1517]


This release add a simple GUI library and drag&drop support.

  • A GUI(drag-and-drop): Files can now be dragged and dropped from Windows Explorer into the SIMION window. This includes PA, GEM, IOB, CON, and ION/FLY/FLY2 files.
  • A GUI Library (simion.experimental.dialog) - New Lua library for creating dialogs and simple GUI’s.
  • a simion.pas pa:binary_import() - New function to quickly read data points from a binary file into a PA.

  • a simion.experimental.remove_particles(): removes particles from intialize_run segment. This does the opposite of simion.experimental.add_particles().
  • c GUI/Contours - allow contours larger than 1000000 V or mags. (e.g. useful for magnetic vector potential in early access)
  • c Example(resistive): new lens2_pa0_build.lua example creating two solution arrays per electrode, one for DC offset and one for DC ramp (using .pa+ file).
  • X Example(poisson) piclib.lua - Fixed Z cell size (dz_mm) was being read from Y cell size (dy_mm). This only affects 3D arrays with grid cells having lengths that differ in the Y and Z directions. [*ps-th1501]
  • x Example(poisson) piclib.lua - Variables for detecting periodic updates (last_tof, rebuild, ndisplay, nstep) are now reset between reruns. This only affects “charge” mode with reruns. [*ps-th1501]
  • c Example(electrostatic_induction): update inductionlib.lua and example to support measuring induction on multiple electrodes independently. [*]
  • c Example(magnetic_potential): Add 3D version of uniformly magnetized sphere (mag_sphere_3dp.iob)
  • c Example(magnetic_potential): Add quadrupole electromagnet in 2D planar symmetry (emag_quad_2dp.iob) and quadrupole permanent magnet in 2D planar symmetry (mag_quad_2dp.iob).
  • C Doc(gem_geometry_file): add new “Helpful Tips for Authoring GEM Files” section
  • c Doc(time_dependent_field): add notes on rectangular waveforms.
  • a Doc(plotting_fields)


  • c Example(secondary): remove history.lua. Now instead uses SIMION 8.1 simion.wb:efield API to measure fields away from surface.
  • x Fix possible instability with 3D OpenGL views of 2D planar arrays.
  • c View/GUI: Under PA “Scale” factor, change display of “? mm/gu along x” to just “? mm/gu” (for square/cube cells) or “? ? ? mm/gu xyz” (for anisotropically scaled cells). (minor) [*tz20130522] []
  • a Doc(graphics_card): add page on graphics cards []
  • x Example(einzel): Fix einzel_param.gem - ID and OD were actually radii not diameters []
  • internal: refactoring to context help code, GDI drawing, file selection dialog, mouse coords, scroll control mouse lock, memos (linux compatibility)
  • internal: minor gui library update


  • c GEM: Macro lines beginning with ‘#’ can now be indented by spaces or tabs. This allows cleaner indenting of GEM code. [*as20130516]
  • x IOB: Fix crash on loading .iob with missing PA having ‘3dplanar[xyz]’ symmetry. [*bb20131021]
  • x Fix error message: –trajectory-path should be –temp-path (minor)
  • x SL Libraries: add missing “#include <cstddef>” in util.h (gcc 4.8.1) [*pk20131021]
  • c Doc(sltools_stl): Add notes on AutoCAD multiple electrode STL export.
  • a Example(excel), Example(gnuplot): Add xmin,xmax,ymin,ymax,xlog,ylog parameters to plot function.
  • a Doc(command_line_interface): add new page
  • a Doc(light_optics): add new page
  • c Doc(lens): add theory section
  • a Doc(particle_trajectory_calculation): add new page

EA-20131118 (Early Access Mode)

  • A Linux: Add native Linux build of simion and sltools. Currently, these are non-GUI and preliminary (need further testing).
  • c Linux: Use ~/.simion rather than c:\FILES.GUI for settings directory on native Linux.
  • c Linux/internal: reimplement free disk space check on Refine, file copy on workbench save or trajectory keep, fly file load, fly file import, temporary trj*.tmp filename determination, handling rn in GEM files
  • x simion.experimental.add_particles(): remove extraneous printing ‘new’ to log window when this function is called.
  • Programming(reserved): New sim_relativity reserved variable, controls whether relativistic effects are enabled during the Fly’m. [*tz]

  • SL Libraries: Add missing cstddef include for pa.h compilation under g++ 4.7 linux.
  • Double: Fix possible format error in error message “Insufficent room for multiplying size of array” when doubling large array. (minor)
  • internal: upgrade libraries, handling things like file system and command line argument parsing. This should have no external effect. /

This release has a fix to Particles Define “Coordinates relative to” and various minor things. It also documents SIMION Advances.

  • X Particles/GUI: Fix “Coordinates relative to” box in the Particles Define screen may be inconsistent with FLY2 definitions being edited, upon first loading SIMION. Upon first loading SIMION, the particle coordinates (“Coordinates relative to”) were defaulting to “PA Instance 1(1) origin”, and the Particles Define screen displayed this. However, the temporary FLY2 definitions being edited on Particles Define internally defaulted inconsistently to “Work Bench Origin (mm)”, which could cause some confusion. Example: Upon first loading SIMION and creating an empty workbench, toggling the FLY2 “Edit as text” on and off or saving and reloading the FLY2 file would oddly switch “coordinates relative to” from “PA Instance 1(1) origin” to “Work Bench Origin (mm)”. This apparently was rarely noticed since some conditions like loading existing particles from disk force consistency thereafter. Affects 8.0.0- & [*sv20130204]
  • A Doc(advances): summarizing new features and techniques available in recent SIMION versions. Long time SIMION users may discover new capabilities and easier ways of doing things.
  • c Doc(workbench_program_extensions): update Fly’m flow diagram with initialize_run, terminate_run, and flym segments.
  • x OSX/CrossOver: Fix mouse scroll wheel not responding on Modify 3D screen. Add more notes on mouse buttons on Mac OS.
  • x Example(contour): Fix “scalar and vectors not supported in same plot” error can incorrectly occur when switching between vector and scalar plots.
  • c simion.early_access() now raises an error if early access is not supported.
  • c Example(lens_properties): surface_plot.lua: Add electrode numbers _VA_number/_VB_number. lensutil.lua: Remove surface plotting code since plotlib.lua and excellib.lua already handle this. spread.lua: Remove 8.0 compatibility code; automatically enable grouped flying.
  • a Example(solenoid): Add solenoid_write program example of writing field to .csv text file.
  • x Example(plot): Fix “Time-of-birth…is out of range” error in tof_histogram.iob.
  • x Example(count_transmission): Fix y_begin and y_end swapped in print statement. (minor)

This release has major internal (largely invisible) changes to the Modify OpenGL 3D view in preperation for the next version of SIMION.

  • A:View/SurfaceEnhancement: The View screen now displays PA surface enhancement. This allows more easily visualizing and measuring positions of electrode surfaces to sub-grid-unit accuracy. (This change has no effect on the Fly’m calculation, however.)

EA-20130509 (Early Access Mode)

This release brings OpenGL 3D graphics to the View screen and related improvements.

  • A:OpenGL: Add OpenGL graphics on View screen. It is accessed via the new “3D” button on the View screen. This is similar to the Modify 3D view but displays PA instances, trajectories, and potential contour surfaces.
  • A:OpenGL/SurfaceEnhancement: Modify/View “3D” views now display Electrode Surface Enhancement / Fractional Grid Units.
  • A:OpenGL: “Cell” checkbox option on Modify/View 3D views display outlines of PA grid cells.
  • A:STL: Add “Export” button on Modify/View 3D views to export PA or IOB to STL file. This is similar to the SL Tools PA-to-STL function but operates entirely within SIMION. [*ww201212-th1351]
  • A:STL/API: Add simion.wb:save_stl() for saving an IOB (with PA instances and particle trajectories) in STL format.
  • c:OpenGL: Improvements to Modify/View 3D views “Normals” display, putting dot on start of surface normal and preventing overly long lines.
  • a Example(geometry): Add sphere_mesh.gem - triangular mesh on sphere example
  • a Example(octupole): Add octupole_idea_build batch program example, comparing calculated and theoretical fields.
  • a Example(misc): Add another gas flow import example.
  • a Example(matlab): Add MATLAB(R)/Octave macro for exporting arrays from Matlab/Octave to SIMION PA’s and other interfacing examples.
  • A Example(molecular_beam): New molecular beam examples (beam of neutral molecules with dipoles).
  • a Example(helmholtz_coil): Add saddle coil sub-example.

  • x Modify/3D: Fix possible crash on entering Modify 3D view. [*zr20130402]
  • x Locale/Wine: Fix sometimes failing to recognize and use US style numbers (e.g. “1.2345”) under Wine (Linux/OSX) configured with certain system locales. For example, even when using a French (fr_FR) system locale under Wine 1.4.1/Linux, where “,” is the numerical decimal point character, “.” should still be used for compatibility reasons. However, entering =tostring"0.0" in the SIMION command bar was wrongly returning nil (rather than 0), whereas =tostring"0,0" returned 0. This problem seems to only affect SIMION >= under newer Wines (e.g. 1.4.1 and 1.5.27). The problem appears to be related to Wine failing to recognize “English_United States.1252” passed to the CRT setlocale function. A temporary workaround in previous SIMION versions is to enter os.setlocale"C" in the SIMION command bar. Both SIMION and SL Tools are now updated to workaround this. [*ww-th1395]
  • x Refine: Fix “Abort: Not enough disk space” error may wrongly occur on .PA# refine due to incorrect calculation of “bytes available” based on current disk drive rather than disk drive and directory on which the PA# file is stored and refined on. Affects mainly >= due to absolute path handling changes in that version.
  • x SLTools: Remove old vcomp100.dll dependency. Error “could not load vcomp100-x32.dll” occured on SL Tools startup if this file was missing, even though it is longer needed as of
  • a API: Add simion.loadx() for allowing load* functions to recognize SIMION reserved variables.
  • A Doc(space_science): add page
  • x Example(geometry): hexapole.gem - fix comment on proper efield_adjust segment for antimirroring.
  • x Example(poisson) pierce_gunpierce_collisionpulse_2dcyl.lua: Add missing call to old initialize_run segment, to fix error about “local ‘mass_gas’ (a nil value)” when used with SDS. [*m2-th1389]
  • x Doc(lua_simionx.CachedField): fixed broken since simionx.FieldArray v20120313. Affected SIMION Example: solenoid with CachedField enabled. [*sf-th1393]
  • a Example(geometry): add duct_rectangular_tapered.gem (tapered rectangular duct / truncated pyramid)
  • a Example(geometry): add polygon_regular.gem (regular polygon, defined with convenience macros)

This release has a few minor fixes. Documentation is also expanded.

This relese has various minor fixes and enhancements.

  • c GUI/IOB: On IOB load, if referenced PA files are missing, display PA header info and offer to create empty PA files of the same dimension as placeholders. [*20121208]
  • x GUI/IOB: Prompt user if want to build missing .pa style array from .gem file during .iob load. Relates to feature added in
  • x GUI/key: Fix CTRL+V (paste) wasn’t working in text fields since the graphical window was grabbing the CTRL key. CTRL/ALT/Shift key down events are now ignored when outside the graphical window. (Shift+Ins is a workaround in previous versions.) Affects since 8.0.5. [*sf-th1350]
  • c GUI/status: Improve % progress status panel for nested operations like fast adjust. E.g. “33%>20%” means 20% done with electrode 2 of 3. [*tz20121210]
  • x GUI/status: Fixes to % progress status bar update and ESC handling, such as during GEM processing (minor).
  • c GUI/Exit: Clarify prompt on attempting to close SIMION: “Potential array(s) have changed. Quit SIMION without saving?”.
  • c GUI: Display error messages as UTF-8 Unicode (not ASCII) character set. For example, for formatting LuaCOM errors from non-English version of Excel. [*tz201212]
  • c GUI: Reduce ungrammatical use of caps in displayed text throughout SIMION.
  • x GUI: Fix crash on exiting command-line GUI mode (“assert m_canVeto”). Affects since Also some changes to SIMION behavior on Windows shutdown.
  • x GUI/Wine: Fix assertion (msgdlg AdjustButtonLabels) upon message box display under Wine/Linux.
  • x Example(spectrum): Fix plot_it had extra/missing first and last steps in the scan. [*tz20121222]
  • x Example(excel): excellib: In bar/area plots, place tick lines on center of bars. [*tz201212]
  • x Example(excel): excellib: Check that labels don’t exceed 255 characters, to avoid error message from Excel. [*tz201212]
  • a Doc(field_io) (expanded from FAQ page)
  • internal: minor gui library update, disable gui assertions.

This release makes some fixes to and does an internal update to the compiler.

  • x GUI/Fly: “Dot” flying speed at intermediate speeds can be controlled better now. Before there was an abrupt transition between fast and slow speeds.
  • x GUI/Refine: Fix GUI not updating during Refine and Dot flying. Affects since
  • x GUI/GeomF: Ensure Modify GeomF transformation parameters are preserved upon re-entering GeomF screen. Affects since [*sf-th1347]
  • internal (not externally visible): update compiler used, patch runtime DLLs.

This release makes various minor improvements in the GUI and simplifies the FAIMS example.

  • x GUI/keyboard: Fix keyboard tab traversal problems on some screens. Affects since 8.0.6-TEST7. [*]
  • c Modify: Eliminate bothersome prompts on entering/exiting Modify screen.
  • a Modify: “Undo/Cancel” can now revert from original PA file too.
  • c GUI/GEM: File paths of PA’s created from GEM files now default to the GEM file path with the extension changed to “.pa”. [*tz] Furthermore, Modify GeomF now infers better the GEM file to select, using the last GEM file applied to that PA else the path of the PA.
  • c GUI/command: Command bar errors now display in a popup box with traceback for easier reading.
  • x GUI: Fix minor screen sizing issues:
    • x GUI/GEM: Fix: “Use Geometry File (.GEM)” button was off-screen when frame is small.
    • x GUI/Particles: Prevent “Particle groups” (Particles Define) panel hiding when frame is small.
  • x GUI/Contour: Fix: “Del” and “Change” buttons not redrawing contours. Affects since
  • x PA/GEM: Fix: Unsaved flag not set on PA’s created from GEM. (minor).
  • Example(sds) and Example(faims) changes:
    • c SDS: T.Qual now automatically defaults to 0 on IOB loading (via segment.load).
    • c SDS: Move code into segment.initialize_run from segment.initialize to simplify and improve robustness.
    • X FAIMS: Fix error about 'alpha' (a nil value). Affects since
    • c FAIMS: Eliminate plates_waveform*.iob and spectrum_waveform*.iob examples since plates.iob and spectrum.iob now do the same thing using squarelinewavelib and experimentallinewavelib.
    • c FAIMS: Some refactoring in waveform libraries. Rename SDS_quick_period to wave_period to simplify waveform libraries. Eliminate old workaround code in spectrum.iob terminate segment. Elminate confusing proto_vhigh/vlow/duty in experimentallinewavelib. Rename WAVE.set_waveform to WAVE.set_waveforms. Replace excellib with more general plotlib and rename excel_enable to plot_enable.
    • a FAIMS: Add bisinusoidallinewavelib, which is similar to bisinusoidalwavelib but composed of line segments using waveformlib (i.e. digitized waveform), as a check of waveformlib accuracy.
  • internal (not externally visible): update GUI library, other GUI refactoring.

This release makes some important improvements to GEM file accuracy.

  • A GEM: New surface=auto parameter in pa_define. This provides a simple way to more accurately position curved surfaces and cutout (notin) volumes when not using surface enhancement (surface=fractional). This particularly applies to circle/sphere/cylinder, hyperbola (Issue-I371), parabola, polyline, notin, and others. Surface enhancement is still better, but if you don’t want to use surface enhancement for some reason, then this is better than nothing. See surface=auto option in pa_define [].
  • C GEM: within_inside_or_on/notin_inside_or_on now shift the electrode surface outward by a small 0.0001 gu offset. (within_inside and notin_inside already apply this offset but in the reverse redirection.) This more reliably ensures points “on” the shape boundary are filled even when small numerical round-off occurs in operations like polyline and scaling. Example: fill{within_inside_or_on{box(1,1,5,5)}} and fill{within_inside_or_on{polyline(1,1, 5,1, 5,5, 1,5)}} behave identically now, as expected. [*]
  • x GEM/polyline: polyline GEM command accuracy has been improved. Previously, the points on the polygon edge might not be optimally filled with the desired electrode/non-electrode point type. This particularly affected within_inside/notin_inside/within_inside_or_on/notin_inside_or_on rather than within. However, under surface=fractional, it also affected within/notin (but is somewhat cosmetic since electrode point types on the surface are not critical for field accuracy under surface=fractional). Example: polyline(10,5 15,5 15,10 20,10 20,15 15,15 15,20 10,20 10,15 5,15 5,10 10,10) (cross).
  • C GEM/Surface: PA grid points that precisely align to an edge of a within/notin fill volume are made to be electrode points if surface=fractional or surface=auto is enabled. In other words, a notin inside an e or a within inside an n (both of which remove electrode material) will be treated as an “inside” fill to avoid removing the electrode points from the border. This largely avoids fiddling with within_inside/within_inside_or_on/notin_inside/notin_inside_or_on fill variants since within and notin will now just do the right thing. The default option (surface=none) retains the old behavior for compatibility though. Example: e(1){fill{within{box(1,1,5,5)} notin{box(1,1,5,5)}}} and e(1){fill{within{box(1,1,5,5)}}} n(0){fill{notin{box(1,1,5,5)}}} both create a 4x4 hollow box with infinitesimally thin walls under surface=auto or surface=fractional. See surface=auto option in pa_define [].
  • c GEM: polyline, points, and points3d commands can now accept an arbitrary number of points. Previously these were limited to 100, 100, and 65 points.
  • x GEM: Fix polyline problems when using exactly 100 points. [*sf-t1338]
  • x GUI/FileOpen: Fix File Open dialog box not remembering last folder. Affects since [*tz]
  • internal (not externally visible): minor luacom update

  • x Fix CPU consumed during program idle. Affects since
  • x Fix simion.early_access() possible crash.
  • c Doc(lens): Link to Electron Focusing Lens for a Modulated X-Ray Source (2011 Olin-NASA Research Group) Einzel lens simulation web site.
  • a Example(quad): Link to Batey quadrupole slides in README.

EA-20121105 (Early Access Mode)

  • Programming(reserved): New sim_ions_count reserved variable, containing number of particles in Fly’m. [*]
  • Programming(reserved): New ion_ke reserved variable, providing more convenient read/write access to current ion kinetic energy (eV). [*]

This release improves performance, such as Flym speed under Wine/Linux and CrossOver/Mac OS X. It’s strongly recommended for Linux and Mac users.

  • C Wine/Flym/Performance: Flym speed under Wine/Linux and CrossOver/Mac improved significantly. Speed improved a couple times in GUI and non-GUI modes and is close to native speed now. Flym speeds might have gotten worse under recent Wine versions, but this should fix that.
  • C PA/Surface/Perf: PA surface enhancement info loads from disk faster.
  • x API(simion.pas): simion.pas pa:crop() wasn’t properly guarding against attempts to crop a region larger than the original PA.

This release has some cropping improvements and minor fixes.

  • A API(simion.pas): simion.pas pa:crop() now saves electrode solution arrays on disk as well (new persist argument).
  • AX Crop/API(simion.pas): Cropping (on Modify screen or simion.pas pa:crop()) now properly preserves surface enhancement information.
  • x Startup: Fix possible crash on startup if SIMION 8.0.0-8.0.3 previously opened (alters FILES.GUI directory). Affects
  • a Example(geometry): Add two_cylinder-1.stl and two_cylinder-2.stl to (separate STL file for each lens element).
  • x GUI/SpinCtrl: The View screen > Display tab > 3D zoom depth control may not actually update the displayed zoom level when first changed following a +Z3D. Other spin controls might exhibit a similar issue in rare cases. Affects (minor).
  • c internal changes (not visible): some View screen view structure refactoring

This release improves control of fast adjusting/scaling during IOB loading.

  • a IOB: Add .iob saving option to disable “save/retain” of “Electrode potentials (inside .iob)”, thereby preventing automatic fast adjusting/scaling upon subsequent .iob loading. This has similar effect to the batch mode fly --restore-potentials=0 option. Also, the existing option to “save/retain” of “Potential arrays that were fast adjusted (.pa/.pa0)” has been renamed to just “Potential arrays (.pa/.pa0)” since this can save PA’s that were changed for any reason (including editing from the PA API). See How can fast adjusting be prevented on IOB load?. [*am20121004]
  • a IOB: Add prompt “Fast scale these PA's in memory to match potentials from the IOB file?” upon loading an IOB with a basic array (.pa) file whose scaling potential does not match the scaling potential stored in the .iob file. See How can fast adjusting be prevented on IOB load?. [*am20120928]

This release fixes a long standing limitation in the .IOB file format, fixes some old PRG debugger issues, and makes various internal changes.

  • XC IOB/Format: .iob files can now store potentials for electrode numbers > 32 now. (IOB mode 3 format). (Max Electrodes, Issue-I533) [*]
  • x PRG/Debug: Fix: running old style PRG code segments from “Program Test” debugger crashes if PRG code raises an error. Affects 8.0.5.x-
  • x PRG/Debug: Fix: Old PRG debugger “Run Segment” button may crash if “Trace program execution” enabled and PRG contains an array. Corrupt data may alternately display before “Array Allocated and Pre-Zeroed”. Affects 8.0.0-
  • c internal changes (not visible): refactoring of some Flym code in preparation for Flym parallelization.

This release improves Log window performance by an order of magnitude and avoids display refresh lags, roughly doubles GUI mode Flym performance under CrossOver Mac, adds a new Example(resistive) for electrode potential gradients, and has various minor fixes and API additions.

  • C GUI-Log/Performance: Improve Log window performance by more than an order of magnitude. This is most noticed on Data Recording on every time step.
  • C Mac/Performance: GUI-mode Flym performance under CrossOver Mac (OS X) roughly doubled.
  • x GUI-Drawing: Ensure the GUI is always redrawn during a Fly’m, even on frequent Data Recording (e.g. every time step). Previously, this could temporarily freeze the GUI.
  • A Example(resistive): Add example building PA/PA0 files with continuous voltage gradients on surfaces (resistive electrodes).
  • a Example(geometry): Add twisted_rods_build example: bent, twisted, sheared, variable radii rods/tubes/wires using PA API.
  • a API(simion.pas/wb) - PA and IOB absolute paths now accessible from the API: simion.pas pa.path, simion.wb.path and simion.wb.filename. Some changes to simion.pas pa.filename behavior.
  • c API(lua): load* functions when passed a filename ending with .wblua are now processed as workbench user programs (Load Functions) with the special access to reserved variables. (Note: See also simion.loadx in
  • a API: New simion.experimental.running_segment() function returns name of currently running segment.
  • c BatchMode: Particle splat status messages (e.g. “10 Splat: xyz(96,3,0)mm, v=43.926mm/usec”) no longer display in Log during GUI batch mode. They also are now prefixed by “status2,” in non-GUI batch mode.
  • X IOB/Load: Fix: On loading an IOB file referencing a non-existent .P[B-Z]0 file, in some conditions the .PA0 file was auto-loaded into the workbench (or a file not found error was raised) instead of generating it. Affects >= particularly (GEM autoload).
  • x API(simion.wb): Fix simion.wb:find_at(), simion.wb:bfield(), simion.wb:bpotential() may incorrectly return 0/nil for B-field prior to start of Fly’m.
  • x Programming: Trajectory viewing option (sim_trajectory_image_control) changes made in a load segment were being ignored in GUI mode.
  • x Programming: Fix crash upon sim_trajectory_image_control, sim_trajectory_quality, or sim_rerun_flym changes in load segment (prior to View screen display).
  • x IOB/View: Remove extraneous warning: “Missing NONAME01.PA array. Details: The workbench (.iob file) references the non-existent solution potential array (NONAME01.PA).” which could occur when re-entering the View screen with unsaved PA’s. Affects >=
  • x GUI: Fix: When Rerun is enabled and all particles fail to initialize, an error dialog box displays repeatedly (“Aborted: No particles created. Particle 1: terminated in electrode or beyond volume.”), requiring forced program termination. Affects - [*ms]
  • x CrossOver Mac: Fixed warning about “FontEnumerator::IsValidFaceName(font.GetFaceName())” upon loading Log window (or View screen). Confirmed in CrossOver Mac 11.2.2 / SIMION <= Prior to this fix, a workaround is to click “No” when prompted “Do you want to stop the program?”.
  • x FilePath: Fix some rare issues by keeping track of absolute paths of all open files, including PA’s. This can make links between PA’s and IOB’s more robust in cases when the current working directory is changed. Fix some issues with File Open dialog box changing the current working directory (e.g. annotations .ann). Run Lua Program button now restores the current working directory on script exit if an IOB file is open. Fix to OS X/CrossOver Doc button possibly sometimes not opening right page. Update displayed .rec filename upon IOB save. Update displayed PA instance list when PA or IOB file paths change from API.
  • x GEM: Fix corruption when include() raises permission denied error.
  • x GUI/Log: Fix assert warning about OK/YES/NO on attempt to close Log window during batch mode program.

8.2 Early Access Mode features previewable in

This release provides a major new Particle API for creating particles during the Fly’m.

This release provides an extension to SDS supporting chemical reactions (Example(collision_rs)), a new plotting library that wraps the gnuplotlib and excellib libraries (Example(plot)), thumbnails images in the Example(geometry) README, and various small fixes/changes.

  • A Example(collision_rs): New example of SDS + chemical reaction simulations. By U. Wuppertal.
  • A Example(plot): New plotting library providing a consistent API across Excel, gnuplot, and other programs. Examples included. This wraps around libraries in Example(excel) and Example(gnuplot).
  • C Example(geometry): Add thumbnail images to README.
  • C Example(hda): Use flym (and load) segment to simplify code, and remove Extract surface plotting into external excellib library. Support plotting 1D (not just 2D) scans. Fix sometimes reversal of surface plot labels depending on voltage scan ranges. Scan in a more incremental way, showing rough before detailed picture. Add transmission plot (in additional to beam size plot). Allow disabling Excel (_use_excel variable). Change adjustable variable names. Enable surface enhancement in GEM file.
  • c Example(spectrum): Allow slit size in PA to be quickly changed from View screen adjustable variables. Enlarge detector. Alternate between forward/reverse scans when doing multiple scans. [*]
  • c Example(hda), Example(spectrum), Example(electrostatic_induction): Replace excellib/gnuplotlib with plotlib.
  • c Example(icrcell): Replace particle randomization code with FLY2 file. Automatically enable Grouped flying and T.Qual=0 on IOB load. Add adjustable variable to limit Fly’m time.
  • x Example(icrcell): Fix ignoring user changes to some fast_adjust related adjustable variables from the Variable tab. [*]
  • a Example(excel)/Example(gnuplot): add 2D surface plotting function (plot_surface) to excellib and gnuplotlib. Used by hda example.
  • c Example(gnuplot): some refactoring code (
  • c Example(tune): Display tuning goal at end, like other examples. binaryoptlib: n wasn’t incrementing in output. Rename voltages A and B with electrode numbers. tune_series: Add V2_count/V3_count variables, and use excellib. [*tz20120809]
  • a Example(geometry): Add disc_segmented.gem - segmented disc geometry [*]. Make tune.gem cylindrical.
  • a Example(einzel): add GEM files. [*tz201208]
  • c Example(random_fly2): rename cone_angle_off_vel_axis to cone_half_angle.
  • x Example(lens_properties): cardinal_points: avoid sometimes detecting y=0 crossing when particle starts at y=0 [*tz20120826]
  • a Doc(mass_spectrometry): add page
  • a Doc(asms): add page
  • c Doc(particle_initial_conditions): add user program to reverse particle trajectories. [*tz]
  • x IOB: Improve robustness of .iob file loading. Raise errors on various workbench parameters out of range. Clear previous particles and data recording options when IOB loaded from View > Workbench > Load. simion.command 'name.iob' no longer changes current working directory on .iob file load failure. Improve error strings raised by simion.command 'name.iob'.
  • c PA0: Eliminate check that electrode potential in fast adjustable solution arrays is correct (“Wrong Reference Point Potential”). This allows easier editing of .pa[0-9] arrays–for example, things like pa:load'test.pa1', edit PA electrode potentials, pa:refine{}, and pa:save()'', to do things like applying gradients on electrodes.
  • x Refine: pa:refine with solutions parameter not containing 0 was was wrongly deleting .PA0 file. Affects since
  • a API(simion.printer): Add simion.printer.scale.
  • c Print: Printer options pixel scaling factor now defaults to 1 (not 10).
  • c Example(collision_sds)/Example(collision_faims): libraries and files loaded by collision_sds.lua can now be searched relative to the directory containing that file. This avoids needing to copy all these files into your project directory. [*] Always guard against negative local pressure and temperature. New versioning support.
  • x Example(poisson): minor piclib improvements: Fix find_charge_pa only looking at first PA instance. Warn if space charge PA instance scaling factor not 1. Delete any residual space-charge from previous flym in charge mode.
  • c Example(lens_properties): cardinal_points.fly2 - increase Delta[y] for easier viewing. [*tz201208]
  • c Doc(system_requirements): compatibility tested on Windows 8.

  • x API(simion.wb): Resizing a 2D cylindrical PA that has a corresponding PA instance on the workbench (as might might occur for Example(geometry_optimization), using simion.wb instance:_debug_update_size() in gemlib update_painst_from_gem) would distort the PA instance volume size in the Z direction (as seen by the green box in the View screen). [*bc20120807] (production)

  • A Example(geometry_optimization): new “mesh_size” sub-example evaluating trajectory changes under many combinations of PA grid unit size and Refine convergence objective.

  • C Example(quad): Add GEM files. Enable surface enhancement for high accuracy. Enable X+Y mirroring on Add quad_monolithic.iob, identical to quad.iob but using a single PA. Add optional theoretical field (efield_adjust) for comparison. Give entrance and exit electrodes two separate electrode numbers. Correct spelling of frequency_hz variable.

  • c Example(kingdon_trap): quadro_logarithmic_build now uses surface enhancement and can evaluate Refine error.

  • a Example(magnet): add GEM files.

  • A Doc(spectrum): new page on spectrum acquisition.

  • c Doc(neumann_boundary_conditions): expand/improve theory section some [*tz]

  • c Doc(resistive_electrodes): add comments on using dielectric solver for this.

  • c Doc(faq): update notes on mm/gu scaling factor

  • a Doc(test_plane): new page on test planes

  • c API(simion.pas): Fix simion.pas tostring(pa) rendering of magnetic scaling factor.

  • x GUI: Improve error message if no Windows file association for .txt files when clicking “User Program…” and similar buttons. Error was [[Execution of command ‘”” <filename>’ failed (error 87: the parameter is incorrect.)]] [*ro20120730][B] (rare)

  • x PA(surface_enhancement): require surface offsets to be in the range (0, 1). Prevent surface offsets on positive PA edges.

    • x Double/Halve: These functions caused the error “Failed loading potential array ( File format is invalid. Found newer PA format (requires >= Simion 8.1.0)” upon reloading the PA from disk. thread1282 [*] Affects - due to regression from 8.1 development.

This release fully optimizes the speed of surface enhancement.

  • C Refine(surface_enhancement): Improve Refine speed for Electrode Surface Enhancement / Fractional Grid Units. This is now nearly on par with Refine speed for PA’s without surface enhancement. Previously it was about an order of magnitude slower.
  • C FileIO(surface_enhancement): Fixed very slow speed loading/saving surface enhancement info.
  • a Example(excel): Add tof_histogram.iob sub-example, computing and plotting TOF histogram.
  • c GEM: More specific message on pa_define errors (was “Aborted: Error in PA_Define Parameters”). [*B]
  • a Example(trap): Link to papers on radial stratification of ions in ion traps
  • c Fly/Limits: Maximum mass changed from 1E+9 u to 1E+100 u. Maximum charge changed from 9E+3 e to 1E+100 e. Maximum KE changed from 9E+9 eV to 1E+100 eV. [*]

  • c Example(bradbury_nielsen_grid): simplify code some and improve comments.
  • x Example(bradbury_nielsen_grid): fixed broken example: reset() gave error “bngrid.lua:43: attempt to perform arithmetic on field ‘mm_per_gu’(a nil value)” since mm_per_gu was renamed scale in [*rj20120627]
  • x PA(surface_enhancement): clear surface enhancement info on in-place PA reload from disk. Affected
  • a Example(surface_enhancement): add code in sc.lua to optionally apply theoretical fields for comparison.
  • c Doc(surface_enhancement): minor improvements
  • c Example(faims): spectrum_waveform2: replaced waveform data and changed proto_duty from 0.25 to 0.3 (more accurate)
  • x Example(misc): fluent_ip_to_simion_pas: Export gas flow units as m/s (not mm/usec) as expected by SDS model.
  • x FileIO: Fixed: file I/O failures were not being reported for asynchronous I/O. An affected example includes attempting to write a PA file when the disk is full. Broken since 8.0.5-TEST30. [B]
  • x SLTools: Fixed to always use US/ANSI style numbers like “1234.56” not “1234,56” regardless of locale (regional/language settings). A change made in SL Tools 1.1.3 unintentionally caused it to utilize the Regional and Language settings in the Windows Control Panel (particularly formatting of commas and periods in the numbers), thereby causing “Bad number format” errors when reading STL files. [*][B]
  • a Doc(field_emission): link to new published paper on field emission simulations in SIMION.

EA-20120626 (Early Access Mode)

  • Example(magnetic_potential): Add magnetized cylinder, double magnetized cylinder, magnetized sphere, permeable torus examples, and magnetized Halbach cylinder examples (mag_cylinder_2dc.iob, mag_2dcylinder_2dc.iob, mag_sphere_2dc.iob, mu_torus_3dp.iob,mag_halbach_cylinder_2dp.iob)

This release is a major update to the PA surface enhancement capability, which can provide more than an order-of-magnitude improvement to Refine accuracy in the case when electrode surfaces are not aligned to grid units.
  • A PA/Refine/GEM: Add PA surface enhancement support in Refine, PA load/save, GEM processing, and Modify screen 2D view display. See Doc(surface_enhancement).
  • A Example(surface_enhancement): new examples demonstrating surface enhancement.
  • c The older 8.1.0 (non-optimized) gemrefine implementation of surface enhancement is now deprecated. Also moved old experimental\enhanced_refine example into Example(surface_enhancement).

This release improves SLTools STL->PA function accuracy, adds an example reloading a FLY2 from a user program, and fixes some GUI bugs.
  • A SLTools(STL->PA): New solid strategy: solid under surface normals in STL->PA conversion provides much of the same accuracy as no extra solid points but ensures electrodes are solid. This is now the default strategy. See solid strategy. [*B]
  • A SLTools(STL->PA): New option to overlap/compare STL and PA objects in “STL->PA” View output window, available via “PA” and “STL” checkboxes. Useful for checking conversion accuracy. ref
  • X SLTools(STL->PA): Fix non-“square cells” with “region rotate” defined. mm/gu sizes were being applied to wrong axes, causing obvious distortions to geometric aspect ratio.
  • A SIMION Example: random_fly2: new example of reloading a FLY2 file from a workbench user program and passing adjustable variables to it.
  • X GUI(marking): Fix mark selections losing focus about five seconds after start of dragging mouse on Modify and View screens. Affects Vista/Win7 (not XP) with SIMION 7.0- (Details: was due to Vista “ghost window” feature in PeekMessage.) [*B]
  • x GUI(Refine): Fix Refine window controls disabled when loading IOB from batch mode (simion.exe example.iob or simion.command 'example.iob') or Windows shortcut. [*B]
  • x Print: Fix “scaling factor” on Print Options screen getting reset to 1. Affects WMF/EMF/PNG/BMP/JPG outputs in ~8.0.5- [*my-20120402,B]
  • also released with backported bug fixes.

This service pack release adds dielectric material support for Refine, a new “field_emission” example illustrating multi-PA refines and emission from curved surfaces, new API functions for accessing workbench fields, a variety of new examples and documentation, and other features. “Early access mode” is also enabled, allowing previewing new magnetic permeability and magnetic vector potential capabilities in Refine slated for SIMION 8.2.

EA-20120430 (Early Access Mode)

SIMION “early access mode” is now enabled to allow early preview access to a few new features slated for SIMION 8.2:

  • X GUI(View): Fixed View screen crashing in drawing certain PA instance rotations (Issue-I588). Affected 7.0 - in rare cases, though more frequently since 8.0.7-TEST5. [*][B] Related also to particle splat detection (Issue-I223).
  • x API(simion.command): Fix possible crash indirectly resulting from command raising exception.
  • Example(ionfunnel): Allow RF adjustment in funnel2 example and warn about DC adjustments. Add funnel GEM.
  • a Doc(emittance): Add beam emittance description.
  • a Doc(cfd): Add notes on use with CFD programs.
  • c Doc(fast_scale_extension): Expand/clarify notes on fast scalable solution feature.
  • c Doc(demotour): Update old Tour of the SIMION Demo article.
  • c Doc(magnetic_potential): Add more notes on magnetic potential theory.
  • also released with backported bug fixes.

  • A Example(pseudopotential): New example for pseudo-potential calc/plotting in RF trap.
  • x Refine(Poisson): Trivial improvements in Aniso Poisson Refine convergence speed. In only initial (skipped) iterations, corrections were made to Poisson space-charge contributions near electrode surfaces in PA’s with anisotropically scaled cells. Although this change could improve Refine speed some (in practice, it does not seem to), it does not affect final result correctness and therefore is unlikely noticeable.

This fixes some issues in
  • X SL Tools: fix crash on PA viewing. Broken recently in
  • x internal: updated support DLLs to latest versions.

SUMMARY: This release has significant updates to the Poisson capabilities, including new examples showing optimized time-independent space-charge mode, (experimental) vector magnetic potential, and RF. Some updates/fixes are also made in various areas, including field plotting.
  • A Refine(poisson): Poisson solver can refine .PA# and .PA0 files now (not just .PA files). See Poisson Solver in SIMION.
  • A Refine(poisson): (experimental) Added vector magnetic potential solving (experimental support). See Magnetic Potential and examples\\poisson\\magnetic_vector_potential (moved: SIMION Example: magnetic_potential).
  • A Refine(poisson): Unit scaling factor can be configured in pa:refine. Allows the Poisson solver to be used more generally for things other than electric fields (e.g. vector magnetic fields, gravity fields, or heat). See the pa:refine “units” API in Supplemental Help.
  • A Example(poisson): Updated piclib library to support a new ‘current’ solving mode, where particles traced represent currents, space-charge is assumed time-independent, and refines are performed between reruns. This can be much more efficient than before. Various restructuring of the piclib code and example file structure has also been made. See Poisson Solver in SIMION > “Computing charge density from trajectories”. Also see updated pierce and new pipe examples.
  • A Example(poisson): Added new sub-examples: pipe_with_charge, pipe_with_beam, RF octupole, and static_charge\sphere_simple (a simpler static charge example), and magnetic_vector_potential. Renamed field_2dpla/field_2dcyl examples. Added palib library.
  • A Programming(variables): New sim_grouped and sim_repulsion reserved variables. to control grouped mode and charge repulsion type. See Workbench Program Extensions in SIMION 8.1.
  • C Example(contour): contourlib81 significantly refactored, and new vmin/max/v0/v1/vautoscale/vscale fields.
  • c Help(Supplemental): Cleaned up listings of API functions in Help Index.
  • c FastAdjust: Fast adjust no longer automatically reloads .PA0 from disk if changed in memory (e.g. Poisson Refine). Affects GUI and pa:fast_adjust.
  • a GUI(PRG): User Program button on Particles tab now opens any old .prg files too [*tz20110826]
  • c API(simion.pas): Setting pa:size no longer clears array if array size unchanged.
  • c FLY2/style: add trailing new lines when saving fly2 files.
  • a CrashDump: Enabled 64-bit crash traceback reporter (previously only available on 32-bit).
  • c GUI: Autocomplete full file names in Data Recording and Print Options screens.
  • c internal: Updated GUI library.
  • X Poission: Fixed occasional PA corruption (non-electrode points changed to electrode points) at locations where mouse is hovering (voltage display) when refining a PA from a user program in the View screen. Affected poisson piclib enabled examples in particular.
  • x IOB(load): Fixed extraneous warning about ng mismatch on magnetic PA load.
  • x API(simion.pas): Fixed pa:refine historical_memory_factor argument wrongly raising error.
  • x GUI(View): Fixed Dots speed slider was reversed. Since 8.1.0.

  • A Example(lens_properties): added particle_spread_measurement sub-example. [*]
  • a Example(geometry): add torus example
  • x Example(poisson): rename C_per_mm_per_particle to C_per_m_per_particle. [*as20111207]
  • x GUI(Windowing): fix dialog box sizing quirks (e.g. very tall), particularly for multiple monitors or partly off-screen windows. Affects >= [*bm20111207]

SUMMARY: New workbench user programming segments are available to simplify user programming, and many of the examples have been updated accordingly. See the much improved “geometry_optimize”, “tune”, “spectrum”, and “lens_properties” examples in particular. SIMION can now automatically create PA files from GEM file during IOB loading. The gas flow (file:collision_sds\test3.iob and faims) have been updated to take advantage of SIMION 8.1’s ability to use PA files for defining and visualizing gas flows. Various other bug fixes and usability improvements were made. DETAILS:
  • A Programming(segments): A new flym user program segment provides a simpler way to express a series of re-runs (by calling run). See Workbench Program Extensions in SIMION 8.1 for details. A number of the examples have been updated to use these new segments: Example(geometry_optimize) Example(spectrum) Example(tune) Example(faims) Example(lens_properties). Example:

    local V1
    function segment.flym()           for i=1,10 do V1 = i; run() end   end
    function segment.fast_adjust()    adj_elect01 = V1                  end
  • A Programming(segments): New initialize_run and terminate_run user program segments are called exactly once prior/after run. See Workbench Program Extensions in SIMION 8.1 for details. A number of the examples have been updated to use these new segments, thereby simplifying and improving the robustness of the code: Example(emittance) Example(excel) Example(lens_properties) Example(spectrum) Example(tune) Example(electrostatic_induction).

  • A IOB(GEM): PA files can now be automatically created from GEM files on loading IOB’s. For example, if test.iob is loaded, and test.iob references lens.pa0, but no lens.pa0 nor exists on disk, but a lens.gem does exist, then upon user confirmation, the lens.gem will be used to create the, and will then be refined to create the lens.pa0.

  • A PA(Format): A new ‘unrefinable’ flag can now be set in the .PA file to safeguard against accidental refining of certain PA’s (e.g. suppress prompts to refine on IOB loading). A typical example is a .PA file that is refined and then cropped (“Crop”) (to reduce RAM during fly’m) but should not again be refined since doing so would discard the effect of the boundary conditions that were cropped out. Another example is in using the feature to store gas flow (pressure, temperature, velocity) profiles in PA files, as the latest collision_sds\test3.iob example does, in which case Laplace is not applicable. This can be set upon “Crop” or via pa.refinable.

  • X PA(Refine): Fixed “No Adjustable Potentials Found” error on fast adjusting a PA# file with all non-positive valued electrodes (e.g. examples\ims\ Was regression in 8.0.6-TEST17 through ( [*bm20111205]

  • X Recording: Fixed corrupted Data Recording Events flag (Ion’s Start or Ion’s Every Time Step events) Issue-I587. Affects 8.0.0 and possibly 7.0. [B]

  • x GUI(Program Test): Show Xref Listing for PRG files didn’t display array type (and could crash) for ADEFS/ADEFA vars listed under Array Variables Defined. Affects 8.0.0 (not 7.0.5). [B]

  • x Programming(segments): Fixed various problems if errors raised inside segments. For example: function segment.terminate() error 'opps' end

    • Fixed: Any error raised in the terminate segment was not immediately aborting the run; rather, the terminate segment continued to be called for remaining particles, leading to lots of error messages. [B]
    • Fixed: Any error raised in the initialize segment was not always causing a failure status at the end of the Fly’m. This only affected Fly’ms in GUI mode (not non-GUI batch mode). [B]
    • Fixed: Particle memory leaked if error raised in init_p_values. Might only be noticed in simulations with lots of particles. [B]
  • x Programming(startup): Traceback (not crash) if startup program raises error. [B]

  • x GUI(View): Fix crash on loading workbench from Load button on Workbench tab. Only affects 8.0.7 (e.g. not 8.1. [B][*ts20111115]

  • C Rerun: Rerun state is reset at end of Fly’m to value at start of Fly’m. Related to Issue-I489. [*][B]

  • c GUI(Refine): On refine complete, display “Delta=0.001 V” rather than “Error 0.001” since new users can misinterpret “error” as failure or as accuracy against theory, when actually it is a maximum absolute change in potential between iterations. [B][*or20111020]

  • c GUI(Refine): Improve error message “Failed saving PA file: Access is denied.”. This error message typically occurs on attempt to refine a PA# file in a directory you don’t have write permission to, such as c:\Program Files\SIMION-8.1\examples . SIMION now gives a more meaningful error message: The operating system is not allowing you to write the file QUAD.PA#. Hint: Copy the folder C:\Program Files\SIMION-8.1\examples\quad to some location you have write access to, such as your personal Documents folder. The Windows Program Files folder typically allows write access only to administrative users. [*or20111020]

  • c GUI(FastAdjust): Display notes about meaning of electrode #0 when fast adjusting basic (.pa) array. [*or20111020]

  • A Example(solenoid): Add toroid example too.

  • C Example(contour) (contourlib81) - Added x,y,z options to plot for convenience - Added npointsx,npointsy,npointsz options - Moved dot to end of vector; center lines on scalar - Added missing solenoid81.iob example

  • C Example(collision_sds):

    • A Support storage of gas flows in SIMION PA files (see test3.iob).
    • A Incorporate SIMION 8.1 ‘contourlib81’ gas flow plotting (see test2.iob/test3.iob).
    • c In reading array text files, avoid problems with Unix-style line endings and NaN values. Also faster read_file_numbers.
    • c Disable SDS when pressure is zero (rather than raise error), like HS1.
    • c Extracted out arraylib and textfilelib into separate files.
  • C Example(faims)

    • X Fix treatment of sign on mobility constants for negative ions when SDS_faims_mode=1. Behavior is now consistent with SDS_faims_mode=0. [*mo20111112]
    • X squarewavelib: Improved precision loss in square waveform timing (see README).
    • A Added cylindrical_transverse sub-example (flow around axis).
    • a Added cylindrical focusing discussion to README.
    • c Enable Poiseuille flow via adjustable variable (on by default) in examples.
    • See also collision_sds changes above.
  • A Example(tune): Added new tuning sub-examples: tune_series, tune_simplex, tune_random, tune_binaryoptlib

  • C Example(spectrum) Example(geometry_optimize) Example(tune) Example(faims) Example(lens_properties): Uses new flym workbench program segment to simplify/improve the code.

  • C Example(emittance) Example(excel) Example(lens_properties) Example(spectrum) Example(tune) Example(electrostatic_induction): Uses new initialize_run / terminate_run workbench program segments.

  • a Doc(ram_and_memory): add notes on Hyper-V dynamic memory.

  • C Doc(manual): Rev-5 (Nov 2011) of the 8.0/8.1 manual covering is now shipping (changes listed at bottom).

  • A Lua(Libraries): Added Lua extension module DLL support in 64-bit version. Previously, only the 32-bit version provided the necessary DLL.
  • C Example(extension): Updated example for 64-bit and newer compilers + more README documentation.
  • A Lua(Libraries): Added some core Lua modules: LuaFileSystem, LuaSocket, lpack, and LPeg (both 32-bit and 64-bit versions). See Programming API for SIMION.

  • A PA(64-bit): Now supporting huge 190GB PA files (~20 billion points). Previous 8.1.0 releases were only designed to support 16GB per PA file.
  • A SIMION on Amazon EC2: added usage notes. Note: Remote access to 68 GB RAM systems can currently be rented for only ~$2/hour on Amazon EC2 (high memory instances).
  • X PA/IOB(aniso): Fixed PA origin point was rescaled even if user said No to the question “Physical grid cell sizes in array […] changed by a factor of […] change PA origin point […]?”) on viewing an IOB after changing mm/gu scale stored in PA file.
  • a Example(gem): Add GEM file of cylinder with bend in the middle (“elbow”). [*]

  • X PA(64-bit): Fixed .PA# files larger than 4 GB can refuse to refine with error “Fast Adjust Refining Aborted” prior to start of refine. Did not affect basic .PA files. Nor did it affect .PA# files smaller than 4GB generating .PA[0-9] solution arrays summing to >4GB. [r.21] [*bb20110914]
  • X PA: PA state flags (e.g. “unsaved [*]” and “unrefined [!]”) are now handled differently in the implementation. This corrects a number of bugs relating to Main screen PA list flags [*!] not updating properly, as well as prompts to save any unsaved PAs on closing. The problem was more noticeable in SIMION 8.1 when using the PA API to edit arrays in memory. [B]
  • X PA(aniso): Fixed refined check on loading 2D cylindrical basic (.pa style) arrays with anisotropically scaled grid cells.
  • X GEM(PA/aniso)/Critical: Fixed GEM file within/notin commands’ handling of shifting surfaces by 0.5 grid unit (gu) in the direction of the surface normal in the case of anisotropically scaled grid cell feature. [r.22] See manual section “I.2.1. Classes of Instructions: Within class” for details on this 0.5 gu adjustment. Previously, the 0.5 gu adjustment was measured only in units of the X direction grid unit size but now is estimated in the direction of the surface normal. The within_inside*/notin_inside* commands, which normally don’t use this adjustment, were not affected (except with points3d). For example, this previously made the surface 10 gu (11 grid points) thick, when it should have been 0 gu (1 grid point) thick: pa_define(51,51,1, cylindrical, none, electrostatic,, 10, 1) e(1) { fill { within { box2d(0,25, 500,25) } } }
  • x GEM(Macro): Improved error message when GEM macro processor does not have write permission to GEM folder. Previous error was "simion/preprocessor.lua:219: attempt to index local 'output' (a boolean value)" [B]
  • x IOB: Removed extraneous warning on ng magnetic scale factor mismatch on loading certain IOBs with non-magnetic PAs (e.g. Example(tof)). Affected >= and [B]
  • X Programming: Fixed IOB’s with PRG programs may give the error “Failure in running Lua segment. attempt to call a nil value stack traceback:” after loading another IOB with a Lua program. Affects 8.0.6 (not 8.0.5). [B]
  • A API(simionx.MField): Added mfield:draw method to draw wires on the SIMION View screen. contour, solenoid, helmholtz_coil examples now use this.
  • A API(simion.experimental.display): added this object to save and restore View screen display state. Experimental. See Programming API documentation.
  • A API(simion.pas): Added pa.refined and pa.saved properties, which indicate whether the array is considered refined and saved respectively. (get/set)
  • x API(simion.pas): Fixed pa:refine solutions parameter cause crash. Affected version >= 2011-07-11. [*mh20110908]
  • c API(simion.pas): pa.filename may now be nil (in get or set) if the array in memory is not to be associated with a file on disk.
  • X API(simion.pas): Fixed pa:save when PA is in packed format (e.g. in Modify screen). Previously, electrode points would be lost. [r.22]
  • c API(simion.pas): Removed deprecated simion.pas:clear (was renamed simion.pas:close).
  • c API(simion.pas): pa:clear now resets internal max_voltage to default 100000.
  • C GUI(Messagebox): Improved messagebox positioning, keeping near window and mouse.
  • X GUI(I/O): Fixed continual “Cancel file operation?” prompts on closing frame. This would occur if a file operation is performed during frame closing, as may occur if the Modify screen is opened and the PA is unsaved. [r.22] Affected ~8.0.6 and related problem in 8.0.5. [B]
  • X GUI(keyboard/program): Fixed no escape from simion.run_stop() and simion.sleep(). Since 8.0.5-TEST37, simion.sleep() won’t escape (ESC key) from a user program, and simion.run_stop() won’t escape from command bar or user program. [*sb20110824/T1154] [B]
  • X GUI(disable): Disable main screen buttons during long running operations such as IOB load, refine, and fast adjust (including via programs), to prevent crashing if clicked. [*bb20110917]
  • c GUI(View): Fly’m button text color changed for readability. [*tz20110827] [B]
  • c GUI(Main): Program Test button state is now updated on activating SIMION window (e.g. after creating PRG file in another application). [B]
  • x GUI(About): Fixed Help>About menu rearranging screens like Fast Adjust/Refine/Recording. [*ew20110804] [r.22] [B]
  • x GUI(NewPA): Fixed 2D planar symmetry tooltip description on new PA screen. [*tz20110822]
  • A Example(spectrum): new example demonstrating voltage scan and acquisition and plotting of spectrum
  • A Example(mfield_adjust): new example demonstrating basic usage of mfield_adjust segment to programmatically define a magnetic field
  • A Example(excel): Added excellib library, simplified Excel plotting library
  • A Example(gnuplot): New gnuplot example to plot in gnuplot rather than Excel. Most examples that plot to Excel can now plot to gnuplot as well now.
  • A Example(contour): Added contourlib81 library for directly plotting field vectors on the View screen without particle flying tricks. solenoid81 example added too.
  • A Example(helmholtz_coil): Added three-axis helmholz coils support; draws coil wires; uses contourlib81 library to draw magnetic field vectors
  • A Example(octupole): Added README comments on mirroring, symmetry, and ways to reduce memory usage by sharing electrode solution arrays.
  • x Doc(magnets): updated page; Fixed some spellings

  • Incorporates fixes in marked with [B]. (First 8.1 Production Release)

  • 8.1 changes: Fixed –num-threads command line option might prevent SIMION from starting.
  • [!] 64-bit SIMION now experimentally supported on Linux via Wine64.
  • Doc(linux) Doc(mac_os): moved into supplemental docs (and

  • pa0/compatibility: improve error message “Missing electrode positions” when PA0 electrode number exceeds maximum supported by current version of SIMION. (release candidate)

  • install: some directory structure reorganization: - 32-bit binary files moved into x32 subdirectory on 64-bit installs. - moved supplementary chm file into docs subfolder - allow SIMION executable to be in subdirectory of main program folder. - fixed line endings
  • install: fix some software versioning issues
  • Examples(geometry): added cma2d.gem and cma2dp.gem (ideal cylindrical mirror analyzers)
  • Examples(enhanced_refine) - add “experimental” enhanced Refine accuracy for non-grid unit aligned electrodes example
  • doc: add more notes on multicore performance (and

  • System DLLs (not including Lua module DLLs) are now loaded from the \lib (not \lib\lua) subdirectory of SIMION.
  • Fixes to 8.0.7-TEST: [critical] Fix .PA0 corruption on saving when electrode number > ~30. Broken since

  • x contouring: correction on aniso-PA 3D contour line spacing
  • c API(simion.pas): pa:save now raises on error. Renamed pa:rescale to pa:resample. Corrected documentation on some error handling behaviors.
  • c supplemental help: better organize table of contents (and

  • X IOB sometimes was saving in SIMION 8.1.0 (IOB mode 2) format when it should have been saving in mode 1 format. Affected and mostly.
  • c Improvement in IOB loading robustness for future compatibility.

  • C GEM/aniso-PA: Default units in GEM files are now mm rather than gu. Since default cell size is 1 gu = 1 mm, compatibility is maintained with SIMION 8.0. The locate statment in the below aniso-PA example should be removed:

              planar, xyz, electrostatic,, $(dx_mm),$(dy_mm),$(dz_mm))
    ; locate(0,0,0,, 0,0,0, $(1/dx_mm),$(1/dy_mm),$(1/dz_mm)) {
      electrode(1) { fill { within { sphere(0,0,0, $(R_mm)) } }

    To use gu rather than mm, specify “gu” (without quotes) in the 11-th parameter to pa_define. For details, see the anisotropically_scaled_pas section of the supplemental help file. [*bb20110720: ]

  • C .PA0 format for >= 16GB arrays implemented. (and

  • Recording/GUI: Fixed “Delimiter” control not accepting user selection. Affected >= 8.0.6-TEST7. [*jb20110814]

IMPORTANT! The Aniostropically scaled PAs and Poisson solver changed in ways that break earlier 8.1/early access.
  • C Poisson solver: Charge density array values now must be in C/mm^3 units not C/(gu_x*gu_y*mm_z). Also Poisson solver now requires the physical sizes (in mm) of grid cells to be specified in the potential array and charge array files. See the poisson_solver help page for more details.
  • C aniso-PA: The “scale” factor and “PA working origin” (Z/Y/ZWo) parameters on the View>PAs>Positioning panel have changed in meaning for PAs that use SIMION 8.1’s capability for PA file to store inside themselves an explicit grid cell size in mm other than (1 mm/gu)^3. Now, the PA instance scale factor multiplies the grid unit size defined inside the PA. For example, if the cell size (dx_mm,dy_mm,dz_mm) in the PA file is (3,5,10) mm and the PA instance scaling factor is 6, then the physical cell size would be (18,30,60) mm (not (6,10,20) mm as before). Furthermore, the PA origin is now in units of mm prior to the application of any scaling factor (not gu as before). This change still preserves compatibility with SIMION 8.0 PAs, which always had (1 mm/gu)^3 represented in the PA file itself. See the anisotropically_scaled_pas help page for more details.
  • C aniso-PA: The “ng” magnetic scaling factor is now in units of mm as defined in the PA file (rather than grid units). Any subsequent scaling of instances of the PA on the workbench continue to have no effect on this though. This change still preserves compatibility with SIMION 8.0 PAs, which always had (1 mm/gu)^3 represented in the PA file itself. See the anisotropically_scaled_pas help page for more details.
  • C Double/Halve: These functions now update grid cell sizes in mm accordingly.
  • a API(simion.pas): Added pa.symmetry_type variable (similar to pa.symmetry but without mirroring info)
  • C API(simion.wb): instance.mm_per_gu variable renamed to instance.scale due to the above change in meaning for the scale factor.
  • c Disable antimirroring option in GUI (will be delayed to 8.1.1/8.1.2).
  • c SL Libraries: ng changed from int to double, and only include first 17 bits of ng in mirror (SIMION 8.1 compatibility)
  • X API: pa_coords_to_wb_coords/wb_coords_to_pa_coords/inst:pa_to_wb_coords/ inst:wb_to_pa_coords functions were incorrectly rescaling the vector in anisotropically scaled PAs. [critical] [8.1]
  • xa Copy function (View PAs) tab now implemented for anisotropically scaled PAs. [8.1]
  • X Examples(poisson): Removed incorrect “* PIC_scale” in piclib charge density scaling factor. This affects only 2D cylindrical arrays that have a lower resolution charge density array (i.e. PIC_scale not 1). [8.1]
  • x versioning: (minor) fixed version numbers on EXE’s. (and 8.1.0-TEST14)

  • versioning: SIMION versioning number scheme changed from e.g. “8.0.7-TEST14” to “”.
  • Examples(collision_hs1) - Removed caching of mean-free-path calculation. This optimization didn’t improve speed much and could even decrease speed. The optimization was also more error prone if certain variables like _gas_mass_amu and _sigma_m2 were changed during the run.
  • x Copy function (View PAs tab) slowness fixed. This affected versions >= 8.0.5-TEST27. [*B]
  • x Fixed reporting errors on loading 8.1 data files in 8.0. [*B]


  • C API: x_mm_per_gu/y_mm_per_gu/z_mm_per_gu renamed to dx_mm/dy_mm/dz_mm in, SL Libraries, and SL Tools, and batch mode interfaces.
  • c API: remove undocumented simion.EARLY_ACCESS
  • c GEM/aniso-PA: pa_define dz_mm, if omitted, now always defaults to dy_mm, never dx_mm.
  • c Examples: remove early access mode calls.
  • x API(screen print): Fixed simion.print_screen/simion.printer instabilities. These are used in geometry_optimize 8.1 features. [8.1]
  • x API(simion.pas): Fixed pa:crop, pa:refine, pa:fast_adjust may cause instabilities if they raise an error. [8.1]


  • setup: New software installer for SIMION 8.1.
  • X flym/batch-mode: fly batch mode command was not honoring trajectory options like --grouped and --trajectory-quality when operated in GUI mode (i.e. without --nogui). This only affected 8.1betas (and early access) [8.1]. [*kc20110810] [severity: critical]
  • c Resolved incompatibility with having 32-bit and 64-bit SIMION 8.1 executables in the same folder.
  • a Examples: added examples\geometry\sphere_aniso.gem - simple example of GEM for anisotropically scaled PA.
  • a Examples: added examples\geometry\sector.gem - magnetic sector example
  • a Examples: added examples\geometry\uniform_bfield.gem - uniform magnetic field example Incorporates 8.0.7-TEST12 changes also.


  • View: Various particle trajectory options now are reset to defaults on IOB reload rather than on exiting/re-entering the View. These include TQual, Grouped, Rerun, Use Programs, Record Data, Repulsion, Retain Trajectories, Time Markers, and Pause Step/Event. Pause Step/Event are still reset on (re-)entering View. (Previously Timer Markers and Pause Event were only reset on program startup.) [category: UI defect]


  • X aniso-PA/GUI/OpenGL - Modify 3D rendering of anisotropic PAs fixed (cylindrical case, texture, and mouse coordinates) [8.1]
  • x rec - fixed warning about early access in “split data recording output into multiple files” option. [*ew20110805]
  • a SL Tools has been upgrade to support SIMION 8.1:
    • aniso-PA - Anisotropically scaled PAs now supported in viewing and STL/Text <-> PA functions.
    • 64-bit support added.
    • Also includes 8.0.7-TEST11 enhancements, such as improved STL->PA CAD conversion accuracy (Issue-I339).
  • A SL Libraries: 64-bit support added.
  • a Examples: added (two coaxial cylinder STL file) to \examples\geometry
  • Incorporates 8.0.7-TEST11 changes also.


  • GUI/OpenGL - In PA rendering (Modify 3D or SL Tools View), “points” checkbox now displays all electrode surface points. Useful for visualizing grid spacing as well as non-solid electrode points (which otherwise might not render).
  • SL Tools:
    • STL->PA [IMPORTANT] - Improved STL->PA CAD conversion accuracy, with exact unit alignment. The new option “Solid strategy” = “No extra solid points” achieves best accuracy, but see the Issue-I339 report. Issue-I339 [*]
    • Major reorganization of STL->PA screen and its command-line options. This is intended to be more clear and also support 8.1 extensions.
    • Fixed keyboard focus problem on STL->PA screen. Affected SL Tools 1.1.3.
    • Also includes above OpenGL change.
    • SL Tools version numbering changed to match SIMION.
    • Add –version command line parameter to display version.
  • GUI/Particles - “Coordinates relative” drop down now includes units “mm” or “gu” for clarity. [*]


  • Internal: minor changes.


  • c GUI/Data Recording - “Record data” checkbox now automatically becomes checked upon altering any Data Recording screen option (for convenience). [*tz]
  • A examples - Added tandem_van_de_graaff - Illustrates Tandem Van de Graaff system, with electron stripping when ions pass through a foil. Contributed by Theo Zouros.
  • a examples - Added examples\geometry\parallel_plate_capacitor_2d.gem (idealized 2D parallel plate capacitor or analyzer).
  • X ansio-PA - View 3D Iso screen now draws anisotropically scaled arrays properly. [*] [8.1] (Note: Anisotropically scaled arrays now drawn with the Constrn optimization disabled). [8.1]
  • X ansio-PA - Force mm/gu in y and z to be identical in cylindrical aniotropically scaled PAs. Affects New PA screen, GEM, gem2pa, simion.pas, and PA loading. [8.1]
  • X GUI/GEM - Added separate scale X/Y/Z fields to GEM screen for anisotropic scaling. [8.1]
  • Incorporates 8.0.7-TEST6/TEST7/TEST8/TEST9 changes also.


  • X GUI/view/important - Fixed distortions in drawing PA’s in non-constrained 3D View screen (Issue-I586). Affected >= 8.0.6-TEST17.
  • c GEM: GEM files containing no fill definitions now only trigger a warning rather than an error (“Failed compiling GEM file[…] ERROR: No Fill Definitions Found”). This allows creating empty PAs using GEM files. [*20110729tz]
  • c GUI/file: File dialog box now opens with current directory (rather than last selected directory) if an IOB or PA was opened from command line or Windows file associations. [*20110729tz]


  • GUI/View - marker color field on Particles tab is now always enabled, even if time markers are disabled.
  • Internal - cleanup of View screen rendering code (should not have visible changes).



  • GUI/Data Recording - minor improvements to “Undo”/”Cancel” buttons to restore file name and record data settings to those prior to opening window. Also improved width/precision field tooltips for clarity.
  • GUI/Data Recording - rearrange Format for Recorded Data panel to be slightly more logical.
  • GUI/fastadj - Increase max potential from +-9999999.9999 V to +-1.0E+8 V [*] on Modify and Fast Adjust screens, as well as fastadj batch mode command.


  • 64bit,PA: Fix corruption of 64-bit PAs on loading/saving.
  • GEM: Fixed locate X,Y,Z scalings to be applied after rotation (Issue-I585) [*] Affects anisotropically scaled PAs.
  • simion.pas API: Fix pa:point corruption when potential exceeds max_voltage in packed array.
  • simion.pas API: Fix pa:potential corruption when potential exceeds max_voltage in packed array.
  • Examples: poisson - add 3D examples and cleanup some (2011-07-19)
  • Help: add new pages on general electrodynamics topics
  • Incorporates 8.0.7-TEST5 changes also.


  • core,rotation: Eliminate small numerical defects in 90 degree rotations, occurring in GEM files and rotation functions like azimuth_rotate. (Issue-I522) [*]
  • core,minor: No longer trim extra spaces around file names when handling various SIMION file types. Although these spaces are likely undesirable, there’s no need to complicate file name handling either. For example, ”” previously failed to load.


  • This release largely completes the unimplemented parts of the
  • Poisson, anisotropic scaling, and proper Neumann boundary enhancements to Refine:
    • Refine: 3D Poisson solver implemented.
    • Refine: Anisotropic cases of Poisson (2D planar, 2D cylindrical, and 3D) implemented. (Issue-I536)
    • Refine: Anisotropic cases of 2D cylindrical Laplace implemented.
    • Refine: Proper Neumann boundaries on all array edges. Issue-I372 [*]
  • Fixes in beta features:
    • API: Fixed pa.mirror_z was returning pa.mirror_x (in simion.pas interface)
  • Incorporates 8.0.6 and 8.0.7-TEST2 changes also.


  • core: Updated internal physical constants to CODATA2010 (Issue-I494).
  • library: simionx.Constants - Various physical constants also updated to CODATA2010 (and including CODATA2006/2002/1998/1986 values too).
  • Docs: Supplementary documentation and info web pages merged, into CHM file.


  • Improve PA# refining speed by reducing number of PA# loads from disk.
  • Improve View screen rendering speed (multicore).
  • Updates to license keys and software update.
  • Software license updated for 8.0 and clarified in minor ways.
  • Incorporates 8.0.6-TEST17 changes also.


First 8.1.0beta release. For a summary of new features, see SIMION® 8.1.
  • 64-bit CPU support. Both 32-bit and 64-bit builds of the SIMION executable are provided.
  • Parallel refines (multicore/multi-CPU support) - Refine potential arrays faster.
  • Faster Lua virtual machine (LuaJIT) (currently disabled)
  • Rectangular grid cells (anisotropically scaled arrays) - mm/gu scaling can now be different in X, Y, and Z directions.
  • [gui] PA parameter screen redesigned for better clarity and to add more 8.1 options.
  • CODATA2006 constants (Issue-I494) - only partially-implemented
  • Add option to omit relativistic effects (Issue-I579)[*]
  • GUI: View > Particles tab rearranged slightly to be more logical.


  • core/refine - For “pa+” files, fixed ASSERT error if scalable_electrodes[i][j] is negative and exceeds magnitude of all other values for same i and different j (Issue-I584) [*]
  • internal/refactor - major internal changes related to 8.1 (should be invisible in 8.0)


  • GUI/Modify: Display 16 digits of precision when display voltage in status bar (Note: useful for SIMION 8.1 charge density arrays)
  • Fixes:
    • GUI/Modify: Status bar sometimes displayed Mags rather than Volts for some mark types.


  • Internal: minor changes to how some derived physical constants are computed. Should have negligible effect, well within CODATA1986 error ranges. This is related to the move to CODATA2010 constants in 8.1.0.

8.0.6-RC2-20110704 (production release)

This release has been more thoroughly tested. It also includes fixes for Linux and Mac OS using Wine/CrossOver. Fixes:
  • GUI/OpenGL/Wine: Fixed OpenGL 3D Modify window in CrossOver Mac (Issue-I277) Also, removed workaround for now resolved Wine OpenGL canvas bug (winebug#2398)
  • GUI/OpenGL/Wine: Fixed OpenGL 3D Modify window in Linux/Wine. Broken in 8.0.6-TEST6.
  • GUI/Wine: Fixed Check for Updates button not displaying on CrossOver Mac OSX (Vista bottle). Broken in 8.0.6-TEST16.
  • GUI/Keyboard/Wine: Fixed keyboard shortcuts in Linux/Wine (focus problem). Broken in 8.0.6-TEST7.
  • GUI/Keyboard: Fixed command bar keyboard shortcut (“:”). Broken in 8.0.6-TEST16.
  • GUI: Fixed Modify 3D “Mouse Help” button crash.
  • SL Tools 1.1.3-20110704 - includes above OpenGL fixes.


  • GUI: main screen Docs button now optionally loads simion.chm if present (for 8.1)
  • GUI: Modify screen point type control now initially set to electrode (for convenience) (minor)
  • Internal: update GUI library


  • [minor] remove displaying 123 on startup (started in 8.0.6-TEST16)
  • Fixed imprecise error message “Failed saving PA file: A” (Issue-I580) [*]
  • [prg] In PRG code, ARCL from adj_elect crashes (Issue-I581) (since 8.0.6-TEST12)
  • Fly’m: Fixed/minor: Trajectory CV related values (for positive T.Qual values) were potentially not being reinitialized between particle integrations, which may have (unconfirmed) caused very small anomalies in time-steps at the very start of trajectory integration. (Issue-I582) (likely since before 7.0)
  • GUI: Fix in Modify 3D view, Faces/Lines/Points checkboxes sometimes missing (since 8.0.6-TEST7) (Issue-I583)


  • [internal] updated GUI library.


  • [gui/minor] Display version number in Help About menu command. [*]

Note: the “8.1 early access” lines refer to changes being made to the upcoming 8.1 version that can be tested for a limited time by 8.0 users (for further details, see Issue-I421).


  • 8.1 Early Access:
    • Lua PA API: Fix crash on pa:potential_vc or pa:field_vc functions with non-fast adjustable PAs (Issue-I578) [*]


  • [internal] update to latest LuaCOM 2011-02-19.
  • faims-20110225 (Example(faims))
  • collision_sds.lua - Fixed FAIMS example: pressure/temperature load_array coordinates. (Issue-I576)
  • collsion_sds-20110225 (Example(collision_sds))
    • collision_sds.lua - if d_ion and ko both undefined, estimate both rather than raising error. The FAIMS version already did this.
    • collision_sds.lua - Incorporate various changes from SDS-FAIMS model (see changes in README.html).
  • electrostatic_induction-20110226 - inductionlib.lua - more efficiently utilize fast adjust PA memory in induction calculation [*] (Issue-I577]
  • 8.1 Early Access:
    • [core,programming] In pa:potential_vc(x,y,z, t) and pa:field_vc(x,y,z, t), the table t now accepts an additional exclusive=true field which causes all electrodes not mentioned in the table to be set to 0 V. These electrode solution arrays are not loaded into memory. Also, solution arrays for electrode numbers not mentioned in t are no longer automatically unloaded. (Issue-I422)


  • This release mainly corrects some fast adjust related defects.
  • [prog/change] Reserved variables adj_elect1 .. adj_elect9 are now synonyms for adj_elect01 .. adj_elect09 in user programs. Also adj_pole1 .. adj_pole9 are now symonoyms for adj_pole01 .. adj_pole09. This improves consistency.
  • [example/expand] Add “drag_mobility.iob” to the “drag” examples, calibrating the drag coefficient to a mobility constant, just like SDS does but without diffusion.
  • [fadj/defect] Fix “Illegal Fastadj Potential Count” error on fast adjusting array using all 128 solution arrays (0..127). (Issue-I572)
  • [fadj/defect] Fix .pa_ corruption when using .pa+ file with .pa# file having integer electrode numbers exceeding fast adjustable limit (Issue-I574)
  • [fadj/defect] Fast adjust screen crash/error on more than five electrodes (Issue-I573) [*]
  • [fadj/gui] Add scroll to fast adjust screen when there are many adjustable potentials.
  • [defect] Fix possible Remove All PAs from RAM stack corruption.
  • Various internal changes.

8.1.0-beta 20110203

  • [fadj/change] Increased maximum number of fast adjustable electrodes from 127 to 1000. (Issue-I127). Note: rarely is this many needed.


  • [prog/change] #adj_elect in user programs now returns the maximum electrode number in the current array. Previously it returned the number of contiguous electrodes starting at #1, which wasn’t as useful. This only affects arrays with skipped electrodes. (Issue-I429).
  • [fly2/defect] Globals Lua functions not accessible in FLY2 files. [*] (Issue-I568)
  • [examples/collision][examples/faims] In collsion_sds.lua fixed “ion’s x coord outside array” check (Issue-I566). [*]
  • 8.1 Early access:
    • [program] Improve “Programmatically draw 3D line segments on View screen” (Issue-I564) to work in initialize segments. [*]
    • Various internal changes.


  • Fixes and minor improvements:
  • [io-performance/fix] File loading slowness introduced in 8.0.5-TEST8 (Issue-I468)
  • [gui/fix] Fast adjust screen controls don’t show input focus, since 8.0.6-TEST7 (Issue-I559)
  • [gui/fix] Error: icon bundle doesn’t contain any suitable icon [*] (Issue-I561)
  • [gui/fix] SL Tools button broken [*] (Issue-I555)
  • [gui/fix] Particle trajectory color corruption. Affected >= 8.0.6-TEST38 (Issue-I563)
  • [trajectorycalc/fix] Clip detection (e.g. to determine which part of particle trajectory intersects PA grid cell) made slightly more robust (possibly related to Issue-I223)
  • [gui/fix] Command bar history corruption on repeated commands. Affected >= 8.0.6-TEST7. (Issue-I565)
  • [internal/minor] substantial internal refactoring of Refine
  • [examples/fix] FAIMS - velocity field wrong when Grouped flying.
  • [examples/accuracy] FAIMS quick cycles feature made more accurate.
  • [examples/minor] SDS example - some cleanup in collision_sds.lua comments.
  • Additions:
    • [io-debug] simion.debug.allow_asynchronous_io=false can now be used to disable asynchronous I/O for debugging purposes (Issue-I468)
  • 8.1 Early access: Additions:
    • [refine] In 2D Poisson refine, always treat left/bottom boundaries as pure Neumann boundaries (mirror planes). (Issue-I372/Issue-I482) (Note: the same is not yet enabled for regular Laplace refines.)
    • [program] Programmatically draw 3D line segments on View screen (useful for custom drawing and contouring - Issue-I178) [*] (Issue-I564)
    • [example] FAIMS adds contourlib.lua for contouring flow fields.

8.0.6-TEST9 2010-10-25

  • [gui-memory/fix] GDI handle memory leakage on screen refresh. [*] (Issue-I557)

8.0.6-TEST8 2010-10-22

This release mainly fixes GUI quirks introduced in 8.0.6-TEST7.
  • [gui/fix] Text controls having up/down bottoms not updating properly in 8.0.6-TEST7; causing various Modify and View screen problems.
  • (Issue-I554) [*]
  • [gui/fix] Launching text editor was broken in 8.0.6-TEST7 due to extraneous quotes in file names. [*] (Issue-I555).
  • [gui/fix] Variables tab initially zero width in 8.0.6-TEST7 [*] (Issue-I556)
  • [internal/minor] update luacom to 2009-10-20 version
  • [gui/minor] fix progress statusbar not displaying 100% at end of file operation

8.0.6-TEST7 2010-10-18

This release contains major internal changes. GUI is not as stable.
  • [contour,defect] Fixed small anomaly in gradient contours for maximum positive z in 3D arrays (Issue-I552).
  • [gui,defect] Focus gets hidden on tab traversal in View Variables panel (Issue-I361).
  • [internal] substantial internal changes to contouring.
  • [internal] updated compiler, GUI libraries, and core programming libraries.
  • [internal] updated luacom to 2009-09-11 version.
  • 8.1:
    • [example] Added excel\append_chart.lua example - demonstrates appending data to existing worksheet/chart
    • [example] Added examples\geometry\quad_hex.gem (joined quadrupole / hexapole) [*]
    • [gui] preliminary framework for locale support (translations).

8.0.6-TEST6 2010-07-02

  • Early access:
    • Change pa:refine min iterations from 100 to 1.
    • [enhancement,modify] Double/Halve extended to multiply or divide X,Y,Z independently by arbitrary positive integers. Issue-I536. Also added corresponding pa:rescale - Issue-I422.
    • pa:refine convergence objective maximum limit no longer imposed. (Issue-I422)
    • undocumented - aniso (Issue-I536)
    • undocumented - surfrefine (Issue-I542)
    • pa:field_vc corrected for magnetic arrays (magnetic field was not properly scaled by ng) (Issue-I422)
  • Note: major internal changes to Refine.
  • [example] new test_surface example, similar to test_plane example but using spherical test surface.[*]
  • [example] new helmholtz_coil example (based on solenoid example)
  • [example] collision_sds.lua Fix handling velocity arrays with cylindrical symmetry (Issue-I549)
  • [example] add examples\geometry\turning_quad.gem (DC turning quad) [*]
  • [example] examples\drag\drag.lua now supports non-zero background gas velocity (like the SDS model already does). [*]

8.0.6-TEST5 [20100106] r3013

  • Early access:
    • [enhancement,defect,wb,lua] Various fixes to simion.wb and simion.wb.instances, to ensure changes are propagated to the fly’m and GUI. Issue-I496 [*]

8.0.6-TEST4 [20100105] r3006

  • Early access:
    • [batch,defect] Batch mode exited in fly batch mode command under early access. Issue-I539 [*]
    • [batch,pa,defect] Basic PAs loaded in batch mode may display a not refined flag (!) in the PA list. Issue-I540 [*]

8.0.6-TEST3 [20100104] r3001

  • [pa,defect] “expected electrode point for adjustable electrode” on exiting Modify with .PA0 file. Issue-I537
  • [batch,enhancement] allow some SIMION options (e.g. --noprompt) to simion.command. Issue-I538. [*]

8.0.6-TEST1 [20100108] r2972

  • simion --noprompt command-line option now works in GUI mode as well (i.e. without --nogui option).
  • [example.enhance] - add excel\tof_vs_ion.iob/lua [*] example (plots TOF v.s. ion number)
  • Early Access: Fixed Moving PA instances from Lua not effective in non-GUI mode. Issue-I535 [*]


8.0.5 [20100104] r2970

Release version.

8.0.5-TEST38 [20100102] r2959

  • [doc,defect] Clarify FieldArray documentation, on constructor and CSV syntax. [*]
  • [examples,add] Add sinusoidal.gem - sinusoidal shape using GEM macros [*]
  • [examples,enhance] collision_hs1 - Allow easier customization via HS1.pressure, HS1.temperature, and HS1.velocity[_x|_y|_z] variables. Recalc mean-free-path on pressure or temp change. See collision_hs1\test2.iob + lua.
  • [examples,enhance] collision_sds - add test-sds-hs1.iob comparing SDS and HS1
  • [examples,bender_cut] new example, split and crop large system into two arrays.
  • [examples,gauss_law] add cylinder shape to

8.0.5-TEST37 [20090921] r2897

  • [gui,enhancement] Make Log window monospaced font. Issue-I531 [*]
  • [gui,enhancement] Improved log window behavior on clicking. Issue-I532.
  • [gui,defect] Keyboard tabbing problems. Issue-I361 [*]

8.0.5-TEST36 [20090911]

  • [crop,defect] Fixed cropping PA may wrongly remove Z mirroring. Issue-I531 [*]
  • [gui,enhancement] Make Log window monospaced font. Issue-I531 [*]

8.0.5-TEST35 [20090903] r2887

  • [core,defect] Fixed 2-4 GB RAM usage (/LARGEADDRESSAWARE /3GB). Issue-I530. [*]


  • [examples,gui] Added ionfunnel\funnel3.iob example (more convenient to adjust voltages).

8.0.5-TEST34 [20090706]

  • [recording,defect] Generate error if can’t write data recording file (previously was silent)
  • [gui,defect] “Record data” and “Pause event” controls not properly updated. Issue-I528.
  • [examples,gem] fixed pa_define syntax in tetrahedron.gem and cone.gem (minor)

8.1 Early Access

  • [beta,prog] New ion_run reserved variable. Issue-I529.
  • [recording,feature] Allow splitting data recording output into
    multiple files. Issue-I231

8.0.5-TEST32 [20090520]

  • [gem,defect] PA empty or truncated when importing from GEM. Issue-I527. [*]
  • [gem,defect] Fix crash upon “No Fill Definitions Found” during GEM processing. Issue-I526.
  • [examples,gem] Add hexapole gem : examples\gem\hexapole.gem [*]

8.1 Early Access

  • [beta,prog] New simion.print_screen() function to print current image. Issue-I521.
  • [beta,gui] If GUI enabled, fly batch mode command (Issue-I182) runs in View screen.
  • [beta,print] Printing to BMP, PNG, and JPG files now supported. (Issue-I523)
  • [beta,example,prog] Added Lua versions of pa2text and swirl examples.

8.0.5-TEST32 [20090314] (also early access mode changes)

  • [core,defect] Error on fast adjusting a cropped PA containing fast scalable (.pa_). [*]
  • [examples,compat] Python 3.0 (Python 3000) compatibility on examples. (Issue-I524)
  • [fly2,defect] Don’t crash on edge case particles { { } } [minor]

8.0.5-TEST31 - no change (early access mode reset)

8.0.5-TEST30 [20081125] r2789

  • [core,defect] Asynchronous file I/O: Fixed freeze on PA load/save, particularly under Win2K and Linux/Wine. Updates Issue-I468 [r30][*]
  • [example,change] “trap” example code organization improved. Added HS1 collision model example (group_hs1.iob).[*] See Changes section in README.html.
  • [example,change] HS1 collision_hs1.lua - now returns table HS1.
  • (also early access mode changes – see below)

8.1 Early Access

  • [beta,prog] simion.pas:clear renamed simion.pas:close. Issue-I422.

8.0.5-TEST29 [20081111] r2776

  • [core,defect] Asynchronous file I/O improvements: Load PA files without applying read lock. Confirm cancel request by user. Updates Issue-I468 [r29]
  • [core,defect] Report error on failure to load bytes from PA file. (error handling) [r29]
  • [core,implementation] Improved IOB load/save robustness (minor). [29]

8.1 Early Access, TEST29 [20081111]

  • [beta,prog] pa:close now raises on error. pa.filename now contains long filename Issue-I422.

8.0.5-TEST28 [20081104] r2747

  • [core,defect] Fix crash/leak on failure to allocate PA from reserved memory. [r28]. Updates Issue-I363.
  • [gui,enhancement] Improve GEM error messages. [r28]
  • [gui,defect] Fix “PAs require X MB RAM” – was reporting in units of 10^6 bytes not 2^20 bytes [r28]

8.1 Early Access

  • [beta,prog] Access memory dump (simion.debug.memory_dump) Issue-I518.

8.0.5-TEST27 [20081024] r2735

  • [gui,enhancement] Before user is first prompted in batch mode, display message that --noprompt command-line option can be used. All add new “!” option to disable further prompts at runtime [r27] Updates Issue-I299.
  • [prog,defect-7.0] Fixed: Random number generator seed() function freezes when not preceded by rand(). Issue-I514. [r27]
  • [gui,defect] Fixed: Conditional crash on entering View. Issue-I517. [*][r27]
  • [core,defect] Fixed: Electrode solution arrays for .PA0 files are now loaded into the reserved memory pool (when --reserved-memory command-line option enabled) rather than the standard memory pool. [r27] Updates Issue-I363.
  • [core,defect] Fixed: “Illegal Fastadj Potential Count” error after fast adjust failure. Issue-I508 [*][r25]
  • [prog,defect] Fixed: tostring(simion.VERSION(s)) now works properly. [r27]. Updates Issue-I398.
  • [prog,defect] Fixed: missing errno include for pa.cpp in SL Libraries. Issue-I516 [*]
  • [prog,defect] Fixed: SL Libraries pa.cpp - wrong error message in PA::check_nx (minor)
  • [file,defect] Improved corrupt file detection on PA load. [r27]
  • [examples,added] Particle jumping trick example added (nonideal_grid\particle_jump). [*] Issue-I515

8.1 Early Access

  • [beta,prog] field simion.wb.instances[i].mm_per_grid_unit has been renamed simion.wb.instances[i].mm_per_gu. Issue-I496.
  • [beta,prog-pa] simion.pas:open now returns nothing on success and raises on error. pa:load now raises on error. Issue-I422.

8.0.5-TEST26 [20081010] r2642

  • [prog,change] Define behavior of adj_elect[i] and adj_electXX for non-existent electrode numbers in PRG code. Updated Issue-I429. [r26]
  • [prog,detect] PRG user program fails with error when adj_elect not defined in previously loaded workbench.
  • Issue-I512. 7.0-compat. [r26]
  • [config,defect] Crash if failure to write to FILES.GUI directory Issue-I218 [r26]
  • Internal: Fairly extensive code refactoring (lint)–should not cause any external changes. (see Issue-I527)

8.1 Early Access

  • [beta,core] Allow workbench size to be non-integral or smaller than 1 mm^3. Issue-I513 [r26][*]
  • [examples,added] PA instance jumping trick example added (“nonideal_grid/pa_jump”). [*] Issue-I515

8.0.5-TEST25 [20080919] r2482

  • [example,defect] In examples\test_plane\testplanelib.lua, robustness improvements to avoid particle locking up near test plane. Issue-I221.2 [*][2008-07-24]
  • [prog,defect-8.0] Upgrade Lua from 5.1.3 to 5.1.4 (bug fix only release). Issue-I404 [r1]
  • [prog,enhancement] Add standalone Lua interpreter lua.exe Issue-I511 [r25]
  • [core,defect] Fixed crash on loading workbench with contours. Issue-I507 [r25][*]

8.0.5-TEST24 [20080723]

  • [core,defect] Fixed crash on loading workbench with contours. Issue-I507 [r24][*]
  • [example,expand] Added cross.gem (two 90 degree pipes) to “geometry” examples [*] [2008-07-22]
  • [example,enhanced] The type of contour a particle traces is now determined implicitly and individually by the particle’s mass. [2008-07-22]
  • [core,enhancement] Some improvements in crash report (Issue-I505) [r24]
  • [core,defect] Fixed crash on failure to write temporary trajectory file (.trj). Issue-I506 [r24][*]

8.0.5-TEST23 [20080718]

  • [core,enhancement] New crash reporting feature. Issue-I505 [r23]
  • [core,enhancement] Reduced simion.exe binary size by ~ 600KB [r23]
  • [gui,enhancement] Particle definition screen (.FLY2) - group panel size increased[*]; display condensed for arithmetic/line; loading speed increased [r23]
  • [gui,defect-8.0] Particle definition screen layout cut-off. Issue-I504 [r23][*]
  • [implementation] Major refactoring of GEM file processing code [r23]

8.0.5-TEST22 [20080530]

8.1 Early Access

  • [beta,core] Fast Parallel .PA# refines (one solution per CPU core) Issue-I503 [r22]

8.0.5-TEST21 [20080527]

  • [prog,enhance] Define behavior of adj_elect[i] and adj_electXX for non-existent electrode numbers and #adj_elect. Issue-I429 [r2][r21][*]
  • [prog,defect-8.0] Crash on accessing adj_elect[N] or adj_electN where N not a valid electrode number Issue-I476 [*][r2][r21]
  • [gui,defect-8.0] Fix spelling Guass->Gauss on data recording screen (eloy-20080522) [r21][*]
  • [prog,defect-8.0] Fix “illegal start for seg” error. Issue-I509 [r21]

8.1 Early Access

  • [beta,prog-pa] New pa.electrode_numbers field is an array of fast adjustable electrode numbers. Issue-I422 [r21]
  • [beta,prog-pa] New methods: instance:pa_to_wb_coords and wb_to_pa_coords, instance:pa_to_wb_orient, instance:wb_to_pa_orient, instance:pa_to_array_coords. Issue-I422 [r21]
  • [beta,example] bradbury_nielsen_grid. Issue-I502 [r21]
  • [beta,prog-pa] no crash in fast_adjust with pa:potential_vc/field_vc with table that triggers electrode solution array unload Issue-I422 [r21] (t8).

8.0.5-TEST20 [20080513]

8.1 Early Access

  • [beta,prog-pa] pa.symmetry values changed to “2dcylindrical”, “2dcylindrical[x]”, “2dplanar”,”2dplanar[x]”,”2dplanar[y]”,”2dplanar[xy]”, “3dplanar”,”3dplanar[x]”,”3dplanar[y]”,”3dplanar[xy]”, “3dplanar[z]”,”3dplanar[xz]”,”3dplanar[yz]”, “3dplanar[xyz]” Issue-I422 [r20]
  • [beta,prog-pa] pa:potential_vc and pa:field_vc now take an optional table parameter to specify fast adjust electrode potentials (similar to the fast_adjust segment): potential = pa:potential_vc(10,0,0, {[1]=100,[2]=-100}) ex,ey,ez = pa:field_vc(10,0,0, {[1]=100, [2]=-100}) (used by new electrostatic_induction example). Issue-I422 [r20]
  • [beta,prog] New ion_effective_charge reserved variable. Issue-I452.3 [r20]
  • [beta,example] New induced current/charge example (“electrostatic_induction”). Issue-I499 [r20][*]

8.0.5-TEST19 [20080430]

  • [prog,enhance] simion.VERSION now contains a version object and permits comparisons. Issue-I398 [r19]

8.1 Early Access

  • [beta,prog-wb] fixed: simion.wb was nil if simion.early_access() called when IOB already loaded (affected 8.0.5-TEST18 only) Issue-I496 [r19]

8.0.5-TEST18 [20080426]

  • [prog,defect-8.0] Upgrade luacom to CVS version (2008-04-18) Issue-I495 [r18]
  • [prog,defect-8.0] SIMION startup script (simion.lua) now loaded after GUI initialized [r18]
  • [gui,enhance] Pause message added to statusbar upon pausing Fly’m due to “Pause step” or “Pause event” checked. [r18]

8.1 Early Access

  • [beta,prog-pa] Fixed array corruption when doing simion.pas[n]:fast_adjust{...}, particuarly inside View screen. Issue-I422.1 Issue-I422 [r5][*](8.1) [r18]
  • [beta,prog-pa] v = pa(x,y,z) – Applying the call operator to the array is identical to pa:potential_vc. Issue-I422 [r18]
  • [beta,prog] Resize SIMION window programmatically (simion.window) Issue-I498 [r18][*]
  • [beta,prog-wb] Manipulating workbenches from Lua in SIMION [r18]

8.0.5-TEST17 [20080416]

8.1 Early Access

  • [beta,core] Allow workbench IOB files to contain PAs in a different directory. Issue-I220.3 [r17][*]

8.0.5-TEST16 [20080405]

  • [gui,defect-8.0] Keyboard input and shortcut / accelerator key conflicts lacking proper conflict resolution and precedence. Issue-I492 [r16][*]
  • [implementation] Now compiling under Visual C++ 2008 (was 2005) before. (minor effect) [r16]
  • [implementation] Upgrade to boost 1.35.0. (minor effect) [r16]

8.0.5-TEST15 [20080331]

8.1 Early Access

  • [beta,prog] New sim_repulsion_amount reserved variable. Issue-I452.2 [r15][*]

8.0.5-TEST14 [20080327]

  • [prog,enhance] simion.import() now accepts parameters to forward to loaded function. Issue-I444.2 [r14]

8.0.5-TEST13 [20080327]

8.1 Early Access

  • [beta,core] Refine extended to solve the Poisson Equation Issue-I482 [r5][r13] Update: 2008-04-14: Fixed a fairly critical error in piclib library in the Poisson examples. The following should be added to the top of segment.other_actions (just after the if PIC_enable == 0 then return end): if ion_time_of_flight <= ion_time_of_birth then return end.
  • [beta,prog-pa] pa:clear() sets all points to 0V nonelectrodes. Issue-I422 [r13]
  • [beta,prog-pa] pa:potential_add(xi,yi,zi, val) adds potential val to potential at point (xi,yi,zi). Issue-I422 [r12]
  • [beta,prog-pa] pa:copy(pasrc) copies all points from pasrc to pa assuming array size identical. Issue-I422 [r12]

8.0.5-TEST12 [20080324]

  • [prog,enhance] Improved detection of undefined variables (checkglobals) Issue-I490 [r12]
  • [gui,enhance] Add more underscores to controls for shortcut access keys. Issue-I90 [r11][r12][*]
  • [gui,enhance] Automatically toggle out of PE View when clicking XY/ZY/XZ/3DIso/Load/Save buttons. Issue-I270.2 [r12]
  • [gui,defect-7.0] Drawing flags in PAs list get misordered when L+/L-/Add/Del used. Issue-I344.2 [r12]
  • [example,new] New field lines/vector plotting example (‘contour’) Issue-I178.2 [r12][*]
  • [example,new] New example: Applies user program to record data on multiple non-orthogonal test planes (‘test_plane’) Issue-I221.2 [r11]

8.0.5-TEST11 [20080320] (only early access mode changes)

8.0.5-TEST10 [20080319]

  • [prog,enhance] sim_trajectory_quality now accessible at the top-level of a workbench program. Issue-I370.3 [r10][*]
  • [prog,enhance] Improve Lua output handling (for data recording file)
    • f:write method now implemented
    • seek, flush, and setvbuf methods now implemented (useful for output buffering control) Issue-I335 [r10][*]
  • [prog,defect-8.0] ion_instance no longer accessible from top-level of workbench program. Issue-I487 [r10] (minor)
  • [prog,defect-8.0] “Data Recording file not closed if Lua workbench program fails at top-level.” Issue-I488 [r10][*]

8.0.5-TEST9 [20080319]

  • [gui,enhance] Autoloading/saving issues: Issue-I317
    • Single dialog box now presented for selecting autoload files to save with IOB file. Issue-I317.4 [r9]
    • Auto-save/load contour files (.con) with workbench (.iob) file. Issue-I317.3 [r9]
    • Save workbench Lua program when saving IOB under new name. Issue-I317.2 [r9][*]
  • [gui,change] Increased command-bar history size to 50. Issue-I397.2 [r9]
  • [gui,change] Lua commands with errors now saved in the history buffer of the command bar. Issue-I397.3 [*][r9]
  • [gui,defect-8.0] Prevent current directory changing when loading .con/.rec/.fly/.fly2/.ion/.pa files outside the current directory. Issue-I220.2 [r9][*]

8.1 Early Access

  • [beta,prog-pa] pa:refine if long running now updates screen and responds to abort requests. Issue-I422.2 [r9]

8.0.5-TEST8 [20080311]

  • [prog,defect-8.0] ion_charge and ion_cwf variables broken in PRG Issue-I485 [r8][*] (sim_trajectory_quality also now supported in PRG – Issue-I370.2)
  • [prog,defect-TEST] error message report wrong variable name upon read access denied to adj_elect (8.0.5-TEST4 to TEST7) [r8] (minor)

8.0.5-TEST7 [20080307]

  • [gui,enhance] Allow dot/marker size in View to be increased. Issue-I483 [r7][*]

8.0.5-TEST6 [20080229]

  • [gui,defect-TEST] Fixed frame becomes disabled if Run Lua Program raises an error. (8.0.5-TEST1 to TEST5) [r6]

8.0.5-TEST5 [20080227]

  • [core,CRITICAL-8.0]Fixed problem where array with fast proportional scalable electrodes was not fast adjusted properly when loaded from an IOB file Issue-I172.2 [r5]
  • [gui,change] Prompt “One (or More) Array Dimension is less than 11… Proceed with Refine Now? (Y=YES,N=NO)” default changed to YES. (minor) [r5]

8.0.5-TEST4 [20080211]

  • [gui,enhance] Reduce minimum PA mm/gu scaling from 1E-5 to 1E-6. Issue-I478 [r4][*]

8.0.5-TEST3 [20080128]

  • [core,defect-7.0] Precision ignored if width is zero in data recording. Issue-I477 [r3][*]

8.0.5-TEST2 [20080126] (only early access mode changes)

8.0.5-TEST1 [20080122]

  • [core,enhance] Improve responsiveness on PA load/save (Asynchronous I/O). Issue-I468 [r1][*]
  • [core,defect-8.0] Fail saving an array larger than 64MB on a network share. Issue-I467 [r1]
  • [prog,defect-8.0] Upgrade Lua from 5.1.2 to 5.1.3 (bug fix only release). Issue-I404 [r1]


8.1 Early Access

  • [beta,prog-pa] Manipulating PAs from Lua inside SIMION: Issue-I422
  • [beta,prog-wb] Manipulating workbenches from Lua in SIMION. Issue-I496

Key: [rX] is revision 8.0.5-TESTX.

8.0.4 2008-01-01 (RELEASE VERSION)


  • Issue-I414 - Allow PA# electrodes number to be non-sequential [r4][r8]
  • Issue-I313 - Add Crop function in Modify [r5][*]
  • Issue-I420 - New Bessel functions in SIMION Lua libraries. [r6]
  • Issue-I406 - New simion.status Lua function to display text on status bar [r1][*]
  • Issue-I407 - Custom distributions in FLY2 [r2]
  • Issue-I392 - Display full Lua stack traceback on error (improved)
  • Issue-I415 - Allow PE/Contour views of PA’s with no electrode points. [r5][r9][*]
  • Issue-I418 - Allow opening workbench user program from Particles tab in View. [r6][*]
  • Issue-I421 - New “early access” mode for accessing 8.1 features. [r7]
  • Issue-I422 - Manipulating PAs from Lua inside SIMION [r7][r21][r22] [earlyaccess]
  • Issue-I424 - New gem2pa command line options to override pa_define [r9]
  • Issue-I426 - In FLY2, new “window” standard_beam attribute. [r10]
  • Issue-I235 - Report calculation time for flying ions at end of run. [r12][*]
  • Issue-I435 - When Fly’m terminates, display number of trajectories flown. [r12][*]
  • Issue-I296 - Support variable substitution and macros in GEM files [r13][*] Illustrated with new example: geometry/macro.gem
  • Issue-I364 - Click sound whenever long-running task completes [r14][*]
  • Issue-I437 - Eliminate unnecessary .PA# reloading in Refine (performance) [r14][*]
  • Issue-I413 - Allow resume of a terminated PA# refine. [r14][*]
  • Issue-I438 - Extend az/el angle range in particle definitions from +-180 to +-360 degrees. [r15][*]
  • Issue-I314 - Support tab character delimiter in data recording. [r16][*]
  • Issue-I444 - simion.import() now returns return values [r17]
  • Issue-I448 - Preserve adjustable electrode potentials when replacing PA in View. [r17][*]
  • Issue-I255 - Loading IOB/PA files from Windows explorer file associations or command-line. [r17][r18][*]
  • Issue-I450 - Lua expressions supported in text box controls. [r18]
  • Issue-I451 - Add line_distribution to FLY2 GUI [r18]
  • Issue-I452 - Add charge weighting factor (CWF) to Data Recording output and add new ion_cwf reserved variable. [r19][*]
  • Issue-I262 - Force Lua garbage collection at begin/end of Fly’m and on removing all PAs from RAM (e.g. closing file handles) [r19][*]
  • Issue-I457 - Charge weighting factor (CWF) permitted range changed to [0, 1E+30]. [r20][*]
  • Issue-I458 - New --temp-path command-line option for modifying default path for temporary trajectory files. [r21][*]
  • Issue-I128.1-Reallocate block of memory if PA being loaded into block does not fit. [r21]
  • Minor: GUI layout changes in Modify, New, command-line [r18], batch mode without --nogui now loads GUI [r18]
  • New SIMION Libraries (Issue-I400): simionx.Type - A type system, simionx.Integration - Numerical integration routines, simionx.FieldAnalysis - Integration over Fields, simionx.Format - String formatting utilities. [r12]
  • Updated SIMION Supplementary Docs format [r21]
  • Issue-I479 - Default program folder name is now “SIMION-8.0” rather than “SIMION 8.0” (avoids spaces) [r22]
  • Issue-I428 - New charge repulsion examples (“repulsion”) [r10]
  • Issue-I439 - New RF octupole ion guide example - examples/octupole. [r15]
  • Issue-I442 - New lens property examples. [r16]
  • Issue-I460 - Updated gauss_law example [r21] [uses earlyaccess]
  • Issue-I462 - Add simion.sleep(seconds) function. [r25]
  • Issue-I463 - Formal support for Windows version of SIMION on Intel-based Mac OS X

Defects in 8.0:

  • Issue-I440 - KE precision error when defining very low speed or momentum in FLY2. [r16][critical]
  • Issue-I417 - Printing .WMF files broken [r6]
  • Issue-I408 - False “The Data Recording (or Trajectory) File Has Filled Your Disk” message in batch mode. [r3]
  • Issue-I410 - Crash on flying in batch mode when “Describe Ions” data recording option enabled. [r4][*]
  • Issue-I411 - GEM files with include statements and UNIX line terminators may give false compilation errors. [r4]
  • Issue-I412 - “File name too long” error message when printing. [r4][*]
  • Issue-I416 - Annotation (.ANN) file incompatibility between version 7 and 8.0.0. [r6][useful]
  • Issue-I423 - “No Potential Change Requested” displayed when loading an IOB. [r8]
  • Issue-I425 - Automatically increase a PA’s max_voltage in SL Libraries and SL Tools [r9]
  • Issue-I431 - Lua _G table wasn’t shared between batch mode program and workbench program in non-GUI mode [r11][useful]
  • Issue-I436 - Unrefined status (“!”) not display correctly after fast adjusting PA# file (minor) [r12]
  • Issue-I443 - Canceling PAs|Rpl or Saving .REC file stops display update. [r17][r19] [minor]
  • Issue-I446 - Convert Lua errors to strings. [r17] [minor]
  • Issue-I445 - Fast Adjust Voltages sometimes disabled on View screen. [r17]
  • Issue-I447 - print() or print '' not output blank line [r17] [minor]
  • Issue-I335 - Lua standard input support re-enabled in non-GUI mode [r18][r23]
  • Issue-I454 - Prohibited access to reserved variables not triggering error, or error message identifies wrong variable name. [r19]
  • Issue-I455 - simion.redraw_screen() crashes if executed after exiting Modify/View screen. [r19]
  • Issue-I461 - Particle flying gets very slow after switching tab in View under Wine/Linux. [r24]
  • Issue-I348 - View Variables tab list cut off and not updated in display. [r25]

Defects in 7.0:

  • Issue-I453 - Modifying ion_charge can cause charge repulsion effects to be wrong. [r19][critical]
  • Issue-I419 - Performance test 6_cylindrical_pa_test docs should indicate radius 300 mm not 30 mm. [r6]
  • Issue-I430 - Longest time-step calculation incorrectly handles mm/gu scale factor (usually minor) [r11][*]
  • Issue-I433 - Last field in ION file dropped if new-line or white-space missing at end of file. [r12][*]
  • Issue-I434 - Pressing Keep twice in View clears trajectories (minor) [r12][*]
  • Issue-I449 - Preserve “nz use” value upon replacing 2D PA in View (minor) [r18]
  • Issue-I456 - ION definitions with parameters out of range can be loaded without warning and truncated by the particle definition screen. [r20][*]

Defects in SL Tools:

  • Issue-I432 - SL Tools crashes if STL file name (or wildcard pattern ‘%’) specified does not match any files. [r12][*]
  • Issue-I459 - SL Libraries pa.field_real gives wrong signs for negative y or z in cylindrical symmetry. [critical]

Early Access:

  • Issue-I427 - New multipole expansion cofficient calculation example. (“multipole_expansion”) [r10][r21]

Defects in Tests versions

  • [r20] - fix “Lua Program Running” status does not dissappear in [r19]
  • [r20] - fix simion.pas[n] functions handling NaN (e.g. field_vc).
  • [r23] - fix problem print() not going to rec output file [r18] Issue-I335

Internal (should not have visible effects): Refactoring trajectory code [r10]

[rX] is revision 8.0.3-TESTX.


SIMION 8.0 Program Enhancements

  • Issue-I172 - Support for multiple fast proportional scalable electrode sets (see “ionfunnel” example” and SIMION Docs on “Additional Fast Scalable Electrodes in SIMION 8.0.3”) [r10]
  • Issue-I397 - Add command-bar history. [r7]
  • Issue-I228 - Allow Log window data to be copied to the clipboard. [r7]
  • Issue-I364 - Flash taskbar icon and sound upon completion of long-running function. [r6][*]
  • Issue-I391 - Display full GEM and PRG errors immediately (without requiring user to enter debugger)
  • Issue-I392 - Display full Lua stack traceback on error.
  • Issue-I370 - Add new sim_trajectory_quality reserved variable readable and writable in the initialize, other_actions, and terminate segments. Controls trajectory quality factor (-500 to +500). [*]
  • Issue-I398 - New simion.VERSION variable. [r8]
  • Issue-I399 - Add lua51.dll (proxies lua5.1.dll) for improved Lua module compatibility.
  • New libraries: (Issue-I400)
  • SL Tools/SL Libraries Enhancements:
    • Issue-I363 - Increase SL Tools and SL Libraries from 50 million (SIMION 7) to 200 million (SIMION 8). New command-line option (e.g. --reserved-memory=1.8G) [*]
    • Issue-I401 - Order of magnitude increased PA load/save performance in SL Tools and SL Libraries for C++
  • New examples: (Issue-I402)
  • Updated examples/documentation:
    • Improve documentation of quad\quad.lua (Issue-I402). [*]
      • also replace quad*.fly with quad*.fly2 to eliminate code.
      • minor fix to PE update when flying non-grouped: abs(ion_time_of_flight - last_pe_update) >= pe_update_each_usec
      • add tstep_adjust for improved robustness
    • Issue-I403 - New “SIMION Libraries API” Documentation in HTML (“Libraries API Reference” in “Help|Browse Documentation”)
    • Issue-I405 - “sharing violation” opening results.csv in geometry_optimize.lua under Linux (find handle needs closed)
    • License addition concerning source code.


  • “:” and Esc shortcut keys move in and out of command bar. [r6]
  • Reduce flicker on Particle Definitions screen.
  • Add missing tooltips and make blue color in status bar.
  • Increase size of TQual field (was too small).
  • “Particles | Define and Recording” screens open in tabs. [r6]
  • In PAs tab, add instance numbers. [r6]
  • Eliminate “PA is Empty: Create A New PA?” question when Modifying and empty PA. [r6]
  • Increase default brightness of OpenGL view. [r6]
  • New empty array is considered refined. [r6]

SIMION 8.0 Defects:

  • Issue-I404 - Update Lua to 5.1.2 (bugfixes only update).
  • Issue-I367 - Command-line errors not always displaying/trapping.
  • Issue-I374 - “Use programs” checkbox out of sync. [*]
  • Issue-I375 - False warning that .PA/.PA# file is electrode solution file upon entering Modify if file has bad “short” 8.3-format name. [*]
  • Issue-I377 - Particle definitions for FLY2 sometimes wrongly displayed “(special)”
  • Issue-I378 - “Clear All” disabled on FLY2 Particle Definitions screen
  • Issue-I376 - Lua file locked, preventing editing. [*]
  • Issue-I389 - Checking “Rerun” does not clear trajectories.
  • Issue-I393 - Open file dialog box in current working directory. [r6]
  • Issue-I394 - GEM “include” command fails unless .gem extension given in file name. [r6]
  • Issue-I395 - Execution of command C:\Program Files\SIMION 8.0\sltools.exe failed (error 193: unknown error c1) [r7]
  • Issue-I258 - Log window cleared after running print() commands in top-level of Lua program. [r7]
  • Issue-I396 - Programs still compiled if “Use programs” disabled. [r7]
  • Issue-I89 - “enable data recording” on Data Recording screen not reset on dialog cancel.

SIMION 7.0 Defects

  • Issue-I115 - SIMION may crash on startup if another SIMION7 or SIMION8 running and 1000 GUI*.TMP files exist in C:\FILES.GUI. Also patched in 7.0.5. [r9]
  • Issue-I390 - Buffer overflow on certain bad GEM syntax (minor) [r6] Also patched in 7.0.5.

[r6] updated in 8.0.3-TEST5+6; [r7] updated in 8.0.3-TEST7; [r8] updated in 8.0.3-TEST8 (note: includes simionx API changes too); [r9] updated in 8.0.3-TEST9; [r10]updated in 8.0.3-TEST10 (note: .PA+ fixes)


Summary: This version makes a number of things easier for the user, corrects some defects, and provides new secondary emissions and C/C++ extension examples. A convenient new feature is it can auto-refine PAs when loading the IOB examples, and it also more actively warns the user when doing likely unreasonable things. Example docs and code structure, particularly the trap, drag, and collision_hs1 examples have been enhanced. A slight change in semantics of adjustable variable assignment makes user adjustment of adjustable variables in the trap example more reliable.


  • Issue-I351 - In main screen, non-refined PAs are now marked with “!”.
  • Issue-I341 - Simplified auto-refining of PAs during IOB loading. [!]
  • Issue-I343 - Warn on attempt to modify/refine/view wrong PA type.
  • Issue-I350 - Remove warning on entering View with PA file not on disk.
  • Issue-I336 - Display error on attempt to run workbench Lua program outside workbench (improved) [*]
  • Issue-I293 - New “Update PA” on GEM file screen to erase and insert in one step.
  • Issue-I359 - Lua now binary compatible with C/C++ extension modules.[!]
    • In View, PE button now also located on display bar.
    • Doc button in Workbench tab in View and also Load IOB and Browse Files dialog boxes can now open README.html and other README.* files.
    • Improve PA memory allocation failure message.
    • Record simion.command() command executed in log.
    • Other various minor GUI improvements.
    • New demo version build.
    • allow simion.command() to be run outside of “Run Lua Program” invocation, such as in command bar.
  • Examples:
    • New secondary emissions example. [!]
    • New extension example (calling C/C++ from Lua)(Issue-I354) [!]
    • Improve text of README.html files in examples.
    • In example drag\drag.lua, comments expanded on derivation.
    • In example trap\trap.lua, mode now configurable via adjustable variable.
    • In example trap\util.lua, explain derivation of trap constants and refactor code.
    • In example geometry_optimization\geometry_optimize.lua, display results.csv in Notepad.
    • In example collision_hs1\collision_hs1.lua, cleanup use of locals and enhance KE average calculation. Make PA planar.
  • Changes
    • Issue-I353 - Change in behavior of adjustable variable assignments in Lua affecting current v.s. default values.
  • Defects in 8.0
    • Programming/Batch Mode
      • Issue-I357 - Prevent simion.command() calls from having side-effects such as leaving additional PAs around in memory and parameters modified. [!] Following two issues are related.
      • Issue-I358 - fly batch mode command not raising Lua error on failure.
      • Issue-I355 - fastadj command in batch mode program may cause subsequent command to terminate when run in GUI mode. [*]
      • Issue-I357 - run_stop() now disables window frame (prevents other user actions) and properly functions in non-GUI batch mode.
      • Issue-I348 - View Variables tab list cut off and not updated in display.[*] Relative IOB path path now accepted in fly batch mode command (see Issue-I220)
    • GUI
      • Issue-I58 - Ensure ESC key cancel actions in View screen. [!]
      • Issue-I346 - Mouse remains locked in window upon task switching with CTRL key down. [*]
      • Issue-I356 - Warning “too many ions for list size” can display when loading ION file containing list size ions. [*]
      • Issue-I344 - View PAs tab instance list not updated on loading IOB.
    • Installation
      • Issue-I360 - Install/run fails if C: drive does not exist for FILES.GUI directory.
    • Examples
      • Issue-I362 - HS1 collision model did not accurately thermalize. [!][*]
      • Issue-I358 - Example quad\quad.lua was not using _quad_entrance_voltage, _quad_axis_voltage, and _quad_detector_voltage variables.[!]
      • Issue-I349 - Example tune\tune.lua doesn’t update PE surface between flights (minor)
      • Issue-I352 - Example trap\util.lua fast_adjust segment test first incorrectly (minor/efficiency)
      • See also Issue-I353 relating to trap example.

Internals: reduce use of packed structs, 7.0 buffer correction. Other notes: This is a report that SIMION runs well on Intel Macs under CrossOver Mac (Mac OS). [*]

[!] important or particularly significant


  • Enhancements
    • Issue-I299 - New --noprompt command-line option to disable prompting in batch mode. [*]
    • Issue-I229 - Allow log window to open in separate larger window. [*]
    • Issue-I335 - Improve Lua output handling (e.g. print() function output to log window).
    • Issue-I336 - Display error on attempt to run workbench Lua program outside workbench.
    • Added SciTE setup info to “Editing SIMION Text Files” document.
  • Defects in 8.0
    • Issue-I333 - Zoom was reset after fast adjust. [*]
    • Issue-I322 - Data recording crossing plane window sizing problem. [*]
    • Issue-I326 - Crash if initial particle params out of range.
    • Issue-I337 - Fix Window-style line endings in some Lua files [minor]
  • Defects in 7.0
    • Issue-I331 - Acceleration error in overlap of electrostatic PA with magnetic PA of higher grid density. Also patched in 7.0.4. [CRITICAL] [*]


  • Production release.


  • Resolved Issue-I277 - Workaround Wine/Linux bug 2398 (OpenGL client window).
  • Remove click sounds on Modify window button mouse over.
  • Add simion key file in installation.


  • Resolved Issue-I276 - Display double buffering broken under Linux/Wine.


  • Resolved Issue-I142 - Key input commands (KEY?, R/S, key(), run_stop()) freeze.
  • Resolved Issue-I239 - Immediately splat FLY2 particles with parameters out of range.


  • Handling of non-SSE2 CPUS improved in installation.
  • Removed unused SL compiler library files fully from install.
  • Cleaned up docs on SIMION text editor plugins.
  • Cleaned examples documentation a bit.
  • Update welcome page.
  • Reenabled SSE2 on GUI module.


  • Gracefully handle non-SSE2 CPUs.
  • Warn on attempting to install on Win9X.


  • Added Docs and SL Tools (Issue-I131) buttons to main screen. (note also SL libraries, Issue-I472)
  • Installer available.


  • Default to electrons in FLY2 file if mass/charge not specified.


  • Some View screen control rearrangements.
  • Resolved Issue-I253 - Make print button visible in View when Hide selected.
  • Fixed sizing of positioning info list on PAs tab in View.


  • Added missing tooltips on View and other screens.
  • Fixed Issue-I154 - On data recording and particle definition screen, coordinates display in status bar when mouse moves.
  • Fixed Issue-I269 - 3D view display stops updating after exiting data recording screen.
  • Fixed Issue-I270 - XY,ZY,XZ,3D ISO iso buttons were not disabled in PE view.
  • Fixed Issue-I271 - In Modify, ctrl+right click to replace was ignored if focus not on 3D (simgui) window.
  • Fixed Issue-I272 - In Modify 3D (OpenGL) window crashes if closed when converting to polygons.


  • Fixed Issue-I267 - FLY2 coordinates relative to not preserving.


  • Modify screen rearranged slightly according to manual.
  • Some more tooltips added.


  • Replaced exact angle button with constrain checkbox in View
  • Fixed Issue-I266 - Alt key ignored after right mouse down on window scroll button without focus in 3D view screens
  • Fixed Issue-I59 - Flying ions as dots goes at high speed if mouse not directly over 3D view window (simgui window).


  • FLY2
    • rename gaussian3d {mean_x = 0, mean_y = 0, mean_z = 0, stdev_x = 0, stdev_y = 0, stdev_z = 0} –> gaussian3d {mean = vector(0,0,0), stdev = vector(0,0,0)}
    • new coordinates attribute on particles { }. coordinate system is now preserved on save/load.
  • Update on Issue-I212 - if no units comment line given in ION file, now defaults to WB coordinates mm (0). Was PA instance 1 gu coordinates (1) in earlier betas and undefined behavior in 7.0.


  • FLY2
    • cylinder_distribution implemented
    • rename axis_direction –> axis
    • remove underscores from GUI
    • fixed “text” (now “(special)”) in FLY2 GUI - used for sequences and distributions int the FLY2 file but not listed in the GUI
    • “edit as text” now works for writing, not just reading


  • Resolved Issue-I263 - Disable sounds by default in batch mode operation.


  • Fixed 8.0beta14 error in .fly loading


  • FLY2 changes:
    • rename linear_sequence –> arithmetic_sequence
    • rename line3d_sequence –> line_sequence
    • rename vertex_angle –> half_angle
    • rename disc_distribution –> circle_sequence { fill = true, ... }
    • rename cone_distribution –> cone_direction_distribution {fill = true }
    • rename cone_edge_distribution –> cone_direction_distribution
    • new line_distribution type
    • new sphere_distribution type
    • line_sequence/line_distribution now editable in the GUI.
    • NOTE: cylinder_distribution not yet functional.
  • new Check for Updates button on main screen.


  • Increased max ions default from 500 to 1000.
  • Moved PE controls to Contours tab.
  • Open button on Browse Files edits text files.


  • c adj_elect[0] and adj_pole[0] now same as adj_elect00 and adj_pole00


  • Changes

    • Lua workbench user programs now require a simion.workbench_program() statement at the top of the program. Lua segments also require a segment. prepended to the name. Example:

        function segment.other_actions()
    • These variables have been renamed in Lua programs:

      rerun_flym                --> sim_rerun_flym
      update_pe_surface         --> sim_update_pe_surface
      trajectory_image_control  --> sim_trajectory_image_control
      retain_changed_potentials --> sim_retain_changed_potentials

      Old versions have been deprecated with error.

    • ion_instance not visible in init_p_values segment.

  • Defects in beta:

    • Fixed Issue-I257 - Crash on Lua print() outside of segment when loading IOB.
    • More robust update of PRG variables in debugger.


  • Defects in beta:
    • Read/write protections on user variables (p.I-21 sim7 manual) now active.


  • Enhancements:
    • Lua commands now work in command bar.
    • Lua local adjustable variables are now case sensitive (were case insensitive). In PRG, adjustables remain case preserving.
  • Detects in beta:
    • Fixed Issue-I94 - Variables tab and Lua variables synchronization problems.


  • Defects in beta:
    • Fixed Issue-I248 - Lua stack overflow on syntax error in user program called by simion.import.
    • Fixed Issue-I249 - Status bar cleared on hovering mouse over window with tooltip.
    • Fixed Issue-I250 - Particle definition and other filenames not display when loaded from IOB.
  • Enhancements:
    • Addressed Issue-I247 - Refine max iteration limit and default increased to 1E7, and other refine screen issues.


  • Added simion/extra.lua


  • More FLY2 enhancements


  • More FLY2 enhancements


  • Enhancements
    • Issue-I215 - Support Lorentzian distribution in FLY2
    • Issue-I227 - Add fly --restore-potentials=b command-line option.
  • Defects in earlier 8.0betas - FLY2 fixes.


  • Enhancements
    • Resolved Issue-I17 - Prevent display flicker with double buffering.
    • Moved Log Window into new “Log” tab in View screen.
  • Defects in earlier 8.0betas:
    • Fixed Issue-I224 (and Issue-I65,:issue:86) - Loss of view definitions on entering workbench tab.


  • Defects in 7.0:
    • Fixed Issue-I223 - Particles may skip through PA at el=180deg. (currently only patched in 8.0, not 7.0)


  • Fixed Issue-I219 - Various printing screen issues: labels, color, annotations.
  • Fixed Issue-I222 - Double/halve functions refuse to run.


  • Experimental: FLY2 support is partially implemented (but certainly not ready for production use yet). See “group 2” on the particle definitions screen to try it out.
  • Detects in 7.0:
    • Issue-I212 - Minor changes to ION file parsing for improved robustness (patch not made to 7.0)


  • New features
    • Issue-I209 - [+-] keys zoom in/out in on Modify OpenGL view.
    • Issue-I210 - Isometric view option on Modify OpenGL view.
  • Defects in ealier 7.1/8.0 betas:
    • Fixed Issue-I207 - Key shortcuts bypass field validation (killfocus).
    • Fixed Issue-I208 - User preferences (FILES.GUI) ignored in batch mode.
    • Partially fixed Issue-I211 - Verbosity of batch mode output.


  • Defects in earlier 7.1/8.0 betas:
    • Fixed Issue-I205 - “No such file or directory” when loading file.
  • Experimental:
    • more progress on .FLY2 particle definition support (not yet functional!)
  • Debug: Add debug code for Issue-I206 - “highest_parent_object - no highest_parent found error”


  • New features:
    • IOB file name displays in title bar (I204).
  • Defects in earlier 7.1/8.0 betas:
    • Fixed Issue-I203 - Down/up arrow keys in data fields skip data validation.


  • New example GEM: examples/gem/tetrahedron.gem
  • Defects in earlier 7.1/8.0 betas:
    • Fixed --reserved-memory option broken in beta11.
    • Fixed incompatibility in pre-Windows 2000 OSs (GetConsoleWindow).
  • Experimental:
    • Issue-I471 - Initial .FLY2 particle definition support (not yet functional!). This is the “Grouped 2” option on the particle definition screen. This should be ready in beta12.


  • New command-line capabilities:
    • fly command more fully implemented: --particles, --recording, --repulsion, --repulsion-amount, --retain-trajectories, --adjustable, --markers, --marker-color
    • New lua command to transparently invoke the Lua interpreter.
    • new --version option
  • New “Run Lua Program” button on main screen. Useful for running batch mode programs from the GUI.
  • New built-in Lua functions:
    • simion.command(string) - invoke command via command-line like API
    • simion.import(filename) - import one SIMION lua program into another.
  • New/updated Lua examples:
    • [NEW] Example(geometry_optimization) - geometry optimization
    • [NEW] Example(emittance) - calculation of emittance
    • [NEW] Example(excel) - plots phase plot in Excel
    • [sort of NEW] Example(collision_hs1) - collision model based on SL version
    • “tune” - voltage optimization (based on SL/PRG versions)
    • “einzel” - einzel lens (largely unchanged from 7.0)
    • “drag” - stokes’ law example (converted to Lua + more docs)
    • “gem” examples: cone.gem and tune.gem
    • “tof” example (largely unchanged from 7.0)
    • “trap” example (converted to Lua and refactored)
    • “buncher” example (converted to Lua / partially to C++)
    • “quad” example (converted to Lua)
    • “sims” example (largely unchanged from 7.0)
    • “icr” example (converted to Lua and refactored)
    • “rfdemo” example (converted to Lua, fix voltage calc in area example)
    • “random” example (converted to Lua)
    • “misc” examples (largely unchanged from 7.0)
    • “magnet” examples (largely unchanged from 7.0)
    • “performance_tests” examples (currently unchanged from 7.0)
  • HTML documentation: see README.html in the main program data folder.
  • Lua now includes Luacom (COM interface) for controlling other programs. See “excel” (Microsoft Excel) example.
  • Internal
    • upgraded Lua to 5.1.1.
    • upgraded Boost program options to CVS version.


This release further expands the batch mode (command-line) capabilities.

  • New command-line capabilities:
    • refine command - refine a PA.
    • fastadj command - fast adjust a PA.
    • fly command (partially implemented) - fly IOB file.
    • --editor option - text editor to use
  • Detects from earlier 8.0 betas:
    • Improved status bar display.


This release provides initial batch mode (command-line) capabilities (Issue-I130), and properly supports up to almost 200 point PAs via the --reserved-memory command-line option. It also resolves various defects and has internal changes.
  • New features
    • New command-line interface / console mode (in progress)
    • New command-line options:
      • --reserved-memory=size allowing PA sizes of ~1.85GB to be obtained on Windows XP.
      • --nogui non-GUI, console mode.
      • gem2pa - convert GEM to PA file.
      • --default-num-points and --default-num-particles
    • Enabled SSE2 CPU extensions on optimized build (slight performance improvement)
    • Converted many toggle buttons to checkboxes.
  • Changes from 7.0:
    • Command-line format differs. Do simion.exe --help for details. Previously was SIMION 1000000 #2000 ! (p. B-3, SIMION 7.0 manual).
    • SIMION_EDITOR environment variable. GUI_EDITOR is deprecated and GUI_FILENAMES is now ignored (long names are standard now).
  • Defects from earlier 7.1/8.0 betas
    • Fixed Issue-I200 - Secondary keys do not work on gui window.
    • Fixed Issue-I202 - Extra .PA extension added when saving .PA# files under Win2K
  • Defects from 7.0
    • Fixed Issue-I201 - GEM file includes don’t properly resolve paths in other directories. (not patched in 7.0)
  • Implementation:
    • upgrade GUI library
    • GEM code refactoring.


This release provides major new capabilities such as Lua programming, increased limits, performance enhancements, and initial OpenGL viewing in Modify. It also resolved numerous defects.
  • New features
    • Incorporating Lua programming language, with preliminary Lua scripting for user programs (subject to change). Issue-I470.
    • Increased maximum PA size limit from 50 million (~500MB) to effectively ~200 million (~2GB)–or ~300 million (~3GB) for WinXP having the /3GB option enabled. (I163) This is not very well tested at the moment but seems to work. The /3GB option is not yet tested at all but may work. (
    • Increased maximum number of ions in memory from 500 thousand (~84 MB) to 10 million (~1.7 GB) (I164)
    • Implementation: Now compiling under Visual C++ 2005 (was Visual C++ 6 before). This provides measurably better performance and roughly ~20-40% reductions in run-time from SIMION 7.0.0. (Issue-I185)
    • More compact layout on View screen and “Hide” button that collapses top panel. (I177)
    • OpenGL viewing of PAs in Modify (incorporated from SL Toolkit).
    • Updated fast adjust screen GUI.
    • Resolved Issue-I98 - On fast adjust screen, eliminate “you didn’t respond to any potential changes” warning.
  • Defects also incorporated into 7.0:
    • Fixed Issue-I168 - In SIMION data recording, electric potential (E) records magnetic potential whenever a magnetic PA of 2D planar symmetry is active. Also patched in 7.0.1-2006-04-10.
    • Resolved Issue-I170 - SIMION may freeze on startup with the message “Initializing Random Number Generator”. Also patched in 7.0.3-2006-04-25.
    • Resolved Issue-I171 - SIMION may crash when calling the seed function in a PRG user program. Also patched in 7.0.3-2006-04-25.
    • Resolved Issue-I191 - Long file names (greater than 8+3=11 characters) may cause error messages. Also patched in 7.0.4.
    • Resolved Issue-I192 - Buffer corruption when saving IOB of file length slightly more than 12 chars. Also patched in 7.0.4.
  • Defects in earlier 7.1/8.0 betas:
    • Fixed initialization of random number generator from active.tbl.
    • Fixed assert on loading PAs with ng <= 0 (e.g. DETECT.PA).
    • Fixed Issue-I193 - Only 12 characters of filenames are displayed in PA and PA instance lists
    • Fixed Issue-I195 - On adding a new PA instance to the IOB, angular info (Rotation, Elevation & Azimuth) not read into prompt box.
    • Fixed Issue-I194 - Memo information not displayed.
    • Fixed Issue-I143 - User program enable/disable switch missing in View.
    • Fixed Issue-I11 - Time marker controls were temporarily removed in View screen.
    • Fixed Issue-I162 - “mm” label not display on ion definition screen.
    • Fixed Issue-I167 - Sounds not suppressed when the SIMION window is deactivatived.
    • Fixed Issue-I137 - In fast adjust screen, focus not moved to panel on electrode selected.
    • Fixed Issue-I199 - On first opening file dialog box, file name is string of spaces.


This release resolves various defects.

  • Defects in earlier 7.1betas:
    • Fixed data recording monitor slowness and overflow problems (I144)
    • Fixed PA list on main screen not always updated (I50)
    • Fixed variable corruption in debugger (I159)
    • Fixed non-adjustable variables displaying in Variables tab in View (I161)
    • Fixed “Double” button not working (I74)
    • Fixed design defects on file selection dialog boxes (I150)
  • Defects in 7.0:
    • Fixed other variables not initialized in debugger (I157)


This release expands the maximum number of electrodes, makes various GUI improvements, and resolves some defects.
  • New features:
    • Maximum adjustable electrodes increased from 31 to 128. New adj_elect31 .. 127 and adj_pole31 .. 127 reserved variables added as well as new adj_elect and adj_pole reserved arrays. (see Max Electrodes for full details). (I127)
    • GEM screen redesigned.
    • Some Modify screen layout changes, e.g. point type.
  • Defects in earlier 7.1betas:
    • Reduced minimum size of graphic window (I29)
    • Fixed progress bar (I39)
  • Detects in 7.0:
    • Fixed “Illegal Fastadj Potential Count in test.pa0” when loading IOB with maximum adjustable electrodes (I158).


This release makes various GUI improvements and resolves some defects.
  • Main screen rearranged more.
  • Validate value when enter key pressed in text/spin controls (I18)
  • Defects in ealier 7.1betas:
    • Improve performance and reduce flicker when changing screens
    • Eliminate multiple-flicker upon starting Fly in View
    • Fixed accelerator key conflicts with text/spin controls (I37)
    • Fixed focus issues with view toggle button in fast adjust screen (I141)


User-visible changes:

  • Precision on numeric fields is now properly implemented (I111).
  • Print options screen redesigned (I14).
  • Fixed update of coordinate/potentials in status bar on mouse hover over View/Modify screens (I73).
  • Improve toggle button behavior (disable XP hover effect) (I149)
  • Coloring added on panels (I151) as well as to OK/Cancel buttons.
  • Variables panel on View screen is now two columns (I152).
  • Various small layout improvements: View/Def/Welcome screens.


User-visible changes:

  • “compile/debug” screen redesigned (2005-12-28), including placing variable list inline.
  • “options/customize” and “color/palette” screens redesigned (2005-12-30)
  • “fast adjust” screen redesigned. (2005-12-24)
  • Rearranged main and view screens since last beta. (2005-12-30)
  • Added IOB filename to main screen. (2005-12-29)
  • Various fixes in mouse handling in beta (2005-12-24)

7.1-BETA2-2005-12-22 (22005-08 through 2005-12-22) - djm

Summary: SIMION Project is now maintained by Scientific Instrument Services, Inc. (SIS). The main change is a large change to the GUI framework.

User-visible changes:

  • Incorporate new GUI framework utilizing native controls:
    • most screens have been redesigned
    • native mouse cursor
    • native file manager (replaces GUI File Manager)
    • native controls (buttons, text boxes, list boxes, etc.)
    • native message box for help boxes.
    • native windows colors for dialog background and WinXP themes
    • mouse scroll wheel and up/down keys increment/decrement numeric fields.
    • changed help system
      • new tooltip help displays in status bar upon mouse hover over control. (Issue-I473)
  • Remove outdated software:
    • Remove walk-about (GUI File Manager) and EDY programs.
  • Other GUI changes:
    • Add menubar on window frame.
    • Add statusbar on window frame (status messages).
    • New about box with licensing info.
    • Remove “general help” (largely outdated info on the old GUI)
    • [main] Rearrange main screen buttons, including
      • Moved double/halve functions from main screen into Modify screen.
      • Removed “End SIMION” button on main screen (redundant)
      • Removed button “Old” (redundant with “Load”)
      • Some relabeling: GUI File Manager, Test & Debug Selected PAs
      • In PA List (Main screen), changed items now have “*” appended rather than a red box.
    • [modify] the “set” button now uses a dialog box (more conventional).
    • [view] When loading IOB file, assume yes for these questions (don’t ask):
      • Restore Potentials To Values Active When .IOB Was Saved?
      • Auto-Load Matching .REC File?
      • Auto-Load Matching .ION File?
      • Auto-Load Matching .FLY File?
    • [view] Moved data recording link from ion definition screen to view screen. FIX:what about time markers?
    • [view] Combined “Resume Ion Flying after a Pause” and “Integrate Trajectory a Single Step” buttons into one “>” button. Single step trajectory integration is also not automatically turned off when ion flight starts.
    • [view] AdjV tab now can be used before ion flight to display and edit adjustable variables. Adjustable variables are now not displayed when starting the fly.
    • [view] On Contour, minor changes to GUI behavior.
    • [view] 3D Zoom behavior modified – moved functionality to View panel (and removed Z3D tab).
    • [view] Tabs rearranged some. Including - AdjV –> Variables and PAs –> PAs (Fields)
    • [settings] Removed various font settings (x/y offset and special characters). removed scan on/off. removed etched/normal text. removed mouse sensitivity. removed delays panel.
    • Disable undocumented CTRL+ALT behavior (show cross-hairs cursor)
  • Bug/defect fixes:
    • fixed: file directory limit errors (GUI File Manager was replaced)
    • fixed: integer overflow when creating a new PA and specifying certain large dimensions (e.g. 90000 x 90000 x 1) (minor)
  • Logic changes:
    • [view,adjv] Changes to the way adjustable variables are saved before/after ion flights in order to allow AdjV tab to be accessed before ion flights.
  • Other
    • Support for beta versions.
    • Updated copyright.

Developer-visible changes:

  • Incorporate the wxWidgets GUI framework (, including
    • incorporate SIMION message loop into the wxWidgets message loop (simion_main.cpp and mouse.c)
    • wxWidgets for main screen and various controls and dialog boxes
  • Improve coding:
    • replace struct with typedef struct
    • reduce usage of void *
    • cleanup of comments to be more doxygen-like (e.g. gui.h)
  • Many files converted to C++ (particularly GUI code)
  • Compile/link changes (changes made only to MSVC++6 project, simion.dsp):
    • Compile globally with 8-byte struct alignment (previously was 1-byte), while adding pshpack.h and poppack.h around structures.
    • Add Debug builds.
    • Compile against static, multithreaded C run-time library (same as wxWidgets) (previously was static, single-threaded).
    • removed timelock from build
  • Remove dahl contact info.
  • Remove scrollbars on simgui client window.


  • Issue-I115 - SIMION may crash on startup if another SIMION7 or SIMION8 running and 1000 GUI*.TMP files exist in C:\FILES.GUI.
  • Issue-I390 - Buffer overflow on certain bad GEM syntax (minor)


  • Resolved Issue-I331 - Acceleration error in overlap of electrostatic PA with magnetic PA of higher grid density. [CRITICAL]
  • Resolved Issue-I191 - Long file names (greater than 8+3=11 characters) may cause error messages.
  • Resolved Issue-I192 - Buffer corruption when saving IOB of file length slightly more than 12 chars.


  • Resolved Issue-I170 - SIMION may freeze on startup with the message “Initializing Random Number Generator”.
  • Resolved Issue-I171 - SIMION may crash when calling the “seed” function in a PRG user program.
  • Compiled with Open Watcom 1.5.



  • Fixed Issue-I168 - In SIMION data recording, electric potential (E) records magnetic potential whenever a magnetic PA of 2D planar symmetry is active.
  • Updated legal and contact info.
  • Added file version info.
  • Compiled under newer version of Watcom compiler (Open Watcom 1.3). SIMION 7.0.0 used Watcom 11.


SIMION 7.0, David Dahl, Idaho National Engineering and Environmental Lab (INEEL)

SIMION 8.0/8.1 Manual - Changes and Errata

Rev-6 (not yet printed)

  • K-9 - Remove “mass (u)” from standard_beam x,y,z,ke fields.
  • K-23 - Add missing velocity field to standard_beam reference.
  • L-21 - Flow chart update. instance_adjust segment, sim_segment_global reserved variable.
  • Index - add reserved variables to index.

Rev-5 (Nov 2011) Covering SIMION

In general, replace mention of SIMION 8.0 with 8.1.
  • 2-5 - “mV^2” should be “mv^2”
  • 2-5 - clarify “mass (in)dependent” comments as discussed in [*]
  • 2-6 - ths->the
  • 2-16 - Replace mention of the c:\Program Files\SIMION-8.0\mystuff directory (which standard users don’t have write permission to on Windows 7/Vista) with user’s personal Documents or Desktop folder.
  • 2-16 - ‘On convenient’ -> ‘One convenient’
  • 5-30 - Added (under the Copy function): “If you want to change the potential of a copied element, refer to the description of the Replace function given earlier.” [*]davido
  • 7-10 - “Important: Any potential changes via User programs are ignored!” is incorrect. They are not ignored. Details:
  • D-5 - Warn user to make a copy of entire examples folder into a personal folder user has write access to since most examples write to their own folders and Windows 8/7/Vista does not permit write access to c:\Program Files .
  • E-1 - Note added BMP/PNG/JPG support.
  • H-3 - update Refine equations for 8.1.
  • H-15 - “coefficient of variation squared” -> “coefficient of variation”. “four” -> “four+one”. “1/(accuracy level)” -> “1/quality”. “typically 1/2 or 0.5” -> “quality typically 3”. [* ]
  • I-15 - In the hyperbola equation, “(y-yx)2/ry2 - (x-xc)2/rx2=1”, superscripts should be used.
  • I-22 - In the parabola equation, the “2” in “(x-xv)2” should be superscripted.
  • M-1 - Add --num-threads option.
  • M-3 - Add gem2pa options: dx_mm, dy_mm, dz_mm, scalex, scaley, and scalez.
  • M-4 - --ny-d-> --ny=d
  • M-8 - describe INI_GUI environment variable - If this variable is set, SIMION will store its program settings and temporary files (i.e. FILES.GUI) in this directory.

SIMION Manual Rev-4 (Jan 2008)- Covering SIMION version 8.0.4

This revision updated some parts of the text for 8.0.4, fixes some typos, and improves some of the descriptions.
  • 2-13 - Note that “adjustable electrode/pole potentials must not be skipped (e.g. 1,2,4,5)” restriction was removed in 8.0.4 – Issue-I414
  • 2-13 - Note that 8.0.3 allows multiple fast scaling solutions, which are useful for ion funnels and resistor chains. See Issue-I172.
  • 2-20 - Add: “(and possibly also an exclamation ! symbol to indicate unrefined)”
  • 5-32 - Describe Crop function - Issue-I313.
  • 6-10 - Remove “Any skipped electrode values (e.g. 1,2,3,6,7,8) will abort…”
  • 6-10 - “.PA2-9 & A-U (numbers 2-30)” changed to “.PA2-.PA127 (numbers 2-127)”
  • 6-10 - As of 8.0.3, multiple sets of fast scalable electrodes can be defined: see Issue-I172.
  • 9-8 - Mention collision_sds example.
  • A - Updated for 8.0.4 system requirements – Issue-I474.
  • B-1 - Link to Linux and Mac OS X instructions: Linux: Issue-I469; Mac OS X: Issue-I463.
  • B-1 - Add comment: Allocating arrays greater than approximately 1.3 GB may require starting SIMION with the –reserved-memory program option (see Command Line Appendix and Issue-I163). One way to do so is to modify the Windows shortcut that starts SIMION (right click it and select Properties) so that the Target reads something like this: "C:\Program Files\SIMION-8.0\simion.exe" --reserved-memory 1.8G
  • C-3 - Suggest entering print(sqrt(2)) in the command bar also.
  • C-3 - Typo: Reference to Figure C.7 should be C.6.
  • C-9 - Correction: Active button -> Enable check box (old comment)
  • C-8 - Correction: Remove old “If the square on the button….compensating for it.” comment.
  • F-2 - Add: GEM files containing macros (Issue-I296) will be preprocessed and written to a .processed.gem file.
  • F-8 - Note that .PA0 extensions were made in 8.0.3 (Issue-I172).
  • H-13 - Note that a useful analysis of SIMION’s charge repulsion capabilities is in the README.html file in the SIMION “repulsion” example.
  • H-16 - Typo: Remove “USEE”.
  • I-1,I-5 - 8.0.4 added Lua macro and variable substitution support. See Issue-I296 .
  • I-10,I-11,I-12,I-15,I-22,I-24, - “zmin is 10^6” should instead read “zmin is -10^6”. (regression–was correct in 7.0 manual)
  • 3-10,6-6 - 30 fast electrodes should be 127 (noted by eloy)
  • K-12 - Describe new window attribute: Issue-I426
  • K-15 - Note that defining custom distributions is explained in Issue-I407
  • K-21 - K.9.14 line_distribution should read “Creates uniformly random points along a line segment”, remove parameter n, and remove comment ‘– or specify step = vector(1,-1,2/9) in example.
  • K-23 - Describe new window attribute: Issue-I426
  • L-16 - Typo: Remove empty “Changing Adjustable Variables While Ions are Flying”
  • L-16,L-17 - Add ion_cwf reserved variable - Issue-I452
  • L-16,L-17 - Add sim_trajectory_quality reserved variable - Issue-I370
  • L-20 - simplify flow diagram. Issue-I304.
  • L-31 - Note that simion.import differs a bit from Lua’s own built-in dofile and require functions in that the imported code is executed inside the environment of the SIMION workbench user program.
  • L-3,L-40 - Note new simion.pas interface (Issue-I422) and SIMION Libraries (Issue-I400).
  • L-33 - Add missing simion.import doc.
  • L-35 - Add new simion.VERSION variable - Issue-I398
  • L-35 - Add new simion.sleep function - Issue-I462
  • L-35 - Add new simion.status function - Issue-I406
  • L-35 - Moved simion.key, simion.run_stop, and simion.redraw_screen into section L.4.1 and remove “only legal in”
  • M-2 - Remove /3GB note
  • M-2 - Add --temp-path command line option - Issue-I458
  • M-3 - Add new gem2pa command line options - Issue-I424
  • M-4 - Add refine --skipped-point option - Issue-I424
  • N - updated for 8.0.4 changes.

SIMION Manual Rev-3 (March 2007) - Covering SIMION version 8.0.2

  • 1-3 - Note that the latest list of 8.0.x version changes is online at .
  • 2-24,8-1,8-2,8-8,8-10,H-9,H-10,H-11,H-12,K-2,K-23,L-16,L-27,L-33,L-35,L-52,L-53 - Change “amu” to “u” (standard symbol for unified atomic mass unit).
  • 6-4 - Note that further information related to the “ground can” and defining PA boundary conditions can be found in
  • 8-27 - Note that log tab is detachable in 8.0.1.
  • 9-7 - Correction: Replace message with print.
  • 9-7 - Correction: Remove “(print) legal in initialize, other_actions, and terminate segments
  • 9-7 - Formatting correction: print(string."3.142") –> print(string.format("%0.3f", 3.141592))
  • H-7 - Change “-” before “base array” and “electrode array” to “in” (so as not to confuse with subtractions).
  • J-1 - Add note: Details on SL Tools (STL CAD import) is available separately in the additional electronic documentation (Help | Browse Documentation menu in SIMION).
  • K-13 - Remove old comment: “when direct support for FLY2 files is added to [SIMION]”.
  • L - Correction: some general grammar/spelling/formatting issues.
  • L-2 - Add reference to Chapter 9 for user programming tips.
  • L-2,L-4,L-72 - Update comments on C/C++ interface: As of version 8.0.2, C/C++ code is callable via the Lua extension interface. See SIMION’s “extension” example (in the examples/extension folder). A simpler method, with more overhead, is the Lua os.execute() function. COM calling is also supported via LuaCOM–see “excel” examples. (SL Remote is neither available nor needed in Lua.)
  • L-3 - Mention the new “Beginning Lua Programming” book: More recently released was the book Beginning Lua Programming, which provides a more detailed and somewhat more novice oriented introduction to Lua.
  • L-4 - Correction: Add missing -- in code comment line: -- Here's some variable I define.
  • L-6 - Add note that print also works in bottom task bar (as of 8.0.1). For example, print(factorial(5)).
  • L-8,L-40 - Add note that SL Libraries docs can be found in the additional electronic documentation (Help|Browse Documentation menu item).
  • L-8 - Note new “extension” (C/C++) calling example and that additional examples are described in the additional electronic documentation (Help|Browse Documentation menu item).
  • L-8 - Add note: You will be automatically prompted to refine upon first loading an IOB with unrefined PAs (as of 8.0.2).
  • L-12,L-66 - Note that workbench user programs can differentiate between PA instances by testing the ion_instance variable.
  • L-16 - Clarify meaning of adj_elect00 variable: adj_elect and adj_pole are array variables with elements aliased to the adj_elect00-adj_elect127 and adj_pole00-adj_pole127–you may use whichever form is most convenient…. The adj_elect00 (or adj_pole00) reserved variable (you can think of it as electrode #0) is special and supports control of fast scaling electrodes in .PA0 fast adjust files (it refers to the voltage of maximum magnitude in the fast scalable set).
  • L-21 - Replace: “Message and R/S” with “print and run_stop”.
  • L-27 - Formatting correction: string."Ion %d neutralized at (x,y,z)=(0,0,0)" –> print(string.format("Ion %d neutralized at (x,y,z)=(%d,%d,%d)", ion_number, ion_px_mm, ion_py_mm, ion_pz_mm))
  • L-29 - Clarify that writing to reserved functions is allowed (e.g. cos = sin is allowed), though it can be undesirable.
  • L-67 - Add note: pow(x,y) can also be written as “x^y”.
  • L-70 - Formatting correction: string."0.00000" –> string.format("%0.5f", math.pi)
  • L-70 - Formatting correction: if x  = y –> if x ~= y (under X!=Y)
  • L-72 - Remove: reference to deprecated Lua mod function.
  • M-1 - Describe new --noprompt main option: Disables prompting user in batch mode (uses default choice). If specified, then --nogui must be specified as well. This option is new in version 8.0.1.
  • N-1 - Add note: Lua can also call into C/C++ or COM.
  • N-2 - Add note: 8.0.2 adds new secondary emission and C/C++ extension examples.
  • Additional notes (not documented): In 8.0.1, ion_split == -4 (ion killed) may also occur if particles start with parameters out of range.

SIMION Manual Rev-2 (December 2006) - Covering SIMION Version 8.0.0

  • Fixed paper size (A4 –> US letter) as lower margin was almost cut-off.
  • I-2 - Added missing Figure I.1.
  • I-18 - Spelling: cdnt_box3d –> cent_box3d.
  • L-72 - Spelling: SL remove –> SL remote.
  • L-73 - Removed: “?” next to nint.
  • N-1 - Changed: “FLY2 format of SIMION 7” –> “FLY format of SIMION 7”.

SIMION Manual Rev-1 (November 2006) - Covering SIMION Version 8.0.0