Find Specific Faces on a 3D PDE DiscreteGe​ometry/The​rmalModel

8 次查看(过去 30 天)
Hi,
I am struggling to create a universal code that is able to solve a Thermal Model of heat travelling through a cube from one face to the other with different cavity types.
I was hoping to find a way to extract the number of the faces on the outer surface of the cube on opposing sides in either the x or y direction. I wish to do this so that I can easily change the model without having to manually find the values of opposing faces. Something like this;
thermalBC(model,'Face',pos_face,'Temperature',pos_t);
thermalBC(model,'Face',zero_face,'Temperature',zero_t);
where the pos_face and zero_face variables are extracted from the model.
Cheers!

采纳的回答

Luke Benham
Luke Benham 2020-6-29
I have something similar, and can now express the desired faces as variables such as this;
figure, h1 = pdegplot(model,'FaceLabels','on'); %Display model and create variable to find facelabels.
hp = h1.Parent;
faceLabelsArray = hp.Children; %Pull Facelabels from figure
LF = length(faceLabelsArray); %Define length so make this universally applicable
labelCells = {faceLabelsArray(1:LF-6).String}; %Pull separate cells for each face
labelNums = length(labelCells):-1:1; %The faces are created backwards, this makes it chronilogical
positionCells = {faceLabelsArray(1:LF-6).Position}; %Find (x,y,z) coords of each face label
positionNums = cell2mat(positionCells'); %Make this into matrix
a = find(positionNums(:,1)>(cubelength/2)); pos = labelNums(a); %Find specific faces based on a set location
b = find(positionNums(:,1)<-(cubelength/2)); zer = labelNums(b);
The reason why I have set the boundary for my desired faces to be chosen is just because I have it centred on (0,0,0).
Hope this helps anyone with a similar requirement!

更多回答(1 个)

darova
darova 2020-6-27
Here is an example
[x,y] = pol2cart(pi/4:pi/2:2*pi,1); % rectangle
gd = [2;length(x);x(:);y(:)]; % geometry description
dl = decsg(gd); % decomposition
[p,e,t] = initmesh(dl,'hmax',0.05); % triangulation
ind = logical(t(1,:)*0)'; % indices inside a region
for i = 1:length(ind)
vv = p(:,t(1:3,i)); % triangle vertices
rr = hypot(vv(1,:),vv(2,:)) < 0.3; % all vertices inside circle
if all(rr)
ind(i) = true; % write triangle
end
end
pdemesh(p,e,t) % display all mesh
ff.faces = t(1:3,ind)';
ff.vertices = p';
ff.facecolor = 'g';
patch(ff) % display region inside
viscircles([0 0],0.3) % display region

类别

Help CenterFile Exchange 中查找有关 Geometry and Mesh 的更多信息

产品


版本

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by