Recent changes made in the CPO programs.


Going from version 3.1d (Dec2000) to 3.1e(Feb 2001):

Added 'View' option to electrodes.

Allowed changes to aspect ratio when printing.

Removed asterix's from ray output data, except for high printing levels, when interpolated points are outputted.

Corrected a false time reversal under some rare conditions.

Corrected test plane values of kinetic energy and potential when potentials are time dependent or when scattering option is in use (the values that are output at each step are already correct).

Added charge and mass to all output information when they are variable (in 2D as an extra line, in 3D on same line).

In the focus optimisation option the penalty applied to large distances from the centre of the focus is graded.

In the 3D option to use a user-defined grid of magnetic field components, allowed user to add a scaling factor at the end of the user-supplied file that gives the magnetic field components.

In the 2D option corrected fault that stopped re-use of previous processed data.

In the 2D option corrected an error that prevented use of automatic iteration with fixed focus.

In the 2D option corrected a rare error in evaluation of axial potentials and lens properties when the highest accuracy is used.


Going from version 3.1e (Feb 2001) to 4.1a (March 2001):

Dealt with dll's for special 'scattering' version.


Going from version 4.1a (March 2001) to 4.1b (May 2001):

In automatic focussing option, used graded penalties for focus size and for angle constraints (and used radians instead of degrees in the relevant penalty formula).

Added option (which is not yet fully included in the databuilder) to make some of the applied voltages linearly dependent on other voltages.

Added option to scale the total magnetic field.

Increased the number of in and output parameters for the user-supplied scattering routine. The input parameters for CPO3D are now:

Parameters for the beginning of the latest trajectory step:

x,y,z,vx,vy,vz,energy,potential,time,current,charge number,atomic mass number, the local charge density.

Parameters at the end of the step:


Output parameters:

x,y,z,vx,vy,vz,time,current,charge number,atomic mass number,

plus 2 logicals:



Going from version 4.1b (May 2001) to 4.1c (June 2001):

Added contour for space charge density.

Removed buttons for average space charge density around axis, but kept the option for use in edit mode.

Added user-specification of averaging radius for calculating space charge density that is sent to user-supplied routine when the 'scattering' version is in use.

Added user-defined cathodes, types 1 and 2.

Improved and changed angle constraints in automatic focusing option.

Corrected 'related voltages' option so that 'dependent voltages' are listed before 'source voltages'.

Enabled square-wave and sawtooth-wave time-dependent voltages to be easily defined.

Changed the variables that are transferred from the program to the user-defined routine for defining time-dependent voltages.


Going from version 4.1c (June 2001) to 4.1d (Oct 2001):

Added option to restrict range of active segments for hitting and for creating secondaries.

Corrected a reading fault when file of magnetic field values is read and field grid points are complete, that is, no points are omitted in input grid data file.

Added option for maxwellian energy distribution for secondary electrons.


Going from version 4.1d (Oct 2001) to 4.1e (Nov 2001):

Corrected an error in 'angle constraints' option in 'automatic focusing'.

CPO3DS only: Added option for stochastic electron-electron interactions when scattering option is used. As a consequence the dimensions of array scatter_params_in1 must be changed from 13 to 125 in all user-supplied 'scattering' routines.

CPO3D and CPO3DS only: Corrected an error that occurs very rarely in the test for a ray hitting a segment.

CPO3DS only: Improved test plane interpolation of stochastically scattered rays.

Added an ‘advanced option’ for changing the maximum step length during ray tracing.

Added an ‘advanced option’ for changing the radius of the space-charge tubes during ray tracing.

Added an option to allow the user to control the position of the ‘Ray tracing’ box.


Going from version 4.1e (Nov 2001) to 4.1f (Jan 2002):

Changed the examples of user-supplied routines for time-dependent voltages (time2d.cpp and user3d.cpp) so that they deal with 3 superimposed voltages, such as a fundamental plus two harmonics.

Corrected output 'x,y,z,vx,vy,vz,eV,I' to 'x,y,z,vx,vy,vz,eV,initial time' when voltages are time dependent, and made other related corrections.

The number of digits that can be entered in the databuilder boxes has been increased.


Going from version 4.1f (Jan 2002) to 4.1g (March 2002):

