[Gmsh] Swiss cheese with filled cavities

Achille Pluplu mail.plutus at gmail.com
Fri Mar 31 09:36:47 CEST 2017


Dear Guillaume,

thanks a lot for helping! As you work at CEA, my next step is to
import the mesh in Castem and to give different properties to the
cheese and the inclusions.

Do you have any advice on this?

On Fri, Mar 31, 2017 at 8:59 AM, DILASSER Guillaume
<Guillaume.DILASSER at cea.fr> wrote:
> Dear Achille,
>
>
>
> As is, your script is already meshing the hole/inclusion volumes. Do you
> wish to produce two mesh files, one with the "cheese" mesh and the other
> with the inclusion mesh ? If that is the case, you can comment out the line
> Physical Volume (t) = thehole ; run the model once, save the mesh, this will
> give you the “cheese” mesh. Then uncomment that line and comment out
> Physical Volume (10) = 100 ; and you should get the inclusions only.
>
>
>
> Faithfully yours,
>
>
>
> Guillaume DILASSER
>
> Doctorant SACM / LEAS
>
> CEA - Centre de Saclay - Bât.123 - PC 319c
>
> 91191 Gif sur Yvette Cedex - France -
>
>
>
> guillaume.dilasser at cea.fr
>
>
>
> -----Message d'origine-----
> De : gmsh [mailto:gmsh-bounces at ace20.montefiore.ulg.ac.be] De la part de
> Achille Pluplu
> Envoyé : jeudi 30 mars 2017 18:44
> À : gmsh at onelab.info
> Objet : [Gmsh] Swiss cheese with filled cavities
>
>
>
> 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



More information about the gmsh mailing list