I want to create a rectangular domain (L*B) with a large number of circles (over 6000) within it. The circles have different diameters, d, in specific ranges (i.e. d_min
One approach would be to randomly place points in the domain. At time t=0, a circle would start growing at each point. The circles initially have radii zero and have the points at their centers. The radii of the circles would continue to grow at a constant rate until two circles touch. These circles would then grow no further. The simulation would continue in this way until all of the circles had stopped growing. This model was introduced in
PATTERN-FORMATION BY GROWING DROPLETS - THE TOUCH-AND-STOP MODEL OF GROWTH
Suppose you use the method I outlined and then construct the Delaunay triangulation. If there is a bond in the triangulation that joins two circle centers, we say that they are neighbors. Not all neighboring circles will touch in the disk packing I described.
A better approach to your problem might be to simulate the pouring of hard disks into a two-dimensional container. You could then use the desired distribution of disk radii. The problem with this approach is that the packing density will be somewhat low. To address this, you can simulate shaking the container up and down. This will increase the packing density. There are hundreds of papers on this topic. To find them, search for papers on granular media and sphere packings. For a dated entree to the literature, you could have a look at my papers on packings of ellipses and ellipsoids that I've posted on RG.
From the code and picture your "circles' appear to be oriented ellipses. If you rescale so that they are actual circles then the code to pack them might become simpler. For one, determination of intersection amounts to checking whether center separation exceeds sum of radii. Moreover the problem can then be recast in terms of placing points in a region subject to the distance constraint noted above.