Corrected Lambert cosine angular distribution in secondaries option, CPO3D only.

Added a stochastic option to CPO2DS (a more primitive option than in CPO3DS).

Added option for Ura energy distribution for secondary electrons.

Made a minor correction to the code for simulating the behaviour of thin lenses in the example files sct2lens.cpp and sct3lens.cpp that can be used with the special ‘scattering’ versions of CPO.

User’s print limits retained for first picture after ray tracing.

Allowed magnetic fields that are specified by a grid of points to be scaled in the databuilder.

Increased number of digits for ray outputs.

The maximum number of trajectory steps that are displayed at the interactive stage increased from maxseg*3 to maxseg*10.

Increased numbers of digits for coordinates etc in bottom bar.

2D only: Trapped a rare singularity for potential and field evaluations at a near-axis point near a segment that touches the axis.

New Salford compiler used.


Going from version 4.1g (March 2002) to 4.1h (April 2002):

Revert to old compiler, because of faults in new one.

In CPO3D allow grid spacings to be different in different directions in the 'potentials or fields in a grid' option.

Added a subroutine to the user-supplied routine, user3d.cpp, to define the near-axis electric field, and added a button for it in the databuilder (under 'segments').

Corrected enable/disable button for ‘zero total charge’ option.

In most user-supplied routines changed the settings of the 'fail' flag –please read the new routines.


Going from version 4.1h (April 2002) to 4.1i (May 2002):

Trap a crash in CPO2D that occurs when a 'potentials and fields along a grid or line' option is added when none already exists.


Going from version 4.1i (May 2002) to 4.1j (July 2002):

Return to the new compiler, giving smaller exe files.

Changed angle penalty in automatic focusing option, so that now only the excess angle is penalised, by multiplying it by the 'conversion factor' (mm/rad) and adding this distance to the physical distances. The previous 'penalty factor' is now redundant and so has been removed. To convert previous data files, multiply the previous 'conversion factor' by the previous 'penalty factor'.

In the option for improving 3D near-axis fields, the names of the 2 data files that hold the user-supplied control data are now entered in the databuilder. Stopped charges being recalculated when this option is activated.

Stopped charges being recalculated unnecessarily, which happens on some new Windows systems.

Corrected an error in the CPO3DS routine for calculating the space-charge density inside a beam when the 'tube' option is used.

Added option to save the first image in a user-named bitmap file (which is useful for batch-mode running).


Going from version 4.1j (July 2002) to 4.2 (July 2002):

In calculations of space charge density, reverted to averaging over a sphere, instead of averaging over a cylinder in the z direction, which applies only to beams that are substantially in the z direction.

Changed sct3coul.cpp so that it returns the change in the velocity, instead of the final velocity itself.


Going from version 4.2 (July 2002) to 4.3 (Nov 2002):

Changed sct3coul.cpp so that more than one scattering event can occur in each trajectory step.

Preliminary update of test and example files.

Opening of ‘about box’ etc postponed until after opening of main window, to correct the fault of information box sometimes being empty in Windows XP.

Improved 2 sets of code used in connection with the 3D 'improve near-axis field' option. One set of code is in user3d.cpp and the other is in the subsidiary program given at the end of user3d.cpp. Updated the relevant example file xmpl3d62.dat.

Stopped ray output file being overwritten when grid contour options are used.

Improved segment subdivision of spheres, to remove all gaps.

Corrected way that number of segments is increased for a rectangle when the increase is a power of 2


Going from version 4.3 (Nov 2002) to 4.4 (Jan 2003):

In ray tracing users now choose two inaccuracies instead of the previous single inaccuracy (although the two inaccuracies should usually still be given the same value). The first inaccuracy determines the number of evaluation points used in the ray tracing routine. The second concerns the accuracy of the potentials and fields required by the ray tracing routine.

Re-set surface charges at the beginning of each trajectory when voltages are time-dependent.

Allow the maximum step length for ray tracing to represent step durations instead of step lengths.

Corrected a routine used in ray tracing so that fields are re-calculated for the first step of a ray if time dependent fields are in use.

Added an option for outputting minimum and maximum coordinates of traced rays.

