First, if you are a new user, please go to step-by-step example 

If you are using a large number of segments and are not getting the accuracy you expect, read on. On the other hand, if you are starting a simulation and the rays are obviously wrong, go to notes on improving ray paths.

See also the notes on troubleshooting or on ray tracing speed.


First, in the current version 8, which allows up to 12000 segments to be used, the programs can create very large files to store the inverse matrix for space-charge iterations. These files have the ending ‘.yyy’. They must be deleted regularly.




You have seen the accuracies achieved in the test and example files, and so know that the program is capable of solving your problem.


You are using the lowest possible inaccuracies.


You are using the largest possible number of segments.




For example you might be applying a voltage V to some electrodes and you might want the potentials in some critical region to be accurate to 0.0001*V, but are not achieving this.




You have seen the short computing times achieved in the test and example files, and so know that the program should be capable of solving your problem more quickly.

If the calculations are slower than they used to be, and perhaps there are also long delays when options such as zoom are operated, then the available memory space is probably inconveniently located. This is easily solved by defragmenting the memory, using a ‘defrag’ icon. Before doing that all unnecessary files should be deleted, such as old input and output data files. The binary output files in particular can be very long -they end in .yyy.


When the number of segments, N, is high the program can take a long time to invert the main matrix (for example approximately 5hrs when N = 8000 with a 32-bit, 2.2 GHz, Vista computer). The time taken to invert a matrix of dimension N*N should go as N^3 (see Numerical Recipes, by W. H. Press et al, Cambridge University Press) but in practice in the CPO programs the exponent seems to be somewhat higher. Also, when N is higher than about 6k communication with the main screen seems to be lost sometimes.



If the 3D view opens slowly see the note on 3D display.



What to do


You are in a hurry, and you want the most accurate possible results with the minimum computing time and of course the minimum of effort!.


You are in good company! Many users of the program have found themselves in this position (even the author of the program on some occasions!). But you can escape from this difficulty, without much extra work, and can get an accurate result with a good error estimate.


The reason for the present unsatisfactory result is almost certainly that YOU ARE NOT FOLLOWING THE STRATEGY RECOMENDED IN CHAPTER 3 OF THE USER`S GUIDE.


In principle you should read chapter 3 and start again, but you have already invested a lot of time in trying to solve the problem.


Here is a strategy that will help you:


(1) Identify some critical final parameter, such as the potential at some point or an end coordinate of a ray.

(2) Make a note of the present value of this final parameter.

(3) Choose an initial input parameter that probably has a relatively small effect on the final result and that can be changed to REDUCE THE ACCURACY. Examples of input parameters that are often suitable are

(a) the number of subdivisions of a non-critical electrode,

(b) the number of subdivisions in the azimuthal direction (that is, around the axis) for a set of cylinders in a 3-dimensional system,

(c) the ray inaccuracy,

(d) the maximum step length or time, or

(e) the number of rays

(4) Run the program again for 2 or 3 values of this initial parameter, changing it in large steps while keeping all the other input parameters unchanged, and plot a graph of the final parameter versus the initial parameter. One point on this graph is of course the result that you started with. If the initial parameter is an integer N then it is usually best to plot against 1/N or (1/N) squared. If the initial parameter is the number of segments then try to change it by factors of 4, or if that is not possible, factors of 2. Extrapolate, if possible, to a perfect accuracy for this input parameter, for example to 1/N = 0. Make a note of the difference between the extrapolated value of the final parameter and the value that you started with. You might feel at this stage that the input parameter can be permanently changed to give a faster running time, without affecting the final accuracy.

(5) Repeat this procedure for other initial input parameters, including those that you think will have a relatively large effect.


Now you should be able to make a quantitative judgement of the choice of initial parameters. You might find for example that you need more segments in some critical region, and that to compensate you can reduce the number of segments elsewhere (and if you have usually used FDM or FEM programs in the past -that is, programs that are based on a 'grid' of points, such as SIMION- and if you have followed the present advice, you will almost certainly be very surprised at how few segments you need to obtain high accuracy). In the case of rays you will probably also find that the ray inaccuracy need not be so small and that the ray step lengths or times need not be so short.


Equally importantly you will probably also have

(a) an estimate of the result extrapolated to a perfect accuracy, and

(b) an estimate of the error in the extrapolated result.




But perhaps the problem is of a different nature, for example involving space-charge or cathodes. Again the relevant test and example files give reassurance that difficult problems can be solved with good accuracy, so in this case look carefully at the footnotes of those files.



Also remember that an easy way to reduce the computing time (usually by more than a factor of 2) is to minimise the graphics box on the screen during the time of tracing, or to hide it with the edit or information boxes.


See also the notes on troubleshooting or on ray tracing speed.