基于MATLAB的冰块变化仿真

news/2025/3/13 11:01:12/

如图1所示,边长为5cm的冰块,初始温度为-2℃,放在25℃的环境中自然冷却,对流换热系数为10W/m²K,本文将通过matlab编程求解冰块融化的过程,计算其温度场。

图片

图1 案例示意图

02

温度场计算

本文通过matlab分别计算t=1min、5min、10min和20min后的温度云图及瞬态温度变化过程(计算总时间30min),计算结果展示如下表:

图片

图片

1min

5min

图片

图片

10min

20min

 

% 参数设置
Lx = 0.05; Ly = 0.05;   % 冰块尺寸(5cm x 5cm)
nx = 31; ny = 31;         % 网格数量
dx = Lx/(nx-1); dy = Ly/(ny-1);
T_initial = -2;           % 初始温度(℃)
T_env = 25;               % 环境温度(℃)
h = 10;                   % 对流换热系数(W/m²K)% 材料属性(冰)
rho_ice = 920;           % 密度(kg/m³)
k_ice = 2.18;            % 导热系数(W/mK)
c_ice = 2100;            % 比热容(J/kgK)
L = 334000;              % 潜热(J/kg)% 材料属性(水)
k_water = 0.6;           % 导热系数(W/mK)
c_water = 4200;          % 比热容(J/kgK)% 时间参数
alpha_ice = k_ice/(rho_ice*c_ice);
dt = 1 * dx^2/(4*alpha_ice); % 时间步长
total_time = 605;             % 总模拟时间(秒)
n_steps = round(total_time/dt);% 初始化
T = T_initial * ones(nx, ny);
f = zeros(nx, ny);       % 液相分数
k = k_ice * ones(nx, ny);
c = c_ice * ones(nx, ny);% 创建图形窗口
figure;
h_plot = pcolor(T);
shading interp;          % 双线性插值
colormap(jet(1024));     % 1024级颜色渐变
colorbar;
axis equal tight;
title('Temperature (℃)');% 预计算常数
mass = rho_ice * dx^2;  % 每个节点的质量(假设厚度为1m)% 主循环
for step = 1:n_stepsT_old = T;f_old = f;k_old = k;c_old = c;% ========== 向量化热流计算 ========== %% 初始化各方向热流矩阵[Q_east, Q_west, Q_north, Q_south] = deal(zeros(nx, ny));% 东向热流 (i < nx)if nx > 1k_east = 2 * k_old(1:end-1,:) .* k_old(2:end,:) ./ (k_old(1:end-1,:) + k_old(2:end,:) + eps);Q_east(1:end-1,:) = k_east .* (T_old(2:end,:) - T_old(1:end-1,:));end% 西向热流 (i > 1)if nx > 1k_west = 2 * k_old(2:end,:) .* k_old(1:end-1,:) ./ (k_old(2:end,:) + k_old(1:end-1,:) + eps);Q_west(2:end,:) = k_west .* (T_old(1:end-1,:) - T_old(2:end,:));end% 北向热流 (j < ny)if ny > 1k_north = 2 * k_old(:,1:end-1) .* k_old(:,2:end) ./ (k_old(:,1:end-1) + k_old(:,2:end) + eps);Q_north(:,1:end-1) = k_north .* (T_old(:,2:end) - T_old(:,1:end-1));end% 南向热流 (j > 1)if ny > 1k_south = 2 * k_old(:,2:end) .* k_old(:,1:end-1) ./ (k_old(:,2:end) + k_old(:,1:end-1) + eps);Q_south(:,2:end) = k_south .* (T_old(:,1:end-1) - T_old(:,2:end));end% 边界对流条件Q_boundary = zeros(nx, ny);Q_boundary(1,:)   = h*(T_env - T_old(1,:))*dx;   % 西边界Q_boundary(end,:) = h*(T_env - T_old(end,:))*dx; % 东边界 Q_boundary(:,1)   = h*(T_env - T_old(:,1))*dx;   % 南边界Q_boundary(:,end) = h*(T_env - T_old(:,end))*dx; % 北边界% 总热流Q_total = Q_east + Q_west + Q_north + Q_south + Q_boundary;delta_Q = Q_total * dt;% ========== 向量化相变计算 ========== %T_new = T_old;f_new = f_old;% 计算材料属性掩膜is_water = f_old >= 1;% 情况1: 冰升温(T < 0)ice_mask = T_old < 0 & ~is_water;delta_T_ice = delta_Q ./ (mass * c_ice);T_new(ice_mask) = T_old(ice_mask) + delta_T_ice(ice_mask);% 处理过零冰节点over_zero = ice_mask & T_new >= 0;Q_used = (0 - T_old(over_zero)) * mass * c_ice;Q_remaining = delta_Q(over_zero) - Q_used;Q_remaining(Q_remaining < 0) = 0;delta_f = Q_remaining / (L * mass);T_new(over_zero) = 0;f_new(over_zero) = delta_f;% 情况2: 相变中(T == 0且f < 1)melting_mask = (T_old == 0) & (f_old < 1);delta_f_melt = delta_Q(melting_mask) / (L * mass);f_new(melting_mask) = f_old(melting_mask) + delta_f_melt;% 情况3: 水升温(T >= 0且f >= 1)water_mask = ~ice_mask & ~melting_mask;delta_T_water = delta_Q(water_mask) ./ (mass * c_water);T_new(water_mask) = T_old(water_mask) + delta_T_water(water_mask);% 处理完全融化full_melt = f_new > 1;excess = f_new(full_melt) - 1;T_new(full_melt) = excess * L / c_water;f_new(full_melt) = 1;% 更新材料属性k = k_water * full_melt + k_ice * ~full_melt;c = c_water * full_melt + c_ice * ~full_melt;% 更新场变量T = T_new;f = f_new;% ========== 可视化更新 ========== %if mod(step, 10) == 0set(h_plot, 'CData', T);title(sprintf('Time: %.2f s', step*dt));drawnow;end
end% 显示最终结果
figure;
pcolor(T);
shading interp;
colormap(jet(1024));
colorbar;
axis equal tight;
title('Final Temperature Distribution (℃)');
xlabel('X');
ylabel('Y');