Added an option to increase the number of segments in a 'regular' way when iterative subdivision (adaptive segmentation)  is used.

Added a warning for incorrect position of the test plane in automatic focussing.

Re-set the inaccuracy for evaluating potentials and fields during ray tracing, to prevent it being set to the wrong value when calling the option for potentials or fields along a line or grid.

Relevant to user-supplied cathode option:

Increased size of array user_cathode_out in cathode2.cpp from 2 to 4, in cathode3.cpp from 2 to 5 so that these routine can return velocity components to the main program, if desired (but if not desired the routines should return zero values).


Going from version 4.4 (Jan 2003) to 4.5 (Feb 2003):

CPO2D only: Added option to transform electrodes -that is, scale and shift (CPO3D already has a comprehensive transform option).

Binary numbers in the binary data files doubled in length, for greater accuracy.


Series 5

Going from version 4.5 (Feb 2003) to 5.1 (March 2003):

Improved graphics for 3D display (CPO3D only).

Allowed cathodes to be defined by the first N electrodes or segments.

Added option for automatic adjustment of subdivision numbers when small segments are too near much larger segments.

Added an option for not compounding the ray reflection symmetries in a magnetic field.

In 3D rotations of an object on the screen, the axis of the first rotation becomes the 'inner axis'.

New program available for converting a 2D data file to a 3D file.

New program for reading a dxf file to convert it to a 2D data file.

New dongle system that uses USB dongles (DESkeys).*******************************


Going from version 5.1 (July 2003) to 5.2 (Nov 2003):

Allowed uneven distribution for a pointed cone (CPO3D).

Removed incorrect greying-out of ‘views’ in some conditions (CPO3D).

Corrected occasional failures in 3D graphics when the test plane is removed (CPO3D).

Added option for the combination of a non-random source with a random pupil for cylindrical and rectangular beams (CPO3D).

Prevented large memory allocation when Quicksave is called.

Corrected occasional greying-out of 'views'.

Allowed 3 different ray mesh spacings for x,y and z directions.************************

Allowed mesh method of ray tracing to be used with time⌀dependent voltage options.

Added higher printing level for ray outputs, to give fields at ray steps.


Going from version 5.2 (Nov 2003) to 5.3 (Jan 2004):

Added 'line-section' or 'piece-wise' option for oscillating voltage wave-form, to give saw⌀tooth, rectangular etc wave⌀forms.

Added option for forcing exact 6-fold (hexapole, sextupole) symmetry of fields and potentials.

Added check-boxes to remove messages at end of ray tracing or quickview.

Added more 'other colours' to palette sheet.


Going from version 5.3 (Jan 2004) to 5.4 (Feb 2004):

Removed item 'Open for manual editing' completely unless the user follows the given procedure.

Allow the user to limit field of view of the contours.

In CPO3D(S), corrected reproduction of colours in 'print' call.

Allow user to limit field of view of the contours.

In CPO3D(S) Correction to give correct trajectory colours:

Corrected an error in reading data for time-dependent voltages.

Improved corrections for curvature of cathodes.

In CPO3D(S) changed reading and writing of the line that contains the charge inaccuracy and the letters for activating the ‘zero total charge’ option and the ‘improve inverse matrix’ option, so that these letters are read correctly (this might have been a long⌀standing error).


Going from version 5.4 (March 2004) to 5.5 (March 2004):

In CPO3D(S) allowed test of side-to-length ratio of segments to be disabled, by entering a negative value.

In CPO3D(S) improved damping technique for thermal cathodes.

Improved the damping technique in cathode and space-charge iterations.

Allowed name of control data file for user-defined time dependent voltages to be entered in databuilder.

In CPO2D(S) corrected the way that the overlapping test deals with lines that are parallel or nearly parallel.


Going from version 5.5 (March 2004) to 5.6 (May 2004):

In the option to output potential and field data on a grid of points before ray tracing, in CPO3D(S), output coordinates as well as.

In the option to output potential and field data before ray tracing, allow input of time when the voltages are time-dependent.

Added option in databuilder to add a copy of the present electrode to the end of the list of electrodes.

In CPO3D(S) added reflection option to the set of electrode transformations.

Added option to separate output data by commas, to allow easier data processing with external programs.

