Changing Faces of DiscreteGeometry (PDE Toolbox)

6 visualizaciones (últimos 30 días)
Nick
Nick el 27 de Nov. de 2016
Comentada: Nick el 19 de Dic. de 2016
I am trying to add a geometry to my PDE model from my given mesh (Nodes and Tetrahedron elements).
model = createpde(1);
Nodes = [-1 -1 -1; 1 -1 -1; -1 1 -1; 1 1 -1; -1 -1 1; 1 -1 1; -1 1 1; 1 1 1]';
Elements = [1 2 3 6; 2 3 4 6; 1 3 5 6; 3 4 6 8; 3 5 6 7; 3 6 7 8]';
[G, Mesh] = geometryFromMesh(model,Nodes,Elements);
h = pdegplot(model, 'FaceLabels', 'on');
set(h(1), 'FaceAlpha', 0.5);
I am expecting the geometry G to have 6 Faces (obviously, because I have a cube), but the Geometry does not work like expected on the top and bottom Face, which are divided into several Faces, depending on the Tetrahedrons. On the "side" Faces it looks good.4
My question now is: Is there a way to change the Faces of the geometry, so for example that I say Face 1 should be the area between the Nodes 1-4 or something like that. Or alternatively: Does someone know, why the faces on top and bottom are divided like that and what I can change in my code to stop that from happen.
Best regards Nick

Respuesta aceptada

Damian Sheehy
Damian Sheehy el 13 de Dic. de 2016
Elements 2,4,6 have reversed orientations. The input tetrahedral elements should honor the following numbering convention https://www.mathworks.com/help/pde/ug/mesh-data.html#buqc57w-1
  1 comentario
Nick
Nick el 19 de Dic. de 2016
Thank you! That's exactly what I needed to know.

Iniciar sesión para comentar.

Más respuestas (1)

Gautham Sholingar
Gautham Sholingar el 30 de Nov. de 2016
Hello Nick,
MATLAB documentation provides a few good examples showing how to use the 'geometryFromMesh' function to create the geometry of a cube. The following link has a section pertaining to using a convex hull to generate the 3-D geometry of a cube:
%%Geometry from Convex Hull
% Create a geometric block from the convex hull of a mesh grid of points.
Create a 3-D mesh grid.
[x,y,z] = meshgrid(-2:4:2);
Create the convex hull.
x = x(:);
y = y(:);
z = z(:);
K = convhull(x,y,z);
Put the data in the correct shape for geometryFromMesh.
nodes = [x';y';z'];
elements = K';
Create a PDE model and import the mesh.
model = createpde();
geometryFromMesh(model,nodes,elements);
View the geometry and face numbers.
pdegplot(model,'FaceLabels','on','FaceAlpha',0.5)
The reason you had triangular faces on top is that the 'elements' variable needs to represent the triangular facets in this geometry and needs to be of size 3-by-m where m represents the number of triangular facets. Your current implementation uses 'elements' of size 4-by-6 which is correct for square faces but does not work for a triangular representation. You will need a 3-by-12 'elements' variable to represent the 12 triangular faces on a cube: 2 on each face. The elements variable in the example above is as follows:
1 1 1 2 2 2 3 3 4 4 5 6
2 3 5 4 5 6 4 7 6 8 7 7
3 5 2 3 6 4 7 5 8 7 6 8
This should give you the desired result as follows (Note: you might need to adjust the meshgrid for your case)
I hope that resolves your issue. The above code was tested in MATLAB R2016b.
Regards,
Gautham Sholingar
  1 comentario
Nick
Nick el 19 de Dic. de 2016
Thanks! Unfortunately that was not quite what I wanted to know, because I was just asking myself, why the one face of my cube is divided into four (I want to make more complex geometry than just the cube, that was just an example for my understanding). But thanks anyway!

Iniciar sesión para comentar.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by