Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Model a chip with a compact thermal model

On this page, we will replace the generic powered block with a PCB and a two-resistor chip package, then run until the predicted junction temperature settles. The package is inspired by the Raspberry Pi 5’s BCM2712 SoC and uses the same 6 W compact thermal model that we will later place on the complete board. This creates the baseline for our 80 °C design goal; the next two stages will improve the same heat path.

This page is part of Design a complete electronics cooling solution.

Choose how to start:

PCB and chip with flow through the duct The same 120 by 70 by 25 millimeter duct, green PCB and orange chip, drawn at the same scale and angle in tutorials 1.2.3 to 1.2.5. Air enters at x minimum and leaves at x maximum. Inlet Outlet Chip PCB x y z

1. Resize the duct and add the PCB

Open compact-thermal-model.json and change domain.size to a 120 × 70 × 25 mm duct:

"size": [0.12, 0.07, 0.025]

Remove the existing inlet_step and block entries from cuboid_components, then restore the full-face inlet:

{
  "boundary": { "full": { "side": "x_min" } },
  "condition": {
    "velocity_inlet": {
      "speed": 0.5,
      "temperature": 20.0
    }
  }
}

Replace cuboid_components with this PCB:

"cuboid_components": [
  {
    "tag": "pcb",
    "bbox": {
      "origin": [0.0175, 0.007, 0.0],
      "size": [0.085, 0.056, 0.0016]
    },
    "thermal_model": {
      "conducting": {
        "conductivity": [10.0, 10.0, 0.3],
        "density": 1850.0,
        "specific_heat_capacity": 1100.0,
        "power": 0.0
      }
    }
  }
]

The PCB now rests on the lower duct wall.

2. Add the chip package

Append this component to cuboid_components:

{
  "tag": "chip",
  "bbox": {
    "origin": [0.0555, 0.027, 0.0016],
    "size": [0.016, 0.016, 0.0022]
  },
  "thermal_model": {
    "two_resistor_ctm": {
      "case_side": "z_max",
      "power": 6.0,
      "resistance_jb": 9.2,
      "resistance_jc": 0.5,
      "exit_tolerance": 0.05
    }
  }
}

The simplified package sits directly on the PCB, with its z_max case face exposed to the air. Its dimensions suit this small tutorial duct; its power and junction-to-board and junction-to-case resistances match the BCM2712 model used in the final Raspberry Pi case. Its two heat paths are shown below:

Two-resistor compact thermal model A schematic with component power entering a junction connected upward through junction-to-case resistance to the air-cooled case face and downward through junction-to-board resistance to the conducting PCB. Case face to air Conducting PCB Junction temperature 6 W component power Rjc = 0.5 °C/W Rjb = 9.2 °C/W

For more detail on this representation, see Conducting and insulating domains. Model an electronic package with a compact thermal model gives the focused procedure for two-resistor and star-resistor packages.

3. Check the contacts

Update the top-level run settings:

"max_iterations": 500,
"target_residual": 1e-7,
"convergence_window": 20,
"numerics": "balanced",
"mesh_settings": {"max_cell_size": 0.002},
"boussinesq": true,
"gravity": [0.0, 0.0, -9.81],
"ctm_coupling": "implicit"

Compare the request with the completed compact-thermal-model.json, then submit a dry run and download its result.

This case includes Boussinesq buoyancy. Boussinesq buoyancy and reference temperature explains the model and its API inputs.

Inspect the geometry in fluid.vtu and solid.vtu with any compatible viewer. Check that:

  • the PCB forms one continuous layer inside the duct;
  • the package sits directly on the PCB without a gap or overlap;
  • the complete lower package face contacts the PCB; and
  • the complete upper package face contacts the fluid.

Correct the component bounding boxes before continuing if any contact is wrong.

Boundary placement and defaults explains why these contacts determine the available heat paths.

4. Run until the chip temperature settles

Set dry_run to false, submit the request, and download the result. The validated 30,744-cell case stops with monitor_converged after 80 iterations.

Open iteration_info.csv and inspect the final rows of junction_temperature_chip:

This preview shows a subset of the rows and columns in iteration_info.csv.

iterationjunction_temperature_chip
78254.85693
79254.85806
80254.85846

The chip temperature has flattened within the configured 20-iteration window.

Monitor a result and stop when it settles covers choosing a convergence window and tolerance for an engineering quantity.

Line chart of chip junction temperature over 80 thermal iterations. The temperature rises rapidly before flattening at 254.858 degrees Celsius; its maximum deviation from the final 20-iteration mean is 0.038 degrees Celsius.
The chip junction temperature settles at 254.858 °C, allowing the monitor to stop the coupled solve.

254.858 °C is far above the 80 °C goal and indicates an unsuccessful thermal strategy. That is still a useful result: it gives us a converged baseline and identifies the missing path from the package into the air. Convergence means the result has stopped changing; it does not mean the design is thermally acceptable. Compare a real result with the chip manufacturer’s maximum junction temperature.

Inspect the solved speed and temperature fields with a VTU viewer. We should see the chip as the hottest region, with a cooler PCB and airflow around it. In the interactive result, the PCB and chip are complete but only the back half of the fluid field is displayed. The front half is cut away at the duct center plane; the white box marks the complete fluid domain used by the simulation. Blue arrowed streamlines begin at the uniform inlet and follow the solved airflow. Open Display and uncheck Fluid to expose the complete solids, or Streamlines to hide the airflow paths. The optional ParaView workflow explains how to build a similar view.

Half-fluid-domain cutaway with the complete PCB and chip package colored by temperature and blue airflow streamlines.
Switch between speed and temperature on the back-half fluid cutaway; the chip is hottest and the PCB provides only a limited spreading path.

Finally, use the residual_* columns in iteration_info.csv to confirm that the pressure, velocity, and temperature residuals decrease across the run.

This preview shows a subset of the rows and columns in iteration_info.csv.

iterationresidual_pressureresidual_temperature
111
20.130515550.16442731
790.00033804450.000016483013
800.000262542070.000008906038

Baseline established

We:

  • added a conducting PCB;
  • attached a two-resistor chip model to it;
  • checked the package contacts with a dry run; and
  • stopped a full simulation using the junction-temperature history.

The key result is the 254.858 °C baseline. The model has a source, a junction monitor, and valid thermal contacts; what it lacks is adequate cooling. Next, we will cool the chip with an annular fan and test whether faster air alone can close the gap to 80 °C.