Clear Filters
Clear Filters

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

3 views (last 30 days)
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

Sahas
Sahas on 22 Aug 2024
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
Sahas
Sahas on 22 Aug 2024
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!
John McGrath
John McGrath on 22 Aug 2024
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

Community Treasure Hunt

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

Start Hunting!