# 3D color map of F=F(x,y,z) where data is given as a 2D array of the form [x y z F]

9 views (last 30 days)

Show older comments

##### 2 Comments

Saurabh Chaudhary
on 3 Jan 2023

Edited: Saurabh Chaudhary
on 3 Jan 2023

you can try to use contour function.

### Accepted Answer

Karim
on 3 Jan 2023

Edited: Karim
on 3 Jan 2023

Hello , you can create those plots both for both 2D and 3D elements using the patch command. Essentially you need a connecitivty matrix (i.e. the faces of the patch) which you have since these are the faces of the elements used in the mesh. Hense next to the coordindates of the nodes, you also need the connecivity. If you can share a set of sample data (i.e. the mesh, the nodes and the value for plotting) i can adjust the example to meet you data. You can use the paperclip symbol to attach data (of a small example) to you question.

See below for a demonstration of the concept:

% the data here will differ depending on the used FE package, these are

% outputs from ansys i used as a demo in another matlab answer

% this file contains the xyz coordinates of the grid points

coordinates = readmatrix("coordinates.csv");

% this file contains the deformation values, which we will use to create the 'F' variable

displacements = readmatrix("displacements.csv");

% let's use the magnitude of the deformation as color

F = sqrt( sum(displacements(:,2:end).^2,2));

% this file containts the node conectivity (i.e. the nodes that make up the elements)

nodes = readmatrix("nodes.csv");

% now create the plot

figure

patch('Faces',nodes(:,2:end),'Vertices',coordinates(:,2:end),'FaceVertexCData',F,'FaceColor','interp',...

'EdgeAlpha',0.15) % put the edge alpha to 0 if you went to hide the element edges

view([-15 45])

axis equal

colormap jet

colorbar

title("Deformed")

##### 6 Comments

Karim
on 5 Jan 2023

@Saeid, the reults like you have them now would require a lot of insight into the problem and a lot of work to map. Notice on the second figure the red points, these corespond with the result grid in your text file. But these points do not match the grid points of your mesh. You even have less results then you have elements, if you would have a result at the center of the element you could use the shapefuncions of the element to determine the results at the nodes. However, the data like you presented it will require some special extrapolation. I typicaly work with Nastran and Samcef, these provide the results either at directly at the nodes or at the element centers. I'm a bit surprised that comsol gives so few result points spread over the mesh.

Below you can get an idea on how to plot the mesh and the points, if you want to plot the mesh with colors for some values, like i showed in my answer, you will need to somehow extrapolate your results to values at the nodes.

Mesh = readmatrix('3D_LPTT_ThinSlitEntrance_CoarseMesh.txt');

idx = find(all(isnan(Mesh),2));

Grid = Mesh((1+idx(end-1)):(idx(end)-1),1:3);

Elem = Mesh((1+idx(end)):end,:);

Results = readmatrix('3D_LPTT_ThinSlit_Coarse_P.txt');

ResultGrid = Results(:,1:3);

% plot the mesh

figure

patch('Faces',Elem,'Vertices',Grid,'FaceColor','r','EdgeColor','k')

grid on

view([-210 40])

axis equal

% plot the grid of the results on top of the edges of the mesh

figure

hold on

patch('Faces',Elem,'Vertices',Grid,'FaceColor','none','EdgeColor','k')

scatter3(ResultGrid(:,1),ResultGrid(:,2),ResultGrid(:,3),'r','filled')

hold off

grid on

view([-210 40])

axis equal

### More Answers (0)

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!