Increased number of regions in which dlmax can be changed, from 2 to 9 (and similarly for space-charge tube radius and averaging range for space-charge density).

Added a 'special' stochastic scattering option, in which this scattering is switched on in the last cathode iteration. Also the space charges are not recalculated for the last iteration. So the only difference between the last two iterations is the presence of stochastic scattering in the last one.


Going from version 5.6 (May 2004) to 5.7 (May 2004):

Created program (prog24) to generate the segments of a spherical cap that has a rectangular hole, for insertion into a data file for CPO3D.

Corrected an occasional error in spectrometer coefficients.

Added particle mass and charge to beam options.


Going from version 5.7 (May 2004) to 5.8 (July 2004):

New Salford compiler, which allows 3D pictures to be printed and to be saved to clipboard.

Changed 'lens coefficients' option to evaluation of specific coefficients, one at a time.

Added a ‘full stochastic’ scattering option in which the global effects of stochastic scattering are included.

In automatic focussing, added option for the scale factor of the magnetic field to be one of the variables.

Corrected option to change the maximum step length used in ray tracing.

Corrected repeated warning message in CPO2D(S).


Going from version 5.8 (July 2004) to 5.9 (Oct 2004):

Added ‘other types of 3D electrodes’ at end of list of types of electrodes, giving links to further information.

Corrected and improved subdividing of 'end conical triangle' segments.

Created program (prog25) to generate the segments of a cylinder that has an end cut at an angle, for insertion into a data file for CPO3D.


Going from version 5.9 (Oct 2004) to 5.10 (Jan 2004):

Modified 'single ray' option of repeat space-charge options so that it can be used for any set of individual rays.

Modified round_beam() and rectangular_beam() options of repeat space-charge option so that they become volume-distributed sources.

Corrected deletion of space-charge repeat items.

Allowed cathode option to be followed by a list of space-charge repeat options. Also allowed variable mass to be used in these circumstances.


Going from version 5.10 (Jan 2005) to 5.11 (March 2005):

When using sets of rays, allowed initial velocity components to be entered in the polar form q,theta,phi, where q (the polar axis) = x or y or z and where phi is the azimuthal angle, instead of the more usual cartesian form vx,vy,vz.

Allowed 4 components (quarters) of the magnetic field elements to be separately scaled and to be separately varied in the automatic focusing


Going from version 5.11 (March 2005) to 5.12 (May 2005):

Added option for solid 3D spheres, cylinders and cones, with zero internal fields and improved near-segment potential calculations.


Going from version 5.12 (May 2005) to 5.13 (July 2005):

Preserved original subdivision numbers for rotated (transformed) rectangles.

Changed and improved criteria for testing overlap of segments.

Improved subdivision of disc without a central hole.


Going from version 5.13 (July 2005) to 5.14 (July 2005):

Corrected an error in plotting reflected trajectories, which was introduced in May 2005.

Improved COPY/PASTE facility for information window.

Corrections made for subdivision of a cone when the final number of segments is greater than the initial number.

Added option to allow mass and/or charge of secondaries to be different from those of the primary.

Allowed any number of focus iterations.



Going from version 5.14 (July 2005) to 5.15 (Aug 2005):

Added zoom magnification of ×2 with RH mouse button.

Added *** before all electrode comments.

If test planes are not crossed then used hitting points.

Replaced small coordinates by zeros.


Going from version 5.15 (Aug 2005) to 5.16 (Aug 2005):

In messages that say there are too many segments, add present number.


Going from version 5.16 (Aug 2005) to 5.17 (Sept 2005):

Corrected subdivision of rectangles -when total number is asked for the program was making segments as square as possible, but this has now been changed to make them long and thin if necessary, but not to exceed the maximum side to length ratio.


Going from version 5.17 (Sept 2005) to 5.18 (Nov 2005):

Added extra print option for rays -nearly-zero plus ray and test-plane numbers.


Going from version 5.18 (Nov 2005) to 5.19 (Dec 2005):

Corrected one of the changes made in 21/10/05 to check for planarity and shape of rectangles.

Flush (this is, close) the ray output file after runs so that it is accessible while CPO is still open.


Going from version 5.19 (Dec 2005) to 5.20 (May 2006):

