How can I create FEA colour plots?
Show older comments
Hi Everyone,
I have an array of dataset containing X,Y coordinates and their corresponding FEA results (Von Mises, Displacement, Strain).
What is the easiest way to plot this data on coloured contour plots?
Thank you for your help.
3 Comments
J. Alex Lee
on 7 Mar 2020
Edited: J. Alex Lee
on 7 Mar 2020
do you have connectivity information?
If not, you can maybe use the triangulate function within matlab to generate it first, and maybe there are ways to plot such results.
otherwise you can try to use a scatteredInterpolant to find values on a regular grid of positions, then use a contour() or contourf()
Tamas Lanci
on 3 Apr 2020
darova
on 3 Apr 2020
Please show your attempts. Attach the data
Answers (1)
Lubos Smolik
on 3 Apr 2020
Assuning that you have a planar rectangular geometry and coordinates and results are stored in vectors x, y and vonMises, you can use the following code:
% x - vector of x coordinates
% y - vector of y coordinates
% vonMises - nodal von Mises stress
n = 50; % number of levels
contourf(x, y, vonMises, n);
xlim([min(x) max(x)]);
ylim([min(y) max(y)]);
xlabel("X coordinate")
ylabel("Y coordinate")
bar = colorbar;
title(bar, "Von Mises stress")
If your geometry is not rectangular, then you also need some information about connections between individual nodes as J. Alex Lee has already noted.
10 Comments
Tamas Lanci
on 3 Apr 2020
Edited: Tamas Lanci
on 3 Apr 2020
darova
on 3 Apr 2020
- Do you still think ContourF function is the applicable in this case?
Didn't you stil try?
And why your elements have only two points each instead of four?
Lubos Smolik
on 3 Apr 2020
Edited: Lubos Smolik
on 3 Apr 2020
Do you still think ContourF function is the applicable in this case?
Definitely yes!
You can take full advantage of a fact that contourf does not fill areas with NaN values. The idea comes from this Matlab answer.
In your case, you need to create ghost nodes in the hollow area. The following code should do the trick.
% Import input data
% x - vector of x coordinates
% y - vector of y coordinates
% vonMises - nodal von Mises stress
% Create "ghost points"
r = 10; % radius of the hollow area
% I am assunming that the centre of the area is in x = 0, y = 0.
pts = 60; % number of the ghost points
phi = linspace(0, 2*pi, pts + 1)';
ptsX = 0.999 * r * cos(phi(1:end-1));
ptsY = 0.999 * r * sin(phi(1:end-1));
% Add the ghost points to your input data
x = [x; ptsX]; % I am assuming that x is a column vector
y = [y; ptsY];
vonMises = [vonMises; nan(size(ptsX))];
% Plot countour diagram
n = 50; % number of levels
contourf(x, y, vonMises, n);
xlim([min(x) max(x)]);
ylim([min(y) max(y)]);
xlabel("X coordinate")
ylabel("Y coordinate")
bar = colorbar;
title(bar, "Von Mises stress")
Alternatively, you can use your input data and just draw a white circle in the hollow area.
EDIT: Typo corrected.
Tamas Lanci
on 3 Apr 2020
Lubos Smolik
on 3 Apr 2020
Edited: Lubos Smolik
on 3 Apr 2020
Well, you can easily generate the ghost points in any desired area.
If you need a higher degree of automation, you can use scatteredInterpolant, which has been already mentioned by J. Alex Lee. If you set "ExtrapolationMethod" parameter to "none", areas outside of the convex hull of your points are omitted automatically. Unfortunately, this solution does not recognise hollow areas inside the convex hull.
% Import input data
% x - vector of x coordinates
% y - vector of y coordinates
% vonMises - nodal von Mises stress
% Generate interpolant
F = scatteredInterpolant(x, y, vonMises, 'natural', 'none');
% Generate query nodes
dx = (max(x) - min(x)) / 1000;
dy = (max(y) - min(y)) / 1000;
[xq, yq] = meshgrid(min(x):dx:max(x), min(y):dy:max(y));
% Visualise data
vq = F(xq, yq);
surface(xq, yq, vq);
shading interp
view(2)
Lubos Smolik
on 3 Apr 2020
Edited: Lubos Smolik
on 3 Apr 2020
And why your elements have only two points each instead of four?
@Darova Results are probably in interpolation points and not in nodes.
J. Alex Lee
on 3 Apr 2020
Before going down this rabit hole of post-processing the excel data (which I would imagine in general is hard to do), I guess we should ask OP if they have access to the actual FE results from which the full elemental connectivity information can be extracted. It's also not clear why matlab needs to be the platform of choice to do the visualization if this is the case?
Tamas Lanci
on 3 Apr 2020
Lubos Smolik
on 4 Apr 2020
Tamas, have you checked comment https://www.mathworks.com/matlabcentral/answers/509490-how-can-i-create-fea-colour-plots#comment_820742 ? I used scatteredInterpolant there and than visualised data using surface function.
Tamas Lanci
on 10 Apr 2020
Edited: Tamas Lanci
on 16 Apr 2020
Categories
Find more on Contour Plots in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
