Skip to content
HeatSystemTest.md

HeatSystemTest ​

Models a thermal system with a fixed temperature source heating a heat capacitor via a conductor; serves as a test component.

This component simulates the transient thermal behavior of a heat capacitor (mass) connected to an ideal fixed temperature source (source) through a thermal conductor (conductor). It is designed as a test component for the HeatCapacitor, FixedTemperature, and ThermalConductor base models. The heat capacitor is characterized by its thermal capacitance C and an initial temperature T0. The fixed temperature source maintains a constant temperature T. Heat transfer between the source and the capacitor is facilitated by the thermal conductor, which has a thermal conductance G. The temperature of the heat capacitor, denoted mass.T, changes over time according to the first-order differential equation:

Câ‹…d(mass.T)dt=Qflow

where Q_{flow} represents the heat flow rate into the capacitor. This heat flow is determined by the temperature difference across the conductor and its conductance:

Qflow=G⋅(Tsource−mass.T)

In this component, T_{source} is the temperature T from the source subcomponent. Consequently, mass.T will asymptotically approach T as the simulation progresses.

Usage ​

ThermalComponents.HeatSystemTest(T=10.0, T0=-10.0, C=10.0, G=10.0)

Parameters: ​

NameDescriptionUnitsDefault value
TTemperature of the fixed temperature source–10
T0Initial temperature of the heat capacitor–-10
CThermal capacitance of the heat capacitor–10
GThermal conductance of the conductor–10

Behavior ​

julia
using ThermalComponents #hide
using ModelingToolkit #hide
@variables T #hide
@variables T0 #hide
@variables C #hide
@variables G #hide
@named sys = ThermalComponents.HeatSystemTest(T=T, T0=T0, C=C, G=G) #hide
full_equations(sys) #hide
<< @example-block not executed in draft mode >>

Source ​

dyad
"""
Models a thermal system with a fixed temperature source heating a heat capacitor via a conductor; serves as a test component.

This component simulates the transient thermal behavior of a heat capacitor (`mass`)
connected to an ideal fixed temperature source (`source`) through a thermal conductor (`conductor`).
It is designed as a test component for the `HeatCapacitor`, `FixedTemperature`, and `ThermalConductor` base models.
The heat capacitor is characterized by its thermal capacitance `C` and an initial temperature `T0`.
The fixed temperature source maintains a constant temperature `T`. Heat transfer between the
source and the capacitor is facilitated by the thermal conductor, which has a thermal conductance `G`.
The temperature of the heat capacitor, denoted `mass.T`, changes over time according to the
first-order differential equation:

math C \cdot \frac{d(mass.T)}{dt} = Q_

where `Q_{flow}` represents the heat flow rate into the capacitor. This heat flow is
determined by the temperature difference across the conductor and its conductance:

math Q_{flow} = G \cdot (T_{source} - mass.T)

In this component, `T_{source}` is the temperature `T` from the `source` subcomponent.
Consequently, `mass.T` will asymptotically approach `T` as the simulation progresses.
"""
component HeatSystemTest
  "Heat capacitor subcomponent representing the thermal mass"
  mass = HeatCapacitor(C = C, T0 = T0) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 570, "y1": 320, "x2": 670, "y2": 420, "rot": 0}
      },
      "tags": []
    }
  }
  "Fixed temperature source subcomponent"
  source = FixedTemperature(T = T) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 290, "y1": 450, "x2": 390, "y2": 550, "rot": 0}
      },
      "tags": []
    }
  }
  "Thermal conductor subcomponent facilitating heat flow"
  conductor = ThermalConductor(G = G) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 450, "y1": 450, "x2": 550, "y2": 550, "rot": 0}
      },
      "tags": []
    }
  }
  "Temperature of the fixed temperature source"
  parameter T::Real = 10.0
  "Initial temperature of the heat capacitor"
  parameter T0::Real = -10.0
  "Thermal capacitance of the heat capacitor"
  parameter C::Real = 10.0
  "Thermal conductance of the conductor"
  parameter G::Real = 10.0
