
Error meshing 2D geometry in Matlab R2018a
7 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Yoav Blau
il 9 Dic 2018
Commentato: Konstantin Kovalev
il 4 Nov 2019
My model is a 2d geometry of an ellipse subtracted from a rectangle. Generating the mesh for the model fails in Matlab R2018a, but succeeds in previous version (tried on R2017a, R2015a).
Error:
Meshing failed due to invalid geometry. Each face must have a unique face ID.
Code to reproduce error (fails on last line - generateMesh):
model = createpde;
% rectangle parameters
w = 2;
h = 1;
% ellipse parameters
x_cent = 0;
y_cent = 0;
r1 = 0.6;
r2 = 0.4;
rot = pi/5;
% geometry
rect_model = zeros(12,4);
rect_geometry = [3; 4; w/2; -w/2; -w/2; w/2; h/2; h/2; -h/2; -h/2];
ellipse_geometry = [4; x_cent; y_cent; r1; r2; rot];
% model
rect_model(1:7,:) = decsg(rect_geometry);
ellipse_model = decsg(ellipse_geometry);
geometryFromEdges(model,[rect_model,ellipse_model]);
% mesh
generateMesh(model);
Image of geometry:

0 Commenti
Risposta accettata
Alan Weiss
il 10 Dic 2018
I do not know what the commands you were using do. Seriously, I simply do not understand them. But I went through the doc topic 2-D Geometry Creation at Command Line and did the following:
model = createpde;
% rectangle parameters
w = 2;
h = 1;
% ellipse parameters
x_cent = 0;
y_cent = 0;
r1 = 0.6;
r2 = 0.4;
rot = pi/5;
% geometry
% rect_model = zeros(12,4);
rect_geometry = [3; 4; w/2; -w/2; -w/2; w/2; h/2; h/2; -h/2; -h/2];
ellipse_geometry = [4; x_cent; y_cent; r1; r2; rot;0;0;0;0];
%%
gd = [rect_geometry ellipse_geometry];
%%
ns = char('rect','ellip');
ns = ns';
%%
sf = 'rect-ellip';
%%
[dl,bt] = decsg(gd,sf,ns);
%%
% model
% rect_model(1:7,:) = decsg(rect_geometry);
% ellipse_model = decsg(ellipse_geometry);
geometryFromEdges(model,dl);
%%
% mesh
generateMesh(model);
%%
pdeplot(model)

I don't know what changed between previous versions and the current version, but the commands I gave work as documented.
Alan Weiss
MATLAB mathematical toolbox documentation
1 Commento
Konstantin Kovalev
il 4 Nov 2019
The original script uses decsg conceptually incorrectly. The entire geometry description must be passed to decsg, so it can properly compute all regions. The formula in Alan's answer is used to specify that only the region between rectangle and ellipse is needed. If formula is not used, decsg will return geometry with 2 regions.
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Geometry and Mesh in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!