evaluateTemperatureGradient

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

Описание

пример

[gradTx,gradTy] = evaluateTemperatureGradient(thermalresults,xq,yq) возвращает интерполированные значения градиентов температуры решения тепловой модели thermalresults в 2-D точках, указанных в xq и yq. Этот синтаксис действителен как для статических, так и для переходных тепловых моделей.

пример

[gradTx,gradTy,gradTz] = evaluateTemperatureGradient(thermalresults,xq,yq,zq) возвращает интерполированные градиенты температуры в точках 3-D, заданных в xq, yq, и zq. Этот синтаксис действителен как для статических, так и для переходных тепловых моделей.

пример

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

пример

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

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

Примеры

свернуть все

Для 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);

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

thermalBC(thermalmodel,'Edge',3,'Temperature',300);
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]

Решатель находит температуры и градиенты температуры в узловых местоположениях. Для доступа к этим значениям используйте results.Temperature, results.XGradientsи так далее. Для примера постройте график градиентов температуры в узловых местах.

figure;
pdeplot(thermalmodel,'FlowData',[results.XGradients results.YGradients]);

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);

[gradTx,gradTy] = evaluateTemperatureGradient(results,X,Y);

Измените форму gradTx и gradTy векторы и постройте график получившихся градиентов температуры.

gradTx = reshape(gradTx,size(X));
gradTy = reshape(gradTy,size(Y));
figure
quiver(X,Y,gradTx,gradTy)

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

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

querypoints = [X(:) Y(:)]';
[gradTx,gradTy] = evaluateTemperatureGradient(results,querypoints);

gradTx = reshape(gradTx,size(X));
gradTy = reshape(gradTy,size(Y));
figure
quiver(X,Y,gradTx,gradTy)

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 К на правую сторону блока.

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]

Решатель находит значения температур и градиентов температуры в узловых местоположениях. Для доступа к этим значениям используйте results.Temperature, results.XGradientsи так далее.

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

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

[gradTx,gradTy,gradTz] = evaluateTemperatureGradient(thermalresults,X,Y,Z);

Измените форму gradTx, gradTy, и gradTz векторы и постройте график получившихся градиентов температуры.

gradTx = reshape(gradTx,size(X));
gradTy = reshape(gradTy,size(Y));
gradTz = reshape(gradTz,size(Z));

figure
quiver3(X,Y,Z,gradTx,gradTy,gradTz)
axis equal
xlabel('x')
ylabel('y')
zlabel('z')

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

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

querypoints = [X(:) Y(:) Z(:)]';
[gradTx,gradTy,gradTz] = evaluateTemperatureGradient(thermalresults,querypoints);

gradTx = reshape(gradTx,size(X));
gradTy = reshape(gradTy,size(Y));
gradTz = reshape(gradTz,size(Z));

figure
quiver3(X,Y,Z,gradTx,gradTy,gradTz)
axis equal
xlabel('x')
ylabel('y')
zlabel('z')

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',4);

Сгенерируйте 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 = -1:0.1:1;
Y = ones(size(X));

[gradTx,gradTy] = evaluateTemperatureGradient(thermalresults,X,Y,1:length(tlist));

Постройте график интерполированного компонента градиента gradTx вдоль x ось для следующих значений из временного интервала tlist.

figure
t = [51:50:201];
for i = t
  p(i) = plot(X,gradTx(:,i),'DisplayName', strcat('t=', num2str(tlist(i))));
  hold on
end
legend(p(t))
xlabel('x')
ylabel('gradTx')

Figure contains an axes. The axes contains 4 objects of type line. These objects represent t=50000, t=100000, t=150000, t=200000.

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

Точки запроса, заданные как действительная матрица с двумя строками для 2-D геометрии или тремя строками для 3-D геометрии. evaluateTemperatureGradient вычисляет градиент температуры в координатных точках 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 -компонент градиента температуры, возвращенный как матрица. Для точек запроса, которые находятся вне геометрии, gradTx = NaN.

y -компонент градиента температуры, возвращенный как матрица. Для точек запроса, которые находятся вне геометрии, gradTy = NaN.

z -компонент градиента температуры, возвращенный как матрица. Для точек запроса, которые находятся вне геометрии, gradTz = NaN.

Введенный в R2017a