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$
1

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.