relations
  connect(source.node, conductor.node_a) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(conductor.node_b, mass.node) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 620, "y": 500}], "E": 2}],
      "renderStyle": "standard"
    }
  }
metadata {
  "Dyad": {
    "icons": {"default": "dyad://ThermalComponents/Example.svg"},
    "tests": {
      "case1": {
        "stop": 10,
        "atol": {"mass.T": 0.001, "mass.dT": 0.001},
        "expect": {"final": {"mass.T": 9.999, "mass.dT": 0}}
      }
    }
  }
}
end
Flattened Source
dyad
"""
Models a thermal system with a fixed temperature source heating a heat capacitor via a conductor; serves as a test component.

This component simulates the transient thermal behavior of a heat capacitor (`mass`)
connected to an ideal fixed temperature source (`source`) through a thermal conductor (`conductor`).
It is designed as a test component for the `HeatCapacitor`, `FixedTemperature`, and `ThermalConductor` base models.
The heat capacitor is characterized by its thermal capacitance `C` and an initial temperature `T0`.
The fixed temperature source maintains a constant temperature `T`. Heat transfer between the
source and the capacitor is facilitated by the thermal conductor, which has a thermal conductance `G`.
The temperature of the heat capacitor, denoted `mass.T`, changes over time according to the
first-order differential equation:

math C \cdot \frac{d(mass.T)}{dt} = Q_

where `Q_{flow}` represents the heat flow rate into the capacitor. This heat flow is
determined by the temperature difference across the conductor and its conductance:

math Q_{flow} = G \cdot (T_{source} - mass.T)

In this component, `T_{source}` is the temperature `T` from the `source` subcomponent.
Consequently, `mass.T` will asymptotically approach `T` as the simulation progresses.
"""
component HeatSystemTest
  "Heat capacitor subcomponent representing the thermal mass"
  mass = HeatCapacitor(C = C, T0 = T0) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 570, "y1": 320, "x2": 670, "y2": 420, "rot": 0}
      },
      "tags": []
    }
  }
  "Fixed temperature source subcomponent"
  source = FixedTemperature(T = T) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 290, "y1": 450, "x2": 390, "y2": 550, "rot": 0}
      },
      "tags": []
    }
  }
  "Thermal conductor subcomponent facilitating heat flow"
  conductor = ThermalConductor(G = G) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 450, "y1": 450, "x2": 550, "y2": 550, "rot": 0}
      },
      "tags": []
    }
  }
  "Temperature of the fixed temperature source"
  parameter T::Real = 10.0
  "Initial temperature of the heat capacitor"
  parameter T0::Real = -10.0
  "Thermal capacitance of the heat capacitor"
  parameter C::Real = 10.0
  "Thermal conductance of the conductor"
  parameter G::Real = 10.0
relations
  connect(source.node, conductor.node_a) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(conductor.node_b, mass.node) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 620, "y": 500}], "E": 2}],
      "renderStyle": "standard"
    }
  }
metadata {
  "Dyad": {
    "icons": {"default": "dyad://ThermalComponents/Example.svg"},
    "tests": {
      "case1": {
        "stop": 10,
        "atol": {"mass.T": 0.001, "mass.dT": 0.001},
        "expect": {"final": {"mass.T": 9.999, "mass.dT": 0}}
      }
    }
  }
}
end


Test Cases ​

julia
using ThermalComponents
using DyadInterface: TransientAnalysis, rebuild_sol
using ModelingToolkit: toggle_namespacing, get_defaults, @named
using CSV, DataFrames, Plots

snapshotsdir = joinpath(dirname(dirname(pathof(ThermalComponents))), "test", "snapshots")
<< @setup-block not executed in draft mode >>

Test Case case1 ​

julia
@named model_case1 = HeatSystemTest()
model_case1 = toggle_namespacing(model_case1, false)

model_case1 = toggle_namespacing(model_case1, true)
result_case1 = TransientAnalysis(; model = model_case1, alg = "auto", start = 0e+0, stop = 1e+1, abstol=1e-6, reltol=1e-6)
sol_case1 = rebuild_sol(result_case1)
<< @setup-block not executed in draft mode >>
  • Examples

  • Experiments

  • Analyses