How to display temperature at location x,y in command window for 2D heat transfer

Below is code that produces the steady state temperature field in a square with consatnt temperature bounday conditions. I want to add code that would define the temperature at any location x,y of interest and display it in the command window. For example, what is the temperature at x= -10, y= 0?
thermalmodel = createpde("thermal","steadystate");
R2= [3,4,-15,15,15,-15,-15,-15,15,15]';
geom=[R2]
g=decsg(geom)
model= createpde
geometryFromEdges(thermalmodel,g);
pdegplot(thermalmodel,"EdgeLabels","on")
xlim([-20 20])
axis equal
thermalProperties(thermalmodel,"ThermalConductivity",1);
thermalBC(thermalmodel,"Edge",1,"Temperature",100);
thermalBC(thermalmodel,"Edge",2,"Temperature",100);
thermalBC(thermalmodel,"Edge",3,"Temperature",100);
thermalBC(thermalmodel,"Edge",4,"Temperature",400);
generateMesh(thermalmodel);
figure
pdemesh(thermalmodel)
title("Mesh with Quadratic Triangular Elements")
thermalresults = solve(thermalmodel)
title("Temperature In The Plate, Steady State Solution")
xlabel("X-coordinate, meters")
ylabel("Y-coordinate, meters")
axis equal

 Accepted Answer

As per my understanding, you would like to get the temperature at any point of interest in the steady state thermal model and display it in the command window.
This can be accomplished by using MATLAB's "interpolateTemperature" function. Below is a version of the code that meets the requirement.
%Previous code
thermalmodel = createpde("thermal","steadystate");
R2= [3,4,-15,15,15,-15,-15,-15,15,15]';
geom=[R2]
g=decsg(geom)
model= createpde
geometryFromEdges(thermalmodel,g);
pdegplot(thermalmodel,"EdgeLabels","on")
xlim([-20 20])
axis equal
thermalProperties(thermalmodel,"ThermalConductivity",1);
thermalBC(thermalmodel,"Edge",1,"Temperature",100);
thermalBC(thermalmodel,"Edge",2,"Temperature",100);
thermalBC(thermalmodel,"Edge",3,"Temperature",100);
thermalBC(thermalmodel,"Edge",4,"Temperature",400);
generateMesh(thermalmodel);
figure
pdemesh(thermalmodel)
title("Mesh with Quadratic Triangular Elements")
thermalresults = solve(thermalmodel)
pdeplot(thermalresults.Mesh,XYData=thermalresults.Temperature,ColorMap="jet")
title("Temperature In The Plate, Steady State Solution")
xlabel("X-coordinate, meters")
ylabel("Y-coordinate, meters")
axis equal
%%%%% Code for getting the temperature at the given point %%%%%
% Define the point of interest
x = -10;
y = 0;
% Interpolate the temperature at the point of interest
temperatureAtPoint = interpolateTemperature(thermalresults, x, y);
% Display the temperature in the Command Window
fprintf('The temperature at (x = %.1f, y = %.1f) is %.2f degrees.\n', x, y, temperatureAtPoint);
You can also run the following command in the MATLAB Command Window to get the temperature at the required point:
>> interpolateTemperature(thermalresults, -10, 0)
For further information on MATLAB's "interpolateTemperature" function, refer to the following MathWorks documentation link:
I hope this is beneficial!

4 Comments

