Modeling Ceramic Drying: Coupling Simscape Thermal with Simulink Moisture Dynamics and Latent Heat

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:
  1. 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.
  2. 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.
  3. 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)

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

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.

Sign in to comment.

Thank you for the feedback! It's reassuring to know that using the Heat Flow Rate Source for latent heat is a sound approach.
Regarding the Specific Heat (C_p), I would love to implement a custom component. Since the water content is significant, the thermal inertia definitely changes as the piece dries. I'm thinking of a mixture rule like:
C_{p,total} = \frac{m_{dry} \cdot C_{p,dry} + m_{water} \cdot C_{p,water}}{m_{dry} + m_{water}}
Could you provide more details or a simple example of how to modify the standard Thermal Mass block using Simscape Language to expose C_p as a Physical Signal (PS) input port?
Also, I am preparing a simplified version of my model to upload here shortly. I would appreciate your insights on the coupling and tuning of the evaporation gain once you have the file.
Looking forward to your guidance on the custom component!
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!

Products

Release

R2025b

Asked:

on 20 Mar 2026

Answered:

on 10 Apr 2026

Community Treasure Hunt

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

Start Hunting!