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

Reply via email to