[Gmsh] Unexpected behavior (bug?)

Kópházi József j.kophazi at imperial.ac.uk
Tue Feb 9 21:21:17 CET 2016


Dear list members,

I have encountered some unusual behavior while trying to generate a very 
simple structured tetrahedral mesh for two boxes. The attached images 
show the surface (triangle) and volumetric (tetrahedron) elements of the 
same mesh. However, some of the triangles do not "sit" properly on the 
face of the corresponding tetrahedron but they are "laid across" on two 
tetrahedra. This is marked with red arrows on the images. I have also 
attached the script resulting this mesh.

I generated these pictures using gmsh version 2.9.1 but some other 
versions also produce the same problem.

Thank you for your help,

Jozsef Kophazi


-------------- next part --------------
A non-text attachment was scrubbed...
Name: surfaces marked.png
Type: image/png
Size: 45098 bytes
Desc: not available
URL: <http://onelab.info/pipermail/gmsh/attachments/20160209/9dee474d/attachment-0002.png>
-------------- next part --------------
////////    Configuration block     ////////
// Possible values:
//    lores  0.1
//    mdres  0.025
//    mhres  0.010
//    hires  0.005
den=0.1;
top_structured=1;
top_hex=0;
bottom_structured=1;
bottom_hex=0;
alternate=0;
//////// End of configuration block ////////


// Points
blb_point = newp;	Point( blb_point) = {  0.0,   0.0,   0.0, den};
flb_point = newp;	Point( flb_point) = {  1.0,   0.0,   0.0, den};
brb_point = newp;	Point( brb_point) = {  0.0,   1.0,   0.0, den};
frb_point = newp;	Point( frb_point) = {  1.0,   1.0,   0.0, den};

blm_point = newp;	Point( blm_point) = {  0.0,   0.0,   0.5, den};
flm_point = newp;	Point( flm_point) = {  1.0,   0.0,   0.5, den};
brm_point = newp;	Point( brm_point) = {  0.0,   1.0,   0.5, den};
frm_point = newp;	Point( frm_point) = {  1.0,   1.0,   0.5, den};

blt_point = newp;	Point( blt_point) = {  0.0,   0.0,   1.0, den};
flt_point = newp;	Point( flt_point) = {  1.0,   0.0,   1.0, den};
brt_point = newp;	Point( brt_point) = {  0.0,   1.0,   1.0, den};
frt_point = newp;	Point( frt_point) = {  1.0,   1.0,   1.0, den};

// Lines
rb_line = newl;		Line( rb_line) = {frb_point, brb_point};
bb_line = newl;		Line( bb_line) = {brb_point, blb_point};
lb_line = newl;		Line( lb_line) = {blb_point, flb_point};
fb_line = newl;		Line( fb_line) = {flb_point, frb_point};

rm_line = newl;		Line( rm_line) = {frm_point, brm_point};
bm_line = newl;		Line( bm_line) = {brm_point, blm_point};
lm_line = newl;		Line( lm_line) = {blm_point, flm_point};
fm_line = newl;		Line( fm_line) = {flm_point, frm_point};

rt_line = newl;		Line( rt_line) = {frt_point, brt_point};
bt_line = newl;		Line( bt_line) = {brt_point, blt_point};
lt_line = newl;		Line( lt_line) = {blt_point, flt_point};
ft_line = newl;		Line( ft_line) = {flt_point, frt_point};

frt_line = newl;	Line(frt_line) = {frt_point, frm_point};
frb_line = newl;	Line(frb_line) = {frm_point, frb_point};
brb_line = newl;	Line(brb_line) = {brb_point, brm_point};
brt_line = newl;	Line(brt_line) = {brm_point, brt_point};

blb_line = newl;	Line(blb_line) = {blb_point, blm_point};
blt_line = newl;	Line(blt_line) = {blm_point, blt_point};
flt_line = newl;	Line(flt_line) = {flt_point, flm_point};
flb_line = newl;	Line(flb_line) = {flm_point, flb_point};


