【有限元学习笔记】二维四边形单元位移云图可视化(有限元后处理)——MATLAB程序

前言

  在有限元求解完成后,需要对结果进行可视化,比如位移云图、应力云图和反力云图等。本文章使用MATLAB对二维四边形单元进行位移云图的可视化。

准备数据

  首先要准备节点坐标(x,y),单元节点编号(逆时针编号)和节点位移(水平方向位移和竖直方向位移),下面提供一个实例数据。

% 坐标
XYZ = [ 0 0;
        1 0;
        2 0;
        0 1;
        1 1;
        2 1;
        0 2;
        1 2;
        2 2;];

% 单元
EL = [  1 2	5 4;
        2 3	6 5;
        4 5	8 7;
        5 6	9 8;];

% 水平方向位移
DX = [  0;
        0;
        0;
        0.0697349;
        0.0604598;
        0.0746214;
        0.127212;
        0.124422;
        0.132233;];

% 竖直方向位移
DY = [  0;
        0;
        0;
        -0.00419673;
        -0.0434221;
        -0.0837584;
        -0.0370525;
        -0.0877267;
        -0.138599;];

在这里插入图片描述
计算位移的模

% 位移的模
D = sqrt(DY.^2 + DX.^2);

与Abaqus一致的配色方案

% 颜色栏
Colormap = [0	0	1;
            0	0.364705882000000	1;
            0	0.725490196000000	1;
            0	1	0.909803922000000;
            0	1	0.545098039000000;
            0	1	0.180392157000000;
            0.180392157000000	1	0;
            0.545098039000000	1	0;
            0.909803922000000	1	0;
            1	0.725490196000000	0;
            1	0.364705882000000	0;
            1	0	0;];

绘图

基本云图

  利用patch函数即可完成基本位移云图的绘制,patch函数会根据节点位移自动进行双线性插值,其中XYZ为点坐标,EL为单元节点,D为节点位移。

patch('Faces',EL,'Vertices',XYZ,'FaceVertexCData',D,'FaceColor','interp','EdgeColor','k');

在这里插入图片描述

包含变形的云图

  绘制变形后的位移云图只需要更新一下坐标即可。

XYZ = XYZ + [DX,DY];    % 更新坐标
patch('Faces',EL,'Vertices',XYZ,'FaceVertexCData',D,'FaceColor','interp','EdgeColor','k');

在这里插入图片描述

无框线(无网格)的云图

  绘制无框线的云图只需要将EdgeColor设置为none即可。

XYZ = XYZ + [DX,DY];    % 更新坐标
patch('Faces',EL,'Vertices',XYZ,'FaceVertexCData',D,'FaceColor','interp','EdgeColor','none');

在这里插入图片描述

细节调整

云图铺满 & 关闭坐标轴

  设置坐标轴紧凑格式,位移云图铺满整个绘图区。

axis tight      % 坐标轴紧凑格式

在这里插入图片描述
取消坐标轴

axis off        % 关闭坐标轴显示

在这里插入图片描述

云图左移

  在设置颜色栏之前,首先要将云图向左移动,为颜色栏绘制腾出空间。

% 将图向左移动, 为绘制颜色栏做准备
ax = gca;
PositionNew = get(ax,'Position');
PositionNew(1) = 0.08;      % 更改图形距离左边界的距离
set(gca,'Position',PositionNew);

在这里插入图片描述

绘制颜色栏

  使用colormap函数即可绘制颜色栏,配色方案采用自定义配色方案、设置字体字号和设置标题等。

% 绘制颜色栏
Co = colorbar('eastoutside');   % 设置颜色栏位移图像外侧
colormap(Colormap)  % 设置颜色栏
set(gca, 'FontName','Times New Roman', 'FontSize',14)   % 设置字体字号
Co.Label.String = 'U, Magnitude';  % 设置颜色栏标题

在这里插入图片描述

设置颜色栏标签数

  绘制了颜色栏后,可以看到标签并没有对齐,需要进行修改使之对齐。

% 设置颜色栏显示标签个数
NTicks = 13;    % 标签个数
[cmin, cmax] = caxis;
Co.Ticks = linspace(cmin,cmax,NTicks)';

在这里插入图片描述

颜色栏标签格式

  设置了标签数后,标签的格式还没有统一,模仿Abaqus标签采用科学计算法,设置方法如下。

