evaluateHeatFlux

Оцените тепловой поток теплового решения в узловых или произвольных пространственных местоположениях

Описание

пример

[qx,qy] = evaluateHeatFlux(thermalresults,xq,yq) возвращает тепловой поток для тепловой задачи в 2-D точках, заданных в xq и yq. Этот синтаксис действителен как для статических, так и для переходных тепловых моделей.

пример

[qx,qy,qz] = evaluateHeatFlux(thermalresults,xq,yq,zq) возвращает тепловой поток для тепловой задачи в 3-D точках, заданных в xq, yq, и zq. Этот синтаксис действителен как для статических, так и для переходных тепловых моделей.

пример

[___] = evaluateHeatFlux(thermalresults,querypoints) возвращает тепловой поток для тепловой задачи в 2-D или 3-D точках, заданных в querypoints. Этот синтаксис действителен как для статических, так и для переходных тепловых моделей.

пример

[___] = evaluateHeatFlux(___,iT) возвращает тепловой поток для тепловой задачи в указанные в iT моменты времени. Можно задать iT после входных параметров в любом из предыдущих синтаксисов.

Первая размерность qx, qy, и, в 3-D случае, qz соответствует точкам запроса. Второе измерение соответствует временным шагам iT.

пример

[qx,qy] = evaluateHeatFlux(thermalresults) возвращает тепловой поток для 2-D задачи в узловых точках треугольного mesh. Первая размерность qx и qy представляет индексы узлов. Второе измерение представляет временные шаги.

пример

[qx,qy,qz] = evaluateHeatFlux(thermalresults) возвращает тепловой поток для 3-D тепловой задачи в узловых точках четырехгранного mesh. Первая размерность qx, qy, и qz представляет индексы узлов. Второе измерение представляет временные шаги.

Примеры

свернуть все

Для 2-D установившейся тепловой модели оцените тепловой поток в узловых местах и в точках, заданных x и y координаты.

Создайте тепловую модель для статического анализа.

thermalmodel = createpde('thermal');

Создайте геометрию и включите ее в модель.