Added colour scale to colour contour plots.

Added buttons etc for magnetic vector potential and access to magnetic vector potential.

Added option for user-supplied coordinates in an external file to be used in the 'potentials and fields along a line' option.

Corrected an occasional error in registering ray printing level, introduced 24/11/05.

Filled in colours at edges of colour contours.

Added Poisson distribution for secondary electron multiplication factor.

Corrected prog26.


Going from version 5.20 (May 2006) to 5.21 (June 2006):

Added an improved method for subdividing triangles when they are thin -they are now subdivided successively into 4 parts.

Corrected crash when 3D 'axes' option is called, and coloured x,y,z axes red,green,blue (colours 1,2,3).


Going from version 5.21 (June 2006) to 5.22 (Sept 2006):

In space-charge iterations using CPO3DS the time to recalculate the surface charges is reduced considerably, by using the ‘lower-upper’ form of the main matrix A instead of the full inverse (as is already the case in CPO2DS).

Always check that no segments coincide, perhaps because of reflections.

Added extra output information for capacitance calculations.

Improved conv2to3.exe, for converting from a 2D to a 3D data file.

Corrected a fault when a cathode or space-charge iteration is inside a focus iteration.

For simulation of stochastic particle-particle interactions, used more accurate calculation of the velocity of nearest ray.

Improved sct3coul.cpp, so that it is suitable for the simulation of stochastic particle-particle interactions in field-emission sources.


Going from version 5.22 (Sept 2006) to 5.23 (Sept 2006):

Corrected error in compound reflection of rays in a magnetic field.

At ends of output files, printed names of files that have been re-used or created, with their sizes.

Added option to change triple start symbol for electrode comments.


Going from version 5.23 (Sept 2006) to 5.24 (Nov 2006):

Added complete control of electrode colours (3D only).

Improved option to re-use previously calculated rays

After palette has been accessed, redraw only those parts that have had their colours changed.

Improved calculation of near-segment fields, mostly by bypassing the near-surface approximation and using numerical approximation instead.


Going from version 5.24 (Nov 2006) to 6.1 (Dec 2006):

Added dielectric option.

Option to force exact hexagonal, 6-fold, anti-symmetric, +-+-+-, extended to symmetric, ++++++.

Added option to import electrostatic potentials and fields.


Going from version 6.1 (Dec 2006) to 6.2 (Dec 2006):

Added option for weighting iterative subdivision (adaptive segmentation)  by aspect ratios.

Corrected an error in setting trajectory coordinates at the boundary between the cathode 'outer' region and 'mesh' region (3D only).

Corrected writing of matrix into binary file for later use in space-charge iterations (3D only).



Going from version 6.2 (Dec 2006) to 6.3 (Jan 2007):

Added Neumann option.

Corrected occasional incorrect colours of segments.

Give warning message when ray output file becomes very large.

Initialised ray colours correctly, using data in colour3d.def.

Corrected clipping in present of reflection symmetries.

Corrected error in saving parameters when 'cancel' used on secondary ray parameters.


Going from version 6.3 (Jan 2007) to 6.4 (April 2007):

Corrected calculation of Lambert angular distributions for cathode rays and secondaries.

In the (artificial) option to start field emission at a constant (user-supplied) energy, made transverse velocity components zero.

Improved the advanced option for changing trajectory step lengths according to the coordinate z, to allow the changes according to the time or energy.


Going from version 6.4 (April 2007) to 6.5 (May 2007):

Corrected seeding of random number generator.

Allowed dielectric and neumann electrodes to be transformed.

Prevented 3D transformations (of any types of electrode) that violate reflection symmetries, with warning messages.

Corrected inability to access manual editing.

Corrected size of light source.


Going from version 6.5 (May 2007) to 6.6 (May 2007):

Added option for importing charges on selected segments.

Added option for calculating net electrostatic force on selected segments.

Added test of symmetries of simple triangles and rectangles.

Corrected seeding of random numbers in secondaries option (3D).

Improved option to change maximum step length, giving a more controlled change.

Corrected fault in cancelling parameters for changing step lengths.


Going from version 6.6 (May 2007) to 6.7 (June 2007):

Alleviated memory problems with 6k versions by removing unnecessary dimensioning of some arrays and making others allocatable.

