# ModalThermalResults

Modal thermal solution

## Description

A ModalThermalResults object contains the eigenvalues and eigenvector matrix of a thermal model, and average of snapshots used for proper orthogonal decomposition (POD).

## Creation

Solve a modal thermal problem using the solve function. This function returns a modal thermal solution as a ModalThermalResults object.

## Properties

expand all

Eigenvalues of a thermal model, returned as a column vector.

Data Types: double

Eigenvector matrix, returned as a matrix.

Data Types: double

Average of snapshots used for POD, returned as a column vector.

Data Types: double

Type of modes, returned as "EigenModes" or "PODModes".

Data Types: string

Finite element mesh, returned as an FEMesh object. For details, see FEMesh Properties.

## Examples

collapse all

Solve a transient thermal problem by first obtaining mode shapes for a particular decay range and then using the modal superposition method.

Modal Decomposition

First, create a modal thermal model.

thermalmodel = createpde("thermal","modal");

Create the geometry and include it in the model.

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

For the square region, assign these thermal properties:

• Thermal conductivity is $10\text{\hspace{0.17em}}\mathrm{W}/\left(\mathrm{m}{\cdot }^{\circ }\mathrm{C}\right)$.

• Mass density is $2\text{\hspace{0.17em}}\mathrm{kg}/{\mathrm{m}}^{3}$.

• Specific heat is $0.1\text{\hspace{0.17em}}\mathrm{J}/\left({\mathrm{kg}\cdot }^{\circ }\mathrm{C}\right)$.

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

For the diamond region, assign these thermal properties:

• Thermal conductivity is $2\text{\hspace{0.17em}}\mathrm{W}/\left(\mathrm{m}{\cdot }^{\circ }\mathrm{C}\right)$.

• Mass density is $1\text{\hspace{0.17em}}\mathrm{kg}/{\mathrm{m}}^{3}$.

• Specific heat is $0.1\text{\hspace{0.17em}}\mathrm{J}/\left({\mathrm{kg}\cdot }^{\circ }\mathrm{C}\right)$.

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

Assume that the diamond-shaped region is a heat source with a density of $4\text{\hspace{0.17em}}\mathrm{W}/{\mathrm{m}}^{2}$.

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

Apply a constant temperature of 0 °C to the sides of the square plate.

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

Set the initial temperature to 0 °C.

thermalIC(thermalmodel,0);

Generate the mesh.

generateMesh(thermalmodel);

Compute eigenmodes of the thermal model in the decay range [100,10000] ${s}^{-1}$.

RModal = solve(thermalmodel,"DecayRange",[100,10000])
RModal =
ModalThermalResults with properties:

DecayRates: [164x1 double]
ModeShapes: [1481x164 double]
ModeType: "EigenModes"
Mesh: [1x1 FEMesh]

Transient Analysis

Knowing the mode shapes, you can now use the modal superposition method to solve the transient thermal problem. First, switch the thermal model analysis type to transient.

thermalmodel.AnalysisType = "transient";

The dynamics for this problem are very fast. The temperature reaches a steady state in about 0.1 second. To capture the most active part of the dynamics, set the solution time to logspace(-2,-1,100). This command returns 100 logarithmically spaced solution times between 0.01 and 0.1.

tlist = logspace(-2,-1,10);

Solve the equation.

Rtransient = solve(thermalmodel,tlist,"ModalResults",RModal);

Plot the solution with isothermal lines by using a contour plot.

T = Rtransient.Temperature;
pdeplot(thermalmodel,"XYData",T(:,end), ...
"Contour","on", ...
"ColorMap","hot")

Obtain POD modes of a linear thermal model using several instances of the transient solution (snapshots).

Create a transient thermal model.

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

Create a unit square geometry and include it in the model.

geometryFromEdges(thermalmodel,@squareg);

Plot the geometry, displaying edge labels.

pdegplot(thermalmodel,"EdgeLabels","on")
xlim([-1.1 1.1])
ylim([-1.1 1.1])

Specify the thermal conductivity, mass density, and specific heat of the material.

thermalProperties(thermalmodel,"ThermalConductivity",400, ...
"MassDensity",1300, ...
"SpecificHeat",600);

Set the temperature on the right edge to 100.

thermalBC(thermalmodel,"Edge",2,"Temperature",100);

Set an initial value of 0 for the temperature.

thermalIC(thermalmodel,0);

Generate a mesh.

generateMesh(thermalmodel);

Solve the model for three different values of heat source and collect snapshots.

tlist = 0:10:600;
snapShotIDs = [1:10 59 60 61];
Tmatrix = [];

heatVariation = [10000 15000 20000];
for q = heatVariation
internalHeatSource(thermalmodel,q);
results = solve(thermalmodel,tlist);
Tmatrix = [Tmatrix,results.Temperature(:,snapShotIDs)];
end

Switch the thermal model analysis type to modal.

thermalmodel.AnalysisType = "modal";

Compute the POD modes.

RModal = solve(thermalmodel,"Snapshots",Tmatrix)
RModal =
ModalThermalResults with properties:

DecayRates: [6x1 double]
ModeShapes: [1541x6 double]
SnapshotsAverage: [1541x1 double]
ModeType: "PODModes"
Mesh: [1x1 FEMesh]

## Version History

Introduced in R2022a