# RegionDifference not working with one Cuboid and large number of embedded cylinders

I am trying to create a Cuboid with embedded hollow cylindrical regions. It seems to work fine when I use a relatively small number of cylinders (about 20) but does not work when I use a large number of cylinders (typically more than 40). In my real application I need more than 100.

Any help would be greatly appreciated!

Herewith, please find the codes I used:

Clear[rcoord, matr, pts1, pts2, cyl3, regCyl3, matDiff]
(* create a list of 3 pseudorandom reals between 0 and 1 *)
rcoord := RandomReal[1., 3]
(* generates the filled RVE cuboid *)
scl2 = 0.1;
matr = BoundaryDiscretizeGraphics[
Cuboid[{0, 0, 0} + {scl2, scl2, scl2}, {1, 1, 1} - {scl2, scl2,
scl2}]];

(* generate a list of random cylinders within Cuboid *)
cylTot = 100;   (* total number of random cylinders *)
cylRem = 20;  (* number of random cylinders to remove from cuboid *)
pts1 = Table[rcoord, {cylTot}];
pts2 = Table[rcoord, {cylTot}];
cyl3 = Table[
Length[pts1]}];   (* list of all cylinders *)
regCyl3 =
Table[BoundaryDiscretizeGraphics[cyl3[[i]]], {i, 1,
Length[cyl3]}];   (* list of all cylinderical regions *)

(* generate the hollow RVE cuboid by removing random cylinders from \
Cuboid *)
(* works when I remove a small number only, typically less than \
40  cylinders *)
matDiff =
RegionDifference[matr,
regCyl3[[1]]];   (* remove first cylnderRegion from Cuboid *)
matDiff = Fold[(RegionDifference[#1, #2]) &,
matDiff,
regCyl3[[2 ;;
cylRem]]];  (* remove rest of cylnderRegions from Cuboid *)
HighlightMesh[matDiff, Style[2, Opacity[0.5]]]
RegionPlot3D[matDiff, PlotStyle -> Directive[Yellow, Opacity[0.5]],
Mesh -> None]


But I get error messages when I use a large number of Cylinders:

(* create new derived region by removing random cylinders from Cuboid \
*)
(* Does not work when I try removing a large number of cylinders, \
typically more than 40 *)
Clear[matDiffAll, cylRemAll];
cylRemAll = 60;
matDiffAll =
RegionDifference[matr,
regCyl3[[1]]];   (* remove first cylnderRegion from Cuboid *)
matDiffAll = Fold[(RegionDifference[#1, #2]) &,
matDiffAll,
regCyl3[[2 ;;
cylRemAll]]];  (* remove rest of cylnderRegions from Cuboid *)
HighlightMesh[matDiffAll, Style[2, Opacity[0.5]]]
RegionPlot3D[matDiffAll, PlotStyle -> Directive[Yellow, Opacity[0.5]],
Mesh -> None]

• I'd report that to support@wolfram.com – user21 Apr 29 at 4:58