xmpl3d04, 4th 'example' data file for CPO3D

A demonstration of iterative subdivision (that is, adaptive segmentation).


The geometry is same as that of the 3rd benchmark test (see file test3d03.dat), but the segments are progressively subdivided in 4 stages with a 'weight charge' factor of 1.0, to give iterative subdivision aimed at making all the segments carry approximately the same charge.

The following data were obtained when the memory and speed of PC's was much more limited than at present, so the available number of segments was small and the requested inaccuracies were fairly high to give a quick demonstration.


The geometry is same as that of the 3rd benchmark test -see file test3d03.dat.

A cube has voltages 1 and -1 on opposite faces, and a linearly varying voltage on the connecting faces.


The differences between this file and test3d03.dat are:

(1) The z=0 plane is not a plane of voltage antisymmetry (this change is necessary because segments cannot be subdivided a second time if they touch a plane of antisymmetry.

(2) The electrodes are changed to allow for fact that the z=0 plane is no longer a plane of voltage antisymmetry

(3) The initial number of segments is small.

(4) The 'iterative subdivision' option is used. 4 stages are called for and the 'weight' factor is specified as 1.0.

(5) The weight factor is entered as negative in the above data lines, which triggers the 'concentrate segments' option. The first 2 initial segments (that is, the rectangle in the x=1 plane) are specified as the ones to be 'concentrated' and the concentration factor is 3.0. These segments are therefore treated as being 3 times more important than the others when the program is making decisions about subdividing.

(6) The potentials and fields are displayed along a diagonal line from the centre to a corner of the cube.


When subdividing segments from one stage to the next triangles are subdivided by bisecting their longest sides and then if necessary repeating this procedure for the sub-triangles until the required total number of subdivisions of that triangle is reached, so giving a total number that is 2, 4, 8, 16 etc. When subdividing rectangles the longer sides are divided more than the shorter, to give sub-rectangles that are as square as possible. In going from one stage to the next the segments are all subdivided by up to the factor Nnew/Nold -for example 68/25 = 2.72 for the first stage above- but the actual number of subdivisions for each individual segment must be an integer and so usually the required number Nnew is not attained. The program therefore starts again at the beginning of the list of segments, dividing each one further until the total number Nnew is reached, or nearly reached. In the present example this process leads to a somewhat uneven arrangement of segments.


The first information that appears on the screen consists of potentials and fields along a line perpendicular to the z=1 face. The potentials and fields are correct to within typically 0.1 to 0.2%, except for the field at the face itself, which is indefinite. This is followed by the potentials and fields along a diagonal line from the centre to a corner of the cube. The field at the corner itself is indefinite, and the potential here is in error by 17% To improve the potential at this point it would be necessary to 'anchor' it (see notes on potentials, fields and contours near to boundaries) by adding one or more further small electrodes in this region.

When the segments are displayed on the screen, note that the smallest ones lie near the corners of the cube, where the charge density is highest.

As in the third benchmark test, test3d03.dat, z should maximise at 0.5 at the test plane x=0.5, and z should be 0.375 at the point of collision with the boundary. In fact the calculated maximum z (see the end of the output file temp4a.dat) is 0.500039 and the value at the boundary is 0.37543.