В этом примере показано, как решить для распределения тепла в блоке с полостью.
Рассмотрите блок, содержащий прямоугольную трещину или полость. Левая сторона блока нагревается к 100 градусам по Цельсию. В правой стороне блока, тепловых потоков от блока до окружающего воздуха на постоянном уровне, например . Все другие контуры изолируются. Температура в блоке в то время начала 0 градусов. Цель состоит в том, чтобы смоделировать распределение тепла в течение первых пяти секунд.
Первый шаг в решении задачи теплопередачи должен создать тепловую аналитическую модель. Это - контейнер, который содержит геометрию, тепловые свойства материала, внутренние источники тепла, температуру на контурах, потоках тепла через контуры, mesh и начальные условия.
thermalmodel = createpde('thermal','transient');
Добавьте геометрию блока в тепловую модель при помощи geometryFromEdges
функция. Файл описания геометрии для этой проблемы называется crackg.m
.
geometryFromEdges(thermalmodel,@crackg);
Постройте геометрию, отобразив метки ребра.
pdegplot(thermalmodel,'EdgeLabels','on') ylim([-1,1]) axis equal
Задайте теплопроводность, массовую плотность и удельную теплоемкость материала.
thermalProperties(thermalmodel,'ThermalConductivity',1,... 'MassDensity',1,... 'SpecificHeat',1);
Задайте температуру на левом крае как 20
, и постоянный тепловой поток к внешнему виду через правый край как -10
. Тулбокс использует значение по умолчанию, изолирующее граничное условие для всех других контуров.
thermalBC(thermalmodel,'Edge',6,'Temperature',20); thermalBC(thermalmodel,'Edge',1,'HeatFlux',-10);
Установите начальное значение 0
для температуры.
thermalIC(thermalmodel,0);
Создайте и постройте mesh.
generateMesh(thermalmodel);
figure
pdemesh(thermalmodel)
title('Mesh with Quadratic Triangular Elements')
Установите времена решения быть от 0 до 5 секунд с шагом 1/2.
tlist = 0:0.5:5;
Используйте solve
функция, чтобы вычислить решение.
thermalresults = solve(thermalmodel,tlist)
thermalresults = TransientThermalResults with properties: Temperature: [1320x11 double] SolutionTimes: [0 0.5000 1 1.5000 2 2.5000 3 3.5000 4 4.5000 5] XGradients: [1320x11 double] YGradients: [1320x11 double] ZGradients: [] Mesh: [1x1 FEMesh]
Вычислите плотность потока тепла.
[qx,qy] = evaluateHeatFlux(thermalresults);
Постройте решение на итоговом временном шаге, t = 5,0 секунд, с изотермическими линиями с помощью контурного графика, и постройте поток тепла векторное поле с помощью стрел.
pdeplot(thermalmodel,'XYData',thermalresults.Temperature(:,end), ... 'Contour','on',... 'FlowData',[qx(:,end),qy(:,end)], ... 'ColorMap','hot')