Main Content


Modal thermal solution

Since R2022a


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


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


expand all

This property is read-only.

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

Data Types: double

This property is read-only.

Eigenvector matrix, returned as a matrix.

Data Types: double

This property is read-only.

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

Data Types: double

This property is read-only.

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

Data Types: string

This property is read-only.

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


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);
xlim([-1.5 4.5])
ylim([-0.5 3.5])
axis equal

For the square region, assign these thermal properties:

  • Thermal conductivity is 10W/(mC).

  • Mass density is 2kg/m3.

  • Specific heat is 0.1J/(kgC).

thermalProperties(thermalmodel,"ThermalConductivity",10, ...
                               "MassDensity",2, ...
                               "SpecificHeat",0.1, ...

For the diamond region, assign these thermal properties:

  • Thermal conductivity is 2W/(mC).

  • Mass density is 1kg/m3.

  • Specific heat is 0.1J/(kgC).

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

Assume that the diamond-shaped region is a heat source with a density of 4W/m2.


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.


Generate the mesh.


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: [1461x164 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", ...

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.


Plot the geometry, displaying edge labels.

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, ...

Set the temperature on the right edge to 100.


Set an initial value of 0 for the temperature.


Generate a mesh.


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
    results = solve(thermalmodel,tlist);
    Tmatrix = [Tmatrix,results.Temperature(:,snapShotIDs)];

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: [1529x6 double]
    SnapshotsAverage: [1529x1 double]
            ModeType: "PODModes"
                Mesh: [1x1 FEMesh]

Version History

Introduced in R2022a