Added option for poisson distribution for all available types of secondary electron production.

Updated all the prog* exe files that give lines for data files, to give colour lines.

Added option to include mirror image force in ray tracing.

Allowed dielectric and importing charges options to be used together.


Going from version 6.7 (June 2007) to 6.8 (July 2007):

Removed user-choice of 'initial step length' (to simplify user choice).

Generalised option for mirror image force in ray tracing to include particles near dielectric media.

Segments are clipped (removed) if any corner is outside clipping plane (previously middle of segment was used).


Going from version 6.8 (July 2007) to 6.9 (Aug 2007):

Increased speeds for redrawing rays after main calculation.

Corrected automatic changing of subdivision numbers if segments are too close.

Added 'hybrid' option for secondaries' poisson distribution.

Added option to disable the recalculation of surface charges due to space-charges.

Improved calculation of random numbers for the poisson distribution.

Pulsed beam option added.

Added check that all the trajectories of a set lie in the minimum sector when there is space-charge.

Changed ray ouput at high print levels to put current after energy, to make suitable for re-use as input data.

Improved option for using previously calculated rays, by adding re-use of test plane and space-charges (where these exist)

Corrected an error in spch_e, when mesh method is used, added Aug 2007.

The saved image is now the last image.

Allowed mixed sinusoidal and line-section time forms for voltages when method is direct.

Corrected sextupole approximation for field -important for calculating fields for small dimensions (eg nanotubes) in presence of space-charge.

Corrected 3D round_beam, to keep user's pupil radius when both window and pupil are random (before correction it was made zero).


Going from version 6.9 (Dec 2007) to 6.10 (Feb 2008):

Corrected export and import of currents to scatter3.dll.

Corrected transfer of multiplied currents to scatter3.dll.

For dielectric calculations, prevented dielectric and conducting segments from being too close.

Corrected some very occasional errors in evaluation potentials very near to a segment.

Corrected angle-dependence of empirical secondary emission factor.

Corrected error in inscribing correction for spheres that have closed ends, introduced Dec 2007.

Increased size of scatter_params_in1 to 150 (3D only).

Added options to limit numbers of lines in information window and ray output file.

Added options to limit numbers of lines in information window and ray output file.

Increased number of allowed secondary productions per ray, to maxseg/60.

Forced non-zero total charge option when there is voltage antisymmetry, to avoid an error.

Made randomisation of beam and secondaries independent of each other.


Going from version 6.10 (Feb 2008) to 6.11 (May 2008):

Corrected option (Feb 2008) to limit numbers of lines in information window and ray output file.

Corrected reading of comments on applied voltage lines.

Simplified and improved databuilder menu and associated routines.

Improved sheet for editing cathode parameters.

Improved bottom bar, 3D.

Clear screen when data builder is closed.

Enabled window for calculation of surface charges to be closed and so calculation to be stopped.

Corrected a rare fault in evaluation of potential of a conical space-charge in CPO2DS.

Corrected saving of edited changes to user-supplied magnetic grid data.


Going from version 6.10 (May 2008) to 7.1 (June 2009):

New series, Vista compatible.

Corrected keystroke operation (error introduced March 2008)

Corrected an error in contour option in CPO3D, introduced April 2008.

Corrected the correction made in Jan 2008 in potential evaluations, when a point is very near to a segment.

Prevented incorrect subdivision of a sphere that has a closed end, after it has been rotated, giving explanation in a pause message (error introduced in Dec 2007).

Corrected a fault in evaluation of near-electrode potentials evaluations (error introduced circa Jan 2008).


Going from version 7.1 (June 2009) to 7.2 (June 2009):

Moved footnotes back to end of databuilder list.

Removed a rare appearance (in Vista only) of a warning message when cursor is moved in or out of information box.


Going from version 7.2 (June 2009) to 7.3 (Nov 2009):

Corrected an error in space-charge density plots and gave warnings that the space-charges in a cathode region are not included.

Added option for current density contours.

In output data, added total current that hits a test plane.

Put stop on demo version when mirage time limit reached.

Stopped secondary particles if they have zero current, under all conditions.

Corrected an error in outputting currents.

Corrected number of subdivisions for a spherical cap.