http://www.ppmy.cn/news/1578777.html

相关文章

力扣HOT100之双指针:11. 盛最多水的容器

这道题用双指针法很快就做出来了&#xff0c;但是为什么我的双指针法在时间和空间上都不占优啊&#xff1f; 用两个指针分别指向数组的首元素和尾元素&#xff0c;然后取其中的较小值两个位置之间的间隔就得到了这两根垂直线之间所能容纳的水量&#xff0c;例如&#xff0c;对于…

如何检查电脑的硬盘健康状况?

检查硬盘健康状况可以使用多种工具和方法。以下是一些常用的工具和步骤&#xff1a; Windows系统&#xff1a; 使用Windows内置工具&#xff1a; 磁盘检查&#xff1a;可以通过命令提示符&#xff08;cmd&#xff09;使用chkdsk命令来检查硬盘错误。例如&#xff0c;输入chkd…

Windows 上安装配置 Apache Tomcat 及Tomcat 与 JDK 版本对应

Apache Tomcat 是一种广泛使用的 Web 服务器和 Java 容器&#xff0c;对于部署和运行 Java Web 应用程序至关重要。它的可靠性和强大的功能使其成为全球开发人员和组织的首选。 在这篇文章中&#xff0c;我们将介绍在 Windows 机器上安装 Apache Tomcat 的过程&#xff0c;以确…

SQL Server的连接时发生了与网络相关或特定于实例的错误。未找到服务器或无法访问服务器

项目场景&#xff1a; 今天在服务器配置数据库&#xff0c;如果在外网使用IP登录数据库一直连接不上&#xff0c;然后在服务器上面装的数据库使用IP连接还是连接不上&#xff0c;这让我确认不是防火墙的入站规则原因&#xff0c;然后各种配置也看了&#xff0c;还是不好使&…

Python Cookbook-3.15 检查信用卡校验

任务 检查信用卡校验。 解决方案 Luhn mod 10是信用卡业检验和的标准。它不是 Python 内建的算法&#xff0c;不过我们可以很容易地实现这个算法: def cardluhnChecksumIsValid(card_number): 通过 lunn mod-10 校验和算法检查信用卡号sum 0num_digits len(card_number)o…

初识云计算

1.传统IT的劣势 讯速整升的互联风普及率给企业带来了大最的流量&#xff0c;用户以及数据&#xff0c;为了能够匹配企业高速发展的进度&#xff0c;就需要不断地买购传统IT设备&#xff0c;时间一长&#xff0c;传统IT设备的弊端就逐渐显示出来&#xff1a; ① 采购周期…

openai agents SDK原理详解

文章目录 openai agents开发新套件&#xff1a;Responses API和Agents SDKResponses API⁠ agents SDKGuardrails: 智能体安全护栏输入防护栏输出防护栏 Tracing&#xff1a;智能体行为观测追踪tracespanprocessors 使用示例&#xff1a;创建辅导孩子写作业的多个智能体教师 RE…

MongoDB副本集部署完整教程

一般而言&#xff0c;副本集主要成员有三个&#xff1a;主节点&#xff0c;副本节点&#xff0c;仲裁节点 按照官方推荐方案&#xff0c;我们搭建一个三成员的副本集&#xff0c;这个副本集由一个主结点和两个副本结点组成。 这里采用三台虚拟机进行部署&#xff1a;node1(主节…