1
$\begingroup$

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}];
rad = 0.02;
cyl3 = Table[
  Cylinder[{pts1[[i]], pts2[[i]]}, rad], {i, 
   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]
$\endgroup$
  • $\begingroup$ I'd report that to support@wolfram.com $\endgroup$ – user21 Apr 29 at 4:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.