R1 = [3,4,-1,1,1,-1,1,1,-1,-1]';
g = decsg(R1,'R1',('R1')');
geometryFromEdges(thermalmodel,g);
pdegplot(thermalmodel,'EdgeLabels','on')
xlim([-1.5 1.5])
axis equal

Figure contains an axes. The axes contains 5 objects of type line, text.

Принимая, что эта геометрия представляет железную пластину, теплопроводность 79.5W/(mK).

thermalProperties(thermalmodel,'ThermalConductivity',79.5,'Face',1);

Нанесите постоянную температуру 500 К на нижнюю часть диска (ребро 3). Кроме того, примите, что верхняя часть пластины (ребро 1) изолирована, и нанесите конвекцию на две стороны пластины (ребра 2 и 4).

thermalBC(thermalmodel,'Edge',3,'Temperature',500);
thermalBC(thermalmodel,'Edge',1,'HeatFlux',0);
thermalBC(thermalmodel,'Edge',[2 4], ...
                       'ConvectionCoefficient',25, ...
                       'AmbientTemperature',50);

Создайте сетку геометрии и решите проблему.

generateMesh(thermalmodel);
results = solve(thermalmodel)
results = 
  SteadyStateThermalResults with properties:

    Temperature: [1541x1 double]
     XGradients: [1541x1 double]
     YGradients: [1541x1 double]
     ZGradients: []
           Mesh: [1x1 FEMesh]

Оцените тепловой поток в узловых местах.

[qx,qy] = evaluateHeatFlux(results);

figure
pdeplot(thermalmodel,'FlowData',[qx qy])

Figure contains an axes. The axes contains an object of type quiver.

Создайте сетку, заданную x и y координаты и вычислите тепловой поток в сетку.

v = linspace(-0.5,0.5,11);
[X,Y] = meshgrid(v);

[qx,qy] = evaluateHeatFlux(results,X,Y);

Измените форму qTx и qTy векторы и постройте график результирующего теплового потока.

qx = reshape(qx,size(X));
qy = reshape(qy,size(Y));
figure
quiver(X,Y,qx,qy)

Figure contains an axes. The axes contains an object of type quiver.

Кроме того, сетку можно задать с помощью матрицы точек запроса.

querypoints = [X(:) Y(:)]';
[qx,qy] = evaluateHeatFlux(results,querypoints);

qx = reshape(qx,size(X));
qy = reshape(qy,size(Y));
figure
quiver(X,Y,qx,qy)

Figure contains an axes. The axes contains an object of type quiver.

Для 3-D установившейся тепловой модели оцените тепловой поток в узловых местах и в точках, заданных x, y, и z координаты.

Создайте тепловую модель для статического анализа.

thermalmodel = createpde('thermal');

Создайте следующую 3-D геометрию и включите ее в модель.

importGeometry(thermalmodel,'Block.stl'); 
pdegplot(thermalmodel,'FaceLabels','on','FaceAlpha',0.5)
title('Copper block, cm')
axis equal

Figure contains an axes. The axes with title Copper block, cm contains 3 objects of type quiver, patch, line.

Принимая, что это медный блок, теплопроводность блока приблизительно 4W/(cmK).

thermalProperties(thermalmodel,'ThermalConductivity',4);

Нанесите постоянную температуру 373 К на левую сторону блока (поверхность 1) и постоянную температуру 573 К на правую сторону блока (поверхность 3).

thermalBC(thermalmodel,'Face',1,'Temperature',373);
thermalBC(thermalmodel,'Face',3,'Temperature',573);

Примените граничное условие теплового потока к нижней части блока.

thermalBC(thermalmodel,'Face',4,'HeatFlux',-20);

Создайте сетку геометрии и решите проблему.

generateMesh(thermalmodel);
thermalresults = solve(thermalmodel)
thermalresults = 
  SteadyStateThermalResults with properties:

    Temperature: [12691x1 double]
     XGradients: [12691x1 double]
     YGradients: [12691x1 double]
     ZGradients: [12691x1 double]
           Mesh: [1x1 FEMesh]

Оцените тепловой поток в узловых местах.

[qx,qy,qz] = evaluateHeatFlux(thermalresults);

figure
pdeplot3D(thermalmodel,'FlowData',[qx qy qz])

Создайте сетку, заданную x, y, и z координаты и вычислите тепловой поток в сетку.

[X,Y,Z] = meshgrid(1:26:100,1:6:20,1:11:50);

[qx,qy,qz] = evaluateHeatFlux(thermalresults,X,Y,Z);

Измените форму qx, qy, и qz векторы и постройте график результирующего теплового потока.

qx = reshape(qx,size(X));
qy = reshape(qy,size(Y));
qz = reshape(qz,size(Z));
figure
quiver3(X,Y,Z,qx,qy,qz)

Figure contains an axes. The axes contains an object of type quiver.

Кроме того, сетку можно задать с помощью матрицы точек запроса.

querypoints = [X(:) Y(:) Z(:)]';
[qx,qy,qz] = evaluateHeatFlux(thermalresults,querypoints);

qx = reshape(qx,size(X));
qy = reshape(qy,size(Y));
qz = reshape(qz,size(Z));
figure
quiver3(X,Y,Z,qx,qy,qz)

Figure contains an axes. The axes contains an object of type quiver.

Решите 2-D задачу переходной теплопередачи в квадратной области и вычислите тепловой поток через конвективный контур.

Создайте тепловую модель для этой задачи.

thermalmodel = createpde('thermal','transient');

Создайте геометрию и включите ее в модель.

g = @squareg;
geometryFromEdges(thermalmodel,g);
pdegplot(thermalmodel,'EdgeLabels','on')
xlim([-1.2 1.2])
ylim([-1.2 1.2])
axis equal

Figure contains an axes. The axes contains 5 objects of type line, text.

Присвойте следующие тепловые свойства: теплопроводность 100W/(mC), плотность массы равна 7800kg/m3, и удельная теплота 500J/(kgC).

thermalProperties(thermalmodel,'ThermalConductivity',100, ...
                               'MassDensity',7800, ...
                               'SpecificHeat',500);

Примените изолированные граничные условия к три ребер и условие свободного контура конвекции к правому ребру.

thermalBC(thermalmodel,'Edge',[1 3 4],'HeatFlux',0);
thermalBC(thermalmodel,'Edge',2,...
                       'ConvectionCoefficient',5000, ...
                       'AmbientTemperature',25);

Установите начальные условия: равномерную комнатную температуру в области и более высокую температуру на верхнем крае.

thermalIC(thermalmodel,25);
thermalIC(thermalmodel,100,'Edge',1);

Сгенерируйте mesh и решите проблему с помощью 0:1000:200000 как вектор времени.

generateMesh(thermalmodel);
tlist = 0:1000:200000;
thermalresults = solve(thermalmodel,tlist)
thermalresults = 
  TransientThermalResults with properties:

      Temperature: [1541x201 double]
    SolutionTimes: [1x201 double]
       XGradients: [1541x201 double]
       YGradients: [1541x201 double]
       ZGradients: []
             Mesh: [1x1 FEMesh]

Создайте сетку, заданную x и y координаты и вычислите тепловой поток в сетку.

v = linspace(-1,1,11);
[X,Y] = meshgrid(v);

[qx,qy] = evaluateHeatFlux(thermalresults,X,Y,1:length(tlist));

Изменение формы qx и qyи постройте график полученного теплового потока для 25-го этапа решения.

tlist(25)
ans = 24000
figure
quiver(X(:),Y(:),qx(:,25),qy(:,25));
xlim([-1,1])
axis equal

Figure contains an axes. The axes contains an object of type quiver.

Решите задачу теплопередачи для следующей геометрии 2-D, состоящей из квадрата и алмаза, изготовленного из различных материалов. Вычислите тепловой поток и постройте график как векторное поле.

Создайте тепловую модель для переходного анализа.

thermalmodel = createpde('thermal','transient');

Создайте геометрию и включите ее в модель.

SQ1 = [3; 4; 0; 3; 3; 0; 0; 0; 3; 3];
D1 = [2; 4; 0.5; 1.5; 2.5; 1.5; 1.5; 0.5; 1.5; 2.5];
gd = [SQ1 D1];
sf = 'SQ1+D1';
ns = char('SQ1','D1');
ns = ns';
dl = decsg(gd,sf,ns);
geometryFromEdges(thermalmodel,dl);
pdegplot(thermalmodel,'EdgeLabels','on','FaceLabels','on')
xlim([-1.5 4.5])
ylim([-0.5 3.5])
axis equal

Figure contains an axes. The axes contains 11 objects of type line, text.

Для квадратной области присвойте следующие тепловые свойства: теплопроводность 10W/(mC), плотность массы равна 2kg/m3, и удельная теплота 0.1J/(kgC).

thermalProperties(thermalmodel,'ThermalConductivity',10, ...
                               'MassDensity',2, ...
                               'SpecificHeat',0.1, ...
                               'Face',1);

Для алмазообразной области присвойте следующие тепловые свойства: теплопроводность 2W/(mC), плотность массы равна 1kg/m3, и удельная теплота 0.1J/(kgC).

thermalProperties(thermalmodel,'ThermalConductivity',2, ...
                               'MassDensity',1, ...
                               'SpecificHeat',0.1, ...
                               'Face',2);

Предположим, что алмазообразная область является источником тепла с плотностью 4W/m3.

internalHeatSource(thermalmodel,4,'Face',2);

Применить постоянную температуру 0C по сторонам квадратной пластины.

thermalBC(thermalmodel,'Temperature',0,'Edge',[1 2 7 8]);

Установите начальную температуру равной 0C.

thermalIC(thermalmodel,0);

Создайте сетку геометрии и решите проблему.

generateMesh(thermalmodel);

Динамика для этой задачи очень быстрая: температура достигает устойчивого состояния примерно за 0,1 секунды. Чтобы захватить интересную часть динамики, установите время решения на logspace(-2,-1,10). Это дает 10 логарифмических интервалов времени решения между 0,01 и 0,1. Решить уравнение.

tlist = logspace(-2,-1,10);
thermalresults = solve(thermalmodel,tlist);
temp = thermalresults.Temperature;

Вычислите плотность теплового потока. Постройте график решения с помощью изотермических линий с помощью контурного графика и постройте график векторного поля теплового потока со стрелами.

[qTx,qTy] = evaluateHeatFlux(thermalresults);

figure
pdeplot(thermalmodel,'XYData',temp(:,10),'Contour','on', ...
                     'FlowData',[qTx(:,10) qTy(:,10)], ...
                     'ColorMap','hot')

Figure contains an axes. The axes contains 13 objects of type patch, line, quiver.

Входные параметры

свернуть все

Решение тепловой задачи, заданное как SteadyStateThermalResults объект или TransientThermalResults объект. Создание thermalresults использование solve функция.

Пример: thermalresults = solve(thermalmodel)

x -согласованные точки запроса, заданные как действительный массив .evaluateHeatFlux вычисляет тепловой поток в 2-D координатных точках [xq(i) yq(i)] или в 3-D координатных точках [xq(i) yq(i) zq(i)]. Итак xq, yq, и (при наличии) zq должно иметь одинаковое количество записей.

evaluateHeatFlux преобразует точки запроса в векторы-столбцы xq(:), yq(:), и (при наличии) zq(:). Он возвращает тепловой поток в форме вектора-столбца того же размера. Чтобы убедиться, что размерности возвращенного решения соответствуют размерностям исходных точек запроса, используйте reshape. Для примера используйте qx = reshape(qx,size(xq)).

Типы данных: double

y -согласованные точки запроса, заданные как действительный массив .evaluateHeatFlux вычисляет тепловой поток в 2-D координатных точках [xq(i) yq(i)] или в 3-D координатных точках [xq(i) yq(i) zq(i)]. Итак xq, yq, и (при наличии) zq должно иметь одинаковое количество записей.

evaluateHeatFlux преобразует точки запроса в векторы-столбцы xq(:), yq(:), и (при наличии) zq(:). Он возвращает тепловой поток в форме вектора-столбца того же размера. Чтобы убедиться, что размерности возвращенного решения соответствуют размерностям исходных точек запроса, используйте reshape. Для примера используйте qy = reshape(qy,size(yq)).

Типы данных: double

z -согласованные точки запроса, заданные как действительный массив .evaluateHeatFlux вычисляет тепловой поток в 3-D координатных точках [xq(i) yq(i) zq(i)]. Итак xq, yq, и zq должно иметь одинаковое количество записей.

evaluateHeatFlux преобразует точки запроса в векторы-столбцы xq(:), yq(:), и (при наличии) zq(:). Он возвращает тепловой поток в форме вектора-столбца того же размера. Чтобы убедиться, что размерности возвращенного решения соответствуют размерностям исходных точек запроса, используйте reshape. Для примера используйте qz = reshape(qz,size(zq)).

Типы данных: double

Точки запроса, заданные как действительная матрица с двумя строками для 2-D геометрии или тремя строками для 3-D геометрии. evaluateHeatFlux вычисляет тепловой поток в координатных точках querypoints(:,i), поэтому каждый столбец querypoints содержит только одну 2-D или 3-D точку запроса.

Пример: Для 2-D геометрии querypoints = [0.5 0.5 0.75 0.75; 1 2 0 0.5]

Типы данных: double

Индексы времени, заданные как вектор положительных целых чисел. Каждая запись в iT задает временной индекс.

Пример: iT = 1:5:21 задает каждый пятый временной шаг до 21.

Типы данных: double

Выходные аргументы

свернуть все

x -компонент теплового потока, возвращенный как массив. Первое измерение массива представляет индекс узла. Второе измерение массива представляет временной шаг.

Для точек запроса, которые находятся вне геометрии, qx = NaN.

y -компонент теплового потока, возвращенный как массив. Первое измерение массива представляет индекс узла. Второе измерение массива представляет временной шаг.

Для точек запроса, которые находятся вне геометрии, qy = NaN.

z -компонент теплового потока, возвращенный как массив. Первое измерение массива представляет индекс узла. Второе измерение массива представляет временной шаг.

Для точек запроса, которые находятся вне геометрии, qz = NaN.

Введенный в R2017a