[Gmsh] Swiss cheese with filled cavities
Nico Schlömer
nico.schloemer at gmail.com
Fri Mar 31 10:38:58 CEST 2017
Incidentally, swiss cheese is one of the examples for pygmsh [1]. It
produces the geo-file, too.
Cheers,
Nico
[1]
https://github.com/nschloe/pygmsh/blob/master/test/examples/swiss_cheese.py
On Fri, Mar 31, 2017 at 12:54 AM Achille Pluplu <mail.plutus at gmail.com>
wrote:
> Dear all,
>
> I'm quite new to GMSH so, please, be patient.
> I need to create a 3D mesh of a cube that include some inclusions
> (spheres) of a different material.
>
> I could find the following script that generates a cube with 5
> cavities, but how can I mesh also the inclusions? In particular I need
> two well separated meshes, one for the "cheese" the other for the
> inclusions
>
> Thanks a lot for helping!
>
> Function CheeseHole
>
> // In the following commands we use the reserved variable name
> // `newp', which automatically selects a new point number. This
> // number is chosen as the highest current point number, plus
> // one. (Note that, analogously to `newp', the variables `newc',
> // `news', `newv' and `newreg' select the highest number amongst
> // currently defined curves, surfaces, volumes and `any entities
> // other than points', respectively.)
>
> p1 = newp; Point(p1) = {x, y, z, lcar3} ;
> p2 = newp; Point(p2) = {x+r,y, z, lcar3} ;
> p3 = newp; Point(p3) = {x, y+r,z, lcar3} ;
> p4 = newp; Point(p4) = {x, y, z+r,lcar3} ;
> p5 = newp; Point(p5) = {x-r,y, z, lcar3} ;
> p6 = newp; Point(p6) = {x, y-r,z, lcar3} ;
> p7 = newp; Point(p7) = {x, y, z-r,lcar3} ;
>
> c1 = newreg; Circle(c1) = {p2,p1,p7};
> c2 = newreg; Circle(c2) = {p7,p1,p5};
> c3 = newreg; Circle(c3) = {p5,p1,p4};
> c4 = newreg; Circle(c4) = {p4,p1,p2};
> c5 = newreg; Circle(c5) = {p2,p1,p3};
> c6 = newreg; Circle(c6) = {p3,p1,p5};
> c7 = newreg; Circle(c7) = {p5,p1,p6};
> c8 = newreg; Circle(c8) = {p6,p1,p2};
> c9 = newreg; Circle(c9) = {p7,p1,p3};
> c10 = newreg; Circle(c10) = {p3,p1,p4};
> c11 = newreg; Circle(c11) = {p4,p1,p6};
> c12 = newreg; Circle(c12) = {p6,p1,p7};
>
> // We need non-plane surfaces to define the spherical holes. Here we
> // use ruled surfaces, which can have 3 or 4 sides:
>
> l1 = newreg; Line Loop(l1) = {c5,c10,c4}; Ruled Surface(newreg) =
> {l1};
> l2 = newreg; Line Loop(l2) = {c9,-c5,c1}; Ruled Surface(newreg) =
> {l2};
> l3 = newreg; Line Loop(l3) = {c12,-c8,-c1}; Ruled Surface(newreg) =
> {l3};
> l4 = newreg; Line Loop(l4) = {c8,-c4,c11}; Ruled Surface(newreg) =
> {l4};
> l5 = newreg; Line Loop(l5) = {-c10,c6,c3}; Ruled Surface(newreg) =
> {l5};
> l6 = newreg; Line Loop(l6) = {-c11,-c3,c7}; Ruled Surface(newreg) =
> {l6};
> l7 = newreg; Line Loop(l7) = {-c2,-c7,-c12};Ruled Surface(newreg) =
> {l7};
> l8 = newreg; Line Loop(l8) = {-c6,-c9,c2}; Ruled Surface(newreg) =
> {l8};
>
> // We then store the surface loops identification numbers in a list
> // for later reference (we will need these to define the final
> // volume):
>
> theloops[t] = newreg ;
>
> Surface Loop(theloops[t]) = {l8+1,l5+1,l1+1,l2+1,l3+1,l7+1,l6+1,l4+1};
>
> thehole = newreg ;
> Volume(thehole) = theloops[t] ;
>
> Return
>
> lcar3 = .055;
>
> hloc = 0.1;
> Point(1) = {0, 0, 0, hloc};
> Point(2) = {1, 0, 0, hloc};
> Point(3) = {1, 1, 0, hloc};
> Point(4) = {0, 1, 0, hloc};
>
> Point(5) = {0, 0, 1, hloc};
> Point(6) = {1, 0, 1, hloc};
> Point(7) = {1, 1, 1, hloc};
> Point(8) = {0, 1, 1, hloc};
>
> Line(1) = {1,2};
> Line(2) = {2,3};
> Line(3) = {3,4};
> Line(4) = {4,1};
>
> Line(5) = {5,6};
> Line(6) = {6,7};
> Line(7) = {7,8};
> Line(8) = {8,5};
>
> Line(9) = {1,5};
> Line(10) = {2,6};
> Line(11) = {3,7};
> Line(12) = {4,8};
>
> // bottom
> Line Loop(21) = {-1,-4,-3,-2};
> Plane Surface(31) = {21} ;
>
> // top
> Line Loop(22) = {5,6,7,8};
> Plane Surface(32) = {22} ;
>
> // left
> Line Loop(23) = {1,10,-5,-9};
> Plane Surface(33) = {23} ;
>
> // right
> Line Loop(24) = {12,-7,-11,3};
> Plane Surface(34) = {24} ;
>
> // front
> Line Loop(25) = {2,11,-6,-10};
> Plane Surface(35) = {25} ;
>
> // back
> Line Loop(26) = {9,-8,-12,4};
> Plane Surface(36) = {26} ;
>
> // We can use a `For' loop to generate five holes in the cube:
>
> x = 0 ; y = 0.75 ; z = 0 ; r = 0.09 ;
>
> For t In {1:5}
>
> x += 0.166 ;
> z += 0.166 ;
>
> // We call the `CheeseHole' function:
>
> Call CheeseHole ;
>
> // We define a physical volume for each hole:
>
> Physical Volume (t) = thehole ;
>
> // We also print some variables on the terminal (note that, since
> // all variables are treated internally as floating point numbers,
> // the format string should only contain valid floating point format
> // specifiers like `%g', `%f', '%e', etc.):
>
> Printf("Hole %g (center = {%g,%g,%g}, radius = %g) has number %g!",
> t, x, y, z, r, thehole) ;
>
> EndFor
>
> theloops[0] = newreg ;
>
>
> Surface Loop(theloops[0]) = {31,32,33,34,35,36};
>
> Volume(100) = {theloops[]};
>
> Physical Volume (10) = 100 ;
>
> _______________________________________________
> gmsh mailing list
> gmsh at onelab.info
> http://onelab.info/mailman/listinfo/gmsh
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://onelab.info/pipermail/gmsh/attachments/20170331/30ff92df/attachment.html>
More information about the gmsh
mailing list