// Surfaces
b_lineloop = newll;	Line Loop(b_lineloop) = {fb_line, rb_line, bb_line, lb_line};
b_surface = news;	Plane Surface(b_surface) = {b_lineloop};
m_lineloop = newll;	Line Loop(m_lineloop) = {fm_line, rm_line, bm_line, lm_line};
m_surface = news;	Plane Surface(m_surface) = {m_lineloop};
t_lineloop = newll;	Line Loop(t_lineloop) = {rt_line, bt_line, lt_line, ft_line};
t_surface = news;	Plane Surface(t_surface) = {t_lineloop};

fb_lineloop = newll;	Line Loop(fb_lineloop) = {frb_line, -fb_line, -flb_line, fm_line};
fb_surface = news;	Plane Surface(fb_surface) = {fb_lineloop};
ft_lineloop = newll;	Line Loop(ft_lineloop) = {frt_line, -fm_line, -flt_line, ft_line};
ft_surface = news;	Plane Surface(ft_surface) = {ft_lineloop};
bb_lineloop = newll;	Line Loop(bb_lineloop) = {brb_line, bm_line, -blb_line, -bb_line};
bb_surface = news;	Plane Surface(bb_surface) = {bb_lineloop};
bt_lineloop = newll;	Line Loop(bt_lineloop) = {brt_line, bt_line, -blt_line, -bm_line};
bt_surface = news;	Plane Surface(bt_surface) = {bt_lineloop};
rb_lineloop = newll;	Line Loop(rb_lineloop) = {rb_line, brb_line, -rm_line, frb_line};
rb_surface = news;	Plane Surface(rb_surface) = {rb_lineloop};

rt_lineloop = newll;	Line Loop(rt_lineloop) = {frt_line, rm_line, brt_line, -rt_line};
rt_surface = news;	Plane Surface(rt_surface) = {rt_lineloop};
lb_lineloop = newll;	Line Loop(lb_lineloop) = {flb_line, -lb_line, blb_line, lm_line};
lb_surface = news;	Plane Surface(lb_surface) = {lb_lineloop};
lt_lineloop = newll;	Line Loop(lt_lineloop) = {flt_line, -lm_line, blt_line, lt_line};
lt_surface = news;	Plane Surface(lt_surface) = {lt_lineloop};

// Volumes
b_surfaceloop = newsl;	Surface Loop(b_surfaceloop) = {	b_surface, fb_surface, bb_surface,
							rb_surface, lb_surface, m_surface};
b_volume = newv;	Volume(b_volume) = {b_surfaceloop};
t_surfaceloop = newsl;	Surface Loop(t_surfaceloop) = {	m_surface, ft_surface, bt_surface,
							rt_surface, lt_surface, t_surface};
t_volume = newv;	Volume(t_volume) = {t_surfaceloop};

// Transfinite settings
Transfinite Line { rb_line} = 1/den Using Progression 1.;
Transfinite Line { bb_line} = 1/den Using Progression 1.;
Transfinite Line { lb_line} = 1/den Using Progression 1.;
Transfinite Line { fb_line} = 1/den Using Progression 1.;
Transfinite Line { rm_line} = 1/den Using Progression 1.;
Transfinite Line { bm_line} = 1/den Using Progression 1.;
Transfinite Line { lm_line} = 1/den Using Progression 1.;
Transfinite Line { fm_line} = 1/den Using Progression 1.;
Transfinite Line {frb_line} = 0.5/den Using Progression 1.;
Transfinite Line {brb_line} = 0.5/den Using Progression 1.;
Transfinite Line {blb_line} = 0.5/den Using Progression 1.;
Transfinite Line {flb_line} = 0.5/den Using Progression 1.;