Allowed averaging radius for space-charge contours to be as small as smallest tube radius, when there is more than one.

Prevented crash after space-charge-density contours.

Corrected error in contour colours that occurs when number of contours is greater than 19.

Corrected crashing in iterative subdivision (adaptive segmentation)  in CPO3D, introduced with dielectric option.

Corrected stretching of spheres in CPO3D.

Clean stop when program calls a file that does not exist or is in use by another program.

Improved messages when attemps are made to exit a read-only file that has been changed.


Going from version 7.3 (Nov 2009) to 7.4 (Dec 2009):

Improved cathode organisation in Help.

Prevent use of imported fields or charges for demo and evaluation versions.

Improved clipping of capped spheres, by using an older method of subdivision when clipping (instead f the new method of subdivision introduced in Dec 2007).

When a magnetic field is present, stopped using an advanced technique for ray tracing when a particle approaches an electrostatic mirror because then the velocity might not be nearly perpendicular to the mirror.


Going from version 7.4 (Dec 2009) to 7.5 (Jan 2010):

Corrected a fault with colours used in contour colour plots (introduced in Sept 2009) and a fault in contour and segment colours when number of contours is > 19.

Subdivision of spherical caps corrected for centres that are not on relevant planes of reflection symmetry.

Allowed the colours of dielectric electrodes to be controlled by 'colour by voltage', using total number of voltages + 1.

Allowed dielectrics to be used with CPO3DS.


Going from version 7.5 (Jan 2010) to 7.6 (Jan 2010):

Added the 'nearly helical' option for motion in a uniform magnetic field in regions where the electric force is sufficiently weaker than the magnetic force.

Added option to force a constant step length or duration.

Added new shape, off-centred sphere.

In cpo2d, corrected and improved routine that creates a beam.

Corrected automatic adjustments to subdivision numbers made when closeness test message appears.

Corrected fields when there is antisymmetry in x=y plane.

Corrected near-segment field for segments that have very large aspect ratios.


Going from version 7.6 (Jan 2010) to 7.7 (May 2010):

Added option to stop rays at a selected test plane.

Corrected reading of non-time-varying voltages when comment space starts with numbers, as with dependent voltages.


Going from version 7.7 (May 2010) to 7.8 (Aug 2010):

Added 'hollow' option (3D only), to supplement the 'solid' option.

Allowed particles to start with zero kinetic energy.

Increased scope of pulsed beam option to all types of beam.

Corrected a problem in cpo3d with quick view when voltages are time-dependent.

Added choice of direction for applying a linear voltage gradient.

Allowed coordinates of points of 2 different voltages to lie outside an electrode.



Going from version 7.8 (Aug 2010) to 8.1 (Nov 2010):

Compiled for 8k segments, Windows 7 compatible.

Corrected 'cancel' function on electrode edit pages.

Allowed space-charge densities to be averaged over any range, with warning message on errors for small ranges.

Added magnetic field of a 'coiled solenoid'.

Saved trajectories for plotting when a run is stopped prematurely.

Corrected a fault in iterative subdivision (adaptive segmentation) , probably introduced Dec 2009.

Corrected a fault in testing bounding circles of spheres.

Added electric displacement to contours.

Improved and corrected some details of the ‘improve boundary points’ option for potentials.


Going from version 8.1 (Nov 2010) to 8.2 (Feb 2011):

Set up linear variations of the charge densities of segments, using the charge densities on neighbouring segments, and then use the linear variations in the calculations of potentials and fields near to segments, when the requested inaccuracy is sufficiently small.

Replaced all 'fractional inaccuracy' with 'percent' in databuilder.

Improved control of active segments at which secondaries are produced, stopping trajectories if they hit inactive segments.



Going from version 8.2 (March 2011) to 8.3 (Oct 2011):

In CPO2D only. When the lambert angular distribution is called for secondaries, the program changes to the non-meridional mode.

In CPO2D only. Added 'shift in r' to transform functions of electrodes.

If a run is aborted, inform user that the space-charges have not been reset.

Added option for outputting beam radius.

Added option for making diameter of space-charge tubes a constant fraction of the beam diameter at that position.

