Hello Christophe, Saturday, May 18, 2019, 2:43:04 PM, you wrote:
>> On 17 May 2019, at 23:56, Sergej Tarasov <[email protected]> wrote: >> >> Hi, >> I need to create cubic unit cell containing many particles crossing the walls >> with periodic mesh (the geometry itself is periodic). I do it like this: >> >> SetFactory("OpenCASCADE"); >> Mesh.MinimumCurvePoints = 2; >> Box(1) = { 0, 0, 0, 1, 1, 1 }; >> Cylinder(2) = { 0.669103076524392, 0.926238630543764, 0.380445067549797, >> -0.00436647701608499, -0.00549592479612254, 0.0071224075356137, 0.25, 2*Pi }; >> Cylinder(3) = { 0.669103076524392, -0.0737613694562362, 0.380445067549797, >> -0.00436647701608499, -0.00549592479612254, 0.0071224075356137, 0.25, 2*Pi }; >> BooleanIntersection{ Volume{ 2:3 }; Delete; } { Volume{ 1 }; } >> BooleanDifference{ Volume{ 1 }; Delete; } { Volume{ 2:3 }; } >> >> Periodic Surface{ 21 } = { 16 } Translate{ 1,0,0 }; >> Periodic Surface{ 9, 19 } = { 14, 17 } Translate{ 0,1,0 }; >> Periodic Surface{ 18 } = { 20 } Translate{ 0,0,1 }; >> >> >> which works perfectly. But in case of many particles (50-100) I need >> to know the ID of each opposite surface. What is the best way to do it in >> Gmsh? >> Or there is better way to achieve this? CG> In this case I would use CG> e = 1e-6; CG> left_surface() = Surface In BoundingBox{-e,-e,-e, e,1+e,1+e}; CG> right_surface() = Surface In BoundingBox{1-e,-e,-e, 1+e,1+e,1+e}; CG> Periodic Surface{ right_surface() } = { left_surface() } Translate{ 1,0,0 }; CG> etc. CG> If there are multiple sub-surfaces, you can compare their CG> bounding boxes (b() = BoundingBox Surface{...};) to find the CG> corresponding pairs. CG> Christophe Thank you very much. The first method you suggested doesn't work with complex shapes, so I tried to compare bounding boxes, which works perfectly, but unfortunately not always. It fails in one specific situation, which occurs quite often in my case. Below is sample code that fails to generate periodic mesh. ------------------------------------------------------------------- SetFactory("OpenCASCADE"); Box(1) = { 0, 0, 0, 1, 1, 1 }; Cylinder(2) = { 0.58, 0.917, 0.689, -0.004387, 0.006, 0.00668, 0.1, 2*Pi }; Cylinder(3) = { 0.58, -0.083, 0.689, -0.004387, 0.006, 0.00668, 0.1, 2*Pi }; BooleanIntersection{ Volume{ 2:3 }; Delete; } { Volume{ 1 }; } BooleanDifference{ Volume{ 1 }; Delete; } { Volume{ 2:3 }; } Periodic Surface{ 17 } = { 15 } Translate{ 0,1,0 }; Mesh 3; ------------------------------------------------------------------- Is there any way to avoid this? Thanks! -- Best regards, Sergej Tarasov mailto:[email protected] _______________________________________________ gmsh mailing list [email protected] http://onelab.info/mailman/listinfo/gmsh