Transfinite Line {frt_line} = 0.5/den Using Progression 1.;
Transfinite Line {brt_line} = 0.5/den Using Progression 1.;
Transfinite Line {blt_line} = 0.5/den Using Progression 1.;
Transfinite Line {flt_line} = 0.5/den Using Progression 1.;
Transfinite Line { rt_line} = 1/den Using Progression 1.;
Transfinite Line { bt_line} = 1/den Using Progression 1.;
Transfinite Line { lt_line} = 1/den Using Progression 1.;
Transfinite Line { ft_line} = 1/den Using Progression 1.;

If( top_structured == 1 )
  If( alternate == 1 )
    Transfinite Surface { t_surface} Alternate;
    Transfinite Surface {ft_surface} Alternate;
    Transfinite Surface {bt_surface} Alternate;
    Transfinite Surface {rt_surface} Alternate;
    Transfinite Surface {lt_surface} Alternate;
  EndIf
  If( alternate == 0 )
    Transfinite Surface { t_surface};
    Transfinite Surface {ft_surface};
    Transfinite Surface {bt_surface};
    Transfinite Surface {rt_surface};
    Transfinite Surface {lt_surface};
  EndIf
EndIf

If( bottom_structured == 1 )
  If( alternate == 1 )
    Transfinite Surface { b_surface} Alternate;
    Transfinite Surface {fb_surface} Alternate;
    Transfinite Surface {bb_surface} Alternate;
    Transfinite Surface {rb_surface} Alternate;
    Transfinite Surface {lb_surface} Alternate;
  EndIf
  If( alternate == 0 )
    Transfinite Surface { b_surface};
    Transfinite Surface {fb_surface};
    Transfinite Surface {bb_surface};
    Transfinite Surface {rb_surface};
    Transfinite Surface {lb_surface};
  EndIf
EndIf

If( top_structured == 1 || bottom_structured == 1 )
  If( alternate == 1 )
    Transfinite Surface {m_surface} Alternate;
  EndIf
  If( alternate == 0 )
    Transfinite Surface {m_surface};
  EndIf
EndIf

If( top_hex == 1 )
  Recombine Surface {t_surface};
  Recombine Surface {ft_surface};
  Recombine Surface {bt_surface};
  Recombine Surface {rt_surface};
  Recombine Surface {lt_surface};
EndIf
If( bottom_hex == 1 )
  Recombine Surface {b_surface};
  Recombine Surface {fb_surface};
  Recombine Surface {bb_surface};
  Recombine Surface {rb_surface};
  Recombine Surface {lb_surface};
EndIf


If( top_hex == 1 && bottom_hex == 1 )
  Recombine Surface {m_surface};
EndIf

If( top_hex == 1 && bottom_hex == 0 )
  TransfQuadTri {t_volume};
EndIf
If( top_hex == 0 && bottom_hex == 1 )
  TransfQuadTri {b_volume};
EndIf

If( top_structured == 1 )
  Transfinite Volume {t_volume} ;
EndIf

If( bottom_structured == 1 )
  Transfinite Volume {b_volume} ;
EndIf

// Physical domains
Physical Surface("TopFace") = {t_surface};
Physical Surface("MiddleFace") = {m_surface};
Physical Surface("BottomFace") = {b_surface};
Physical Surface("UpperLeftFace") = {lt_surface};
Physical Surface("LowerLeftFace") = {lb_surface};
Physical Surface("UpperRightFace") = {rt_surface};
Physical Surface("LowerRightFace") = {rb_surface};
Physical Surface("UpperBackFace") = {bt_surface};
Physical Surface("LowerBackFace") = {bb_surface};
Physical Surface("UpperFrontFace") = {ft_surface};
Physical Surface("LowerFrontFace") = {fb_surface};

Physical Volume("TopVolume") = {t_volume};
Physical Volume("BottomVolume") = {b_volume};


-------------- next part --------------
A non-text attachment was scrubbed...
Name: volumes marked.png
Type: image/png
Size: 42026 bytes
Desc: not available
URL: <http://onelab.info/pipermail/gmsh/attachments/20160209/9dee474d/attachment-0003.png>


More information about the gmsh mailing list