% 设置颜色栏的刻度标签为科学计数法
yt = Co.Ticks; % 获取刻度位置
yt_labels = arrayfun(@(x) sprintf('%.3e', x), yt, 'UniformOutput', false); % 将刻度位置转换为科学计数法格式的字符串
Co.YTickLabel = yt_labels; % 设置刻度标签

在这里插入图片描述

保存云图

  可以将位移云图保存成png图片格式或者svg矢量图格式。

% 保存图片
print(f,'-dpng','位移云图','-r600')%保存图像
print(f,'-dsvg','位移云图','-r600')%保存图像

MATLAB可视化结果
在这里插入图片描述

Abaqus可视化结果
在这里插入图片描述
  可以看到,MATLAB可视化结果与Abaqus可视化结果一致。

总代码

  可视化的总代码如下,后续还会更新MATLAB应力云图(高斯点外插、节点平均)位移动画云图可视化的教程,制作不易,别忘了关注和点赞喔

clc;clear;close all
set(0,'defaultfigurecolor','w');

%% 准备数据
% 坐标
XYZ = [ 0 0;
        1 0;
        2 0;
        0 1;
        1 1;
        2 1;
        0 2;
        1 2;
        2 2;];

% 单元
EL = [  1 2	5 4;
        2 3	6 5;
        4 5	8 7;
        5 6	9 8;];

% 水平方向位移
DX = [  0;
        0;
        0;
        0.0697349;
        0.0604598;
        0.0746214;
        0.127212;
        0.124422;
        0.132233;];

% 竖直方向位移
DY = [  0;
        0;
        0;
        -0.00419673;
        -0.0434221;
        -0.0837584;
        -0.0370525;
        -0.0877267;
        -0.138599;];

% 位移的模
D = sqrt(DY.^2 + DX.^2);

% 颜色栏
Colormap = [0	0	1;
            0	0.364705882000000	1;
            0	0.725490196000000	1;
            0	1	0.909803922000000;
            0	1	0.545098039000000;
            0	1	0.180392157000000;
            0.180392157000000	1	0;
            0.545098039000000	1	0;
            0.909803922000000	1	0;
            1	0.725490196000000	0;
            1	0.364705882000000	0;
            1	0	0;];

%% 绘图
f = figure('Name','位移云图');
hold on
width = 600;      %宽度,像素数
height = 400;     %高度
left = 200;       %距屏幕左下角水平距离
bottem = 200;     %距屏幕左下角垂直距离
f.Position = [left,bottem,width,height];

XYZ = XYZ + [DX,DY];    % 更新坐标
patch('Faces',EL,'Vertices',XYZ,'FaceVertexCData',D,'FaceColor','interp','EdgeColor','k');
axis tight      % 坐标轴紧凑格式
axis off        % 关闭坐标轴显示

% 将图向左移动, 为绘制颜色栏做准备
ax = gca;
PositionNew = get(ax,'Position');
PositionNew(1) = 0.08;      % 更改图形距离左边界的距离
set(gca,'Position',PositionNew);

% 绘制颜色栏
Co = colorbar('eastoutside');   % 设置颜色栏位移图像外侧
colormap(Colormap)  % 设置颜色栏
set(gca, 'FontName','Times New Roman', 'FontSize',14)   % 设置字体字号
Co.Label.String = 'U, Magnitude';  % 设置颜色栏标题

% 设置颜色栏显示标签个数
NTicks = 13;    % 标签个数
[cmin, cmax] = caxis;
Co.Ticks = linspace(cmin,cmax,NTicks)';

% 设置颜色栏的刻度标签为科学计数法
yt = Co.Ticks; % 获取刻度位置
yt_labels = arrayfun(@(x) sprintf('%.3e', x), yt, 'UniformOutput', false); % 将刻度位置转换为科学计数法格式的字符串
Co.YTickLabel = yt_labels; % 设置刻度标签

% 保存图片
print(f,'-dpng','位移云图','-r600')%保存图像
print(f,'-dsvg','位移云图','-r600')%保存图像

总结

  这只是一个基础的示例,实际中还会有更具体的、更细致的要求,这就需要再做额外调整;另外本人也仍在学习中,这只是个人的学习笔记,可能还有一些不足之处,欢迎指正。

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Infww

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值