exponenta event banner

interpolateTemperature

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

Описание

пример

Tintrp = interpolateTemperature(thermalresults,xq,yq) возвращает интерполированные значения температуры в точках 2-D, указанных в xq и yq. Этот синтаксис применим как для стационарных, так и для нестационарных тепловых моделей.

пример

Tintrp = interpolateTemperature(thermalresults,xq,yq,zq) возвращает интерполированные значения температуры в точках 3-D, указанных в xq, yq, и zq. Этот синтаксис применим как для стационарных, так и для нестационарных тепловых моделей.

пример

Tintrp = interpolateTemperature(thermalresults,querypoints) возвращает интерполированные значения температуры в точках в querypoints. Этот синтаксис применим как для стационарных, так и для нестационарных тепловых моделей.

пример

Tintrp = interpolateTemperature(___,iT) возвращает интерполированные значения температуры для нестационарной тепловой модели в моменты времени iT.

Примеры

свернуть все

Создание тепловой модели для стационарного анализа.

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,5 Вт/( m * K). Поскольку это стационарная модель, нет необходимости назначать плотность массы или удельные значения тепла.

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,'XYData',results.Temperature,...
                     'Contour','on','ColorMap','hot');

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

Интерполяция результирующих температур в сетку, охватывающую центральную часть геометрии, для x и y от -0.5 кому 0.5.

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

Tintrp = interpolateTemperature(results,X,Y);

Изменить форму Tintrp векторно и построить график результирующих температур.

Tintrp = reshape(Tintrp,size(X));

figure
contourf(X,Y,Tintrp)
colormap(hot)
colorbar

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

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

querypoints = [X(:),Y(:)]';
Tintrp = interpolateTemperature(results,querypoints);

Создание тепловой модели для стационарного анализа.

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.

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

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и так далее. Например, постройте график температур в узловых местах.

figure;
pdeplot3D(thermalmodel,'ColorMapData',thermalresults.Temperature)

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

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

Tintrp = interpolateTemperature(thermalresults,X,Y,Z);

Создание графика горизонталей для фиксированных значений y координата.

figure

Tintrp = reshape(Tintrp,size(X));

contourslice(X,Y,Z,Tintrp,[],1:6:20,[])
xlabel('x')
ylabel('y')
zlabel('z')
xlim([1,100])
ylim([1,20])
zlim([1,50])
axis equal
view(-50,22)
colorbar

Figure contains an axes. The axes contains 24 objects of type patch.

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

querypoints = [X(:),Y(:),Z(:)]';
Tintrp = interpolateTemperature(thermalresults,querypoints);

Создание графика горизонталей для четырех фиксированных значений z координата.

figure

Tintrp = reshape(Tintrp,size(X));

contourslice(X,Y,Z,Tintrp,[],[],1:7:50)
xlabel('x')
ylabel('y')
zlabel('z')
xlim([1,100])
ylim([1,20])
zlim([1,50])
axis equal
view(-50,22)
colorbar

Figure contains an axes. The axes contains 54 objects of type patch.

Решите проблему 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.

Назначьте следующие тепловые свойства:

  • Теплопроводность 100 Вт/( м * C)

  • Массовая плотность 7800 кг/м ^ 3

  • Удельная теплота составляет 500 Дж/( кг * C)

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

Создание сетки и решение проблемы с помощью 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));

Tintrp = interpolateTemperature(thermalresults,X,Y,1:length(tlist));

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

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

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, заданные как вещественный массив. interpolateTemperature оценивает температуры в 2-D координатных точках [xq(i),yq(i)] или в точках координат 3-D [xq(i),yq(i),zq(i)]. Так xq, yq, и (при наличии) zq должно иметь одинаковое количество записей.

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

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

точки запроса координат y, заданные как вещественный массив. interpolateTemperature оценивает температуры в 2-D координатных точках [xq(i),yq(i)] или в точках координат 3-D [xq(i),yq(i),zq(i)]. Так xq, yq, и (при наличии) zq должно иметь одинаковое количество записей. Внутри, interpolateTemperature преобразует точки запроса в вектор столбца yq(:).

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

точки запроса координат z, заданные как вещественный массив. interpolateTemperature оценивает температуры в 3-D координатных точках [xq(i),yq(i),zq(i)]. Так xq, yq, и zq должно иметь одинаковое количество записей. Внутри, interpolateTemperature преобразует точки запроса в вектор столбца zq(:).

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

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

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

свернуть все

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

Представлен в R2017a