Hi Sahas,
This is wonderful. Thank you so much.
john
I tried your suggestion for a slightly more complicated problem. It involves transient case with offset rectangles. It didn't work. The original code is below. I presume that the commands have to be modified a bit for the transient case since time information would need to be inlcuded. Can you help with this one? Suppose i wanted to know the temperature at (2,5) and (5,4) after a time, t.
Thanks again
john
thermalmodel = createpde("thermal","transient");
R1= [3,4,0,3,3,0,0,0,10,10]';
R2= [3,4,3,6,6,3,-5,-5,5,5]';
gd= [R1 R2];
sf= 'R1+R2';
ns = char('R1','R2');
ns = ns';
dl = decsg(gd,sf,ns);
geometryFromEdges(thermalmodel,dl);
pdegplot(thermalmodel,"EdgeLabels","on","FaceLabels","on")
xlim([-1 7])
ylim([-6 11])
axis equal
thermalProperties(thermalmodel,"ThermalConductivity",1,...
"MassDensity",1,...
"SpecificHeat",1);
thermalProperties(thermalmodel,"ThermalConductivity",10,...
"MassDensity",10,...
"SpecificHeat",10);
thermalBC(thermalmodel,"Edge",3,"HeatFlux",1000);
%thermalBC(thermalmodel,"Edge",3,"Temperature",100);
thermalBC(thermalmodel,"Edge",5,"Temperature",20);
thermalIC(thermalmodel,20);
generateMesh(thermalmodel);
figure
pdemesh(thermalmodel)
title("Mesh with Quadratic Triangular Elements")
% tlist = 0:0.01:0.1;
tlist = 0:5:50;
thermalresults = solve(thermalmodel,tlist)
pdeplot(thermalmodel,"XYData",thermalresults.Temperature(:,end), ...
"Contour","on",...
"ColorMap","jet")
To incorporate the temporal domain, we can specify the time at which to evaluate the temperature in the "interpolateTemperature" function as given below.
%Previous code
thermalmodel = createpde("thermal","transient");
R1= [3,4,0,3,3,0,0,0,10,10]';
R2= [3,4,3,6,6,3,-5,-5,5,5]';
gd= [R1 R2];
sf= 'R1+R2';
ns = char('R1','R2');
ns = ns';
dl = decsg(gd,sf,ns);
geometryFromEdges(thermalmodel,dl);
pdegplot(thermalmodel,"EdgeLabels","on","FaceLabels","on")
xlim([-1 7])
ylim([-6 11])
axis equal
thermalProperties(thermalmodel,"ThermalConductivity",1,...
"MassDensity",1,...
"SpecificHeat",1);
thermalProperties(thermalmodel,"ThermalConductivity",10,...
"MassDensity",10,...
"SpecificHeat",10);
thermalBC(thermalmodel,"Edge",3,"HeatFlux",1000);
%thermalBC(thermalmodel,"Edge",3,"Temperature",100);
thermalBC(thermalmodel,"Edge",5,"Temperature",20);
thermalIC(thermalmodel,20);
generateMesh(thermalmodel);
figure
pdemesh(thermalmodel)
title("Mesh with Quadratic Triangular Elements")
% tlist = 0:0.01:0.1;
tlist = 0:5:50;
thermalresults = solve(thermalmodel,tlist)
pdeplot(thermalmodel,"XYData",thermalresults.Temperature(:,end), ...
"Contour","on",...
"ColorMap","jet")
%%%%% Including temporal interpolation %%%%%
% Define the points of interest
pointsOfInterest = [2, 5;
5, 4];
% Specify the time of interest
timeOfInterest = 50;
% Find the index of the time step closest to the desired time
[~, timeIndex] = min(abs(tlist - timeOfInterest));
% Interpolate the temperature at the points of interest
temperatures = interpolateTemperature(thermalresults, pointsOfInterest(:,1), pointsOfInterest(:,2), timeIndex);
% Display
for i = 1:size(pointsOfInterest, 1)
fprintf('The temperature at (x = %.1f, y = %.1f) at t = %.1f is %.2f degrees.\n', ...
pointsOfInterest(i, 1), pointsOfInterest(i, 2), tlist(timeIndex), temperatures(i));
end
Refer to the following example given in the MathWorks documentation of a transient "interpolateTemperature" function: https://www.mathworks.com/help/pde/ug/pde.steadystatethermalresults.interpolatetemperature.html
I hope this is also helpful!
This is fantastic. Thank you so much Sahas. I have wasted a lot of time tryimng to figure this out.
john

Sign in to comment.

More Answers (0)

Products

Release

R2024a

Asked:

on 22 Aug 2024

Commented:

on 22 Aug 2024

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!