Modeling Ceramic Drying: Coupling Simscape Thermal with Simulink Moisture Dynamics and Latent Heat
Show older comments
Hi everyone,
I am developing a digital twin of a stoneware (ceramic) drying kiln using Simulink and Simscape. My goal is to simulate a 30-minute drying cycle (Phase 1) where a piece starts at 20% moisture and should reach approximately 15.5%, with a specific temperature profile.
My Current Setup:
- Thermal Domain (Simscape): I’m using a Thermal Mass for the ceramic piece, a Controlled Temperature Source for the dryer air, and Convective Heat Transfer to model the airflow.
- Moisture Dynamics (Simulink): I modeled moisture loss using an Integrator block. The evaporation rate is calculated based on Temperature, Ventilation (convection coefficient), and a 1-D Lookup Table for the Equilibrium Moisture Content (EMC) of the stoneware.
- Physical Coupling (The Challenge): To make the model realistic, I’ve coupled the evaporation rate back into the Simscape thermal domain using a Heat Flow Rate Source to simulate latent heat of vaporization (evaporative cooling). This was necessary because my lab tests showed a much slower temperature rise than a simple thermal model would predict.
The Problem:
While the model is now following the general trend of my lab experiments (reaching approx 50ºC instead of the 60ºC source temperature due to cooling and losses), I am struggling with the calibration of the evaporation gain vs. the convective heat transfer coefficient (h).
My Questions:
- Is using a Heat Flow Rate Source the standard way to represent latent heat cooling in Simscape Thermal, or is there a more native "hygroscopic" block/approach?
- Are there best practices for "tuning" the coupling between a Simulink mathematical signal (evaporation rate) and a Simscape physical port to ensure solver stability?
- How can I better represent the change in Specific Heat (c_p) of the Thermal Mass as the water-to-ceramic ratio changes during the simulation?
Any insights or similar model examples would be greatly appreciated!

Answers (3)
Yifeng Tang
on 25 Mar 2026
0 votes
I think the way you suggested that "using a Heat Flow Rate Source ... to represent latent heat cooling in Simscape Thermal" is reasonable, since you already have a way to calculate the evaporative rate.
Your 2nd question on the coupling & tuning, I'll need to play with the model to give more suggestions, if you could upload it here.
It's possible to make Cp an input to the thermal mass block using a custom component. should be quite easy to implement. You can then use a PS lookup table to supply Cp value based on an input of water ratio.
1 Comment
Yifeng Tang
on 26 Mar 2026
See attached for an exmaple of this idea. It's a custom block of a thermal mass with input port for the Cp value (make sure it's greater than zero). You can do the calculation of Cp externally and send it to this port.
The example sent a step change to the Cp input. With a constant heat flow to the thermal mass, the slope of the temperature changed because of the Cp jump.

Francisco
on 26 Mar 2026
0 votes
Adarsh
on 10 Apr 2026
As per my understanding you are trying to modify the "Thermal Mass" block to take Cp(Specific heat) as an input parameter.
To modify "Thermal Mass" block to take Cp as an input parameter the below steps can be followed:
1) Execute the below command to open the source file of the "Thermal Mass" block
edit('foundation.thermal.elements.mass')
2) Copy its contents and create a new file named "variable_cp_mass.ssc"
3) Modify the component name in copied file to "variable_cp_mass"
4) Add below input code block in the copied file
inputs
Cp_in = {1000, 'J/(kg*K)'};
end
5) Delete the following line of code in the file
sp_heat = {447, 'J/(kg*K)'};
6) Replace all instances of "sp_heat" with "Cp_in" in the copied file
7) Save the file and create a "Simscape Component" block in simulink model and then browse the new Simscape component source file in block parameters to open the new "variable_cp_mass" block
Now the respective logic to calculate the Cp can be implemented in a MATLAB Function block and its output is passed through "Simulink-PS Converter" and then passed to the Cp port of the "variable_cp_mass" block.
For more information on Simscape Component block, the following documentation link can be referred:
I hope this helps!
Categories
Find more on Sources in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!