Non-conforming meshing of L-Shape geometric domain with an interface

Contents

Summary of the demo

This demo illustrates how to generate meshes separately for regions of interest. In case of L-Shape geometry, it is split into two subdomains by an straight line interface. Each subdomain can be meshed separately (together it its boundary regions). The interface line can be also meshed separately. In this demo the meshes are translated to for more clear view.

Geometric model with interface

LShapeIfaceGeom class provides geometric model with internal boundary (called interface). The user can set the plcement of the interface with some restricted way by varying parameters fA and fB in the range (0, 1).

clear variables;

Create Mesher object

When Mesher object is created it takes care of initializing interface to GMSH mesh generator

mesher = mp.Mesher();

Create object describing geometric model

geom = mp.geoms.LShapeIfaceGeom('my_domain');
geom.params.dW = 3;
geom.params.dH = 4;
geom.params.dt = 1.5;

%
% Relative placement of interface endpoints.
geom.params.fA = 0.5;
geom.params.fB = 0.2;

%
% Get the cooordinates of interface endpoints.
[p1, p2] = geom.getInterfaceEndpoints();
disp(p1)
disp(p2)

% Specify that desired type of element fo the upper subdomain in quad.
geom.params.quads=[0,1];

% Display names of geometric regions
regs = geom.regions();
arrayfun(@(i) fprintf('%d %s\n',i,regs{i}), 1:length(regs));
     0     2     0

    1.5000    2.1200         0

1 d_subBottom
2 d_subTop
3 b_bottom
4 b_left_top
5 b_left_bottom
6 b_other_bottom
7 b_other_top
8 i_interface

Prepare regions selectors

regT = [2,4,7,8];
regB = [1,3,6,8];
regI = [8];

Generate mesh

mesh1 = mesher.generate(geom, struct('lc', 0.8, 'regionsToMesh', {regs(regT)}));
disp(mesh1.regionNames());
mesh2 = mesher.generate(geom, struct('lc', 0.4, 'regionsToMesh', {regs(regB)}));
disp(mesh2.regionNames());
mesh3 = mesher.generate(geom, struct('lc', 0.2, 'dim', 1', 'regionsToMesh', {regs(regI)}));
disp(mesh3.regionNames());

mp.translateMesh(mesh1, [0,1,0]);
mp.translateMesh(mesh3, [0,0.5,0]);
    'b_left_top'    'b_other_top'    'i_interface'    'd_subTop'

    'b_bottom'    'b_other_bottom'    'i_interface'    'd_subBottom'

    'i_interface'

Visualize mesh

The simplest way to visualize mesh is to use Viewer class.

viewer = mp.Viewer();
viewer.show(mesh1);
viewer.show(mesh2);
viewer.show(mesh3);

Internal management of demo

mp_manage_demos('report', 'LShapeIfaceGeom_nonconforming', true);