In 3D view, changed radius of spheres at intersection points of rays with test planes -made them proportional to side of square that surrounds the points.


Going from version 8.3 (Oct 2011) to 8.4 (April 2012):

In CPO3D, restored batch mode (which had been unobtainable for some time).

In CPO2D lens parameter option, added option to output Q, M, Cs, Cc for a specified P.

In CPO2D added option to concentrate segments at both ends of a straight electrode.

In advice_box, added warning about not including spaces in file names.

Added option for adding information (file names, numbers) at end of a command line, to allow the cpo program to be called by a dll, so that it runs without graphics and puts data in a specified file.

Take advantage of 64 bit accuracy to improve calculation of fields near to segments (when numerical differentiation of potentials is used).

Corrected an error that caused 3D iterative subdivision (adaptive segmentation)  to fail, probably introduced in 11/10/10.



Going from version 8.4 (April 2012) to 8.5 (Oct 2012):

Added extra option in 'potentials' to output coordinates and potentials of the segments.

Added option to output calculated values at points specified by user in file coords.dat. The values are all those available in 'contours. The option is accessed in the 'grid' drop-down.

Reset button on 3D view screen repaired.

Test added to warn user if trajectories start from near-surface field at centre of a disc or from near any corner of any segment.

2D only: Allowed combination of space-charge and non-meridional rays. Also added option for plotting r and z of non-meridional rays, instead of the usual r*cos(phi) and z -needed when space-charge is used together with non-meridional option.

3D only: Added option for 2D and 3D 'complete' types of magnetic field grid to be used at points that are out of range, in which case field is set to zero.

Added option to output potentials and fields after space-charge ray tracing.

Added option to limit the number of secondary productions.

2D: When lambert angles are used for secondaries, give choice of plotting r*cos(phi) instead of r (but not recomended).

Corrected an error in calculating directions of secondary particles for non-meridional and lambert.

Corrected treatment of electrode 'comments'.

Allowed charge of particles to be zero.

Reduced heights of some screens, to fit size of a netbook screen.



Going from version 8.5 (Oct 2012) to 9.1 (Oct 2013):

Added option for electrode shapes to be defined by users equations.

Put up pause messages when overlapping or nearness tests are disabled, at appropriate print levels.

2D only, corrected error in setting percentage inaccuracy of potentials and fields along a line or grid.

2D only, noticed that there is a SECOND relativistic correction to off_merid_y(2), in trajint(), so removed it.  This error would have affected only non-meridional motion.

2D only, added option for axially symmetric magnetic fields.

Corrected option for repeat of contour data after a space-charge run, when in batch mode or in 'open for running' mode.

2D only, added non-meridional beam option.

2D only, added non-zero thermal energies for cathodes.

Removed 'topmost' attribute from 'Ray tracing' box

Added pulsed beam option to CPO2D and improved it for CPO3D.

Added 2 more choices of quantity to be optimised in 'automatic focusing' option: (1) use currents as weighting factors, and (2) maximise current that lies within a given circle.

Improved messages about cathode and focus iterations.

Improved headings for cathode and focus iterations.

Removed all processing windows when in batch mode.

Corrected user-supplied 2D and 3D magnetic grids.

Apply lesser damping, after first 3 iterations.

Added option to specify rays in a user-supplied file (useful for large sets of rays or for batch running.

2D only, added magnetic scale factors to automatic focusing.

Going from version 9.1 (Oct 2013) to version 9.2 (Nov 2013):

Removed need to compile CPO3D.  Space-charge and non-space-charge data files can now both be run on CPO3DS.

CPO2D only: Added option to output xyz data when non-meridional, with some restrictions.

CPO2D only: Corrected option in dealing with constant mass option.

Going from version 9.2 (Nov 2013) to version 9.3 (Sept 2016):

Simplified user’s initial choice of file, by removing 'open for running and editing voltages' and all other irrelevant choices unless user has previously chosen to be in manual mode (which is achieved by editing manual.dat).

Call check_mirrored_segs only if there is at least 1 symmetry plane.

Going from version 9.3 (Sept 2016) to version 10.1 (Oct 2016):

New Help system, greatly improved, updated to .chm format.

Increased maximum number of segments from  8000 to at least 10000 (only 10000 tested yet).