中文说明见 README.zh-CN.md.
This project builds an OpenFOAM conjugate heat-transfer model for eight heat-generating PCBs inside a 300 x 300 x 400 mm outdoor electronics enclosure. It reproduces the public setup of Wankhede et al. (2007), audits fan-assisted and sealed cooling assumptions, and separates numerical stability from external validation.
| Stage | Input | Work performed | Output |
|---|---|---|---|
| Reconstruct | Paper dimensions, 8 x 12.5 W PCBs, no-solar reference cases | Built air and solid PCB regions with coupled temperature/heat-flux interfaces | Parametric OpenFOAM 13 case generator |
| Model cooling | Ambient wall heat rejection and internal-fan information | Implemented external convection/radiation routes and momentum/pressure-jump/fan-curve workflows | Reusable boundary and source ledger |
| Solve and extract | Generated multi-region cases | Computed PCB average/max/p99 temperatures, air temperature, mass balance and heat balance | Compact result CSVs and field evidence |
| Verify | Same-physics mesh family and solver-progress checkpoints | Compared extra and ultra meshes with mature-window mean/peak statistics | 18 declared grid checks |
| Benchmark | Digitized Wankhede Fig. 5 targets | Recomputed every reference error and preserved failed long-run comparisons | Honest evidence boundary instead of a tuned single checkpoint |
The paper values are comparison targets, not inputs to the field solution. Several early calibration points were explored, but the public conclusion uses the later stability and grid audits as well; it does not select only the saved coordinate that happens to agree best.
| Evidence | Result | Status |
|---|---|---|
| Fan-assisted baseline at solver coordinate 2000 | 1.56% composite reference error | passes 5% pilot gate |
| Same baseline at 3000 | 2.88% | passes 5% pilot gate |
| Same baseline at 4000 | 5.91% | fails; early agreement is not durable closure |
| Baseline 4000 energy residual | 2.19% of source | internal ledger passes 5% gate |
| Extra→ultra grid pair, mature-window means and peaks | all 18 checks within 1°C | numerical-insensitivity gate passes for declared window statistics |
| Ultra mesh at 13000 versus the same literature target | 11.86% composite error | external reproduction remains open |
This is the point of the project: numerical grid stability and external truth are different questions. The mature-window mesh result supports an L3-style numerical-insensitivity statement for the declared statistics. It does not turn the 11.86% literature mismatch into validation.
- L0: case generation and public replay are reproducible.
- L1: target histories and solver artifacts were inspected; the compact public package publishes selected checkpoints rather than all 68 GB of raw cases.
- L2: the public 4000-coordinate baseline ledger passes its declared energy and mass gates.
- L3 with a window caveat: extra→ultra mature-window mean and peak metrics are within 1°C. Instantaneous hotspot values still oscillate.
- L4 not closed: early literature agreement does not persist at the later ultra-mesh state.
- L5 not claimed: no matched enclosure experiment, measured installed fan curve, or production input set is available.
Allowed use: workflow reproduction, numerical-method review, guarded screening, relative comparison, and planning the next physical tests. Forbidden use: product certification, warranty limits, or an absolute hotspot guarantee.
No OpenFOAM installation is needed for this path.
git clone https://github.com/lordkunkun/electronics-enclosure-cooling-cfd.git
cd electronics-enclosure-cooling-cfd
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
python scripts/validate_public_evidence.py
python scripts/plot_public_results.py
python -m unittest discover -s tests -vThe validator does not trust stored status columns. It recomputes:
- literature errors and composite errors;
- the 5% external-reference gate;
- all extra→ultra mean/peak grid deltas;
- the 1°C numerical-insensitivity gate;
- energy-residual percentage and mass-balance status.
The case generator uses only the Python standard library:
python scripts/generate_openfoam_cht_case.py \
--case public_baseline \
--mesh medium \
--end-time 4000 \
--h-wall 20 \
--fan-accel 5 \
--pcb-power-total 100 \
--case-root 03_cases \
--overwriteThis writes a complete multi-region case under 03_cases/public_baseline_medium,
including mesh dictionaries, fluid/PCB regions, sources, boundary conditions,
solver settings, and Allrun.
Install and source OpenFOAM 13, then run:
source /path/to/OpenFOAM-13/etc/bashrc
python scripts/generate_openfoam_cht_case.py \
--case public_baseline \
--mesh medium \
--end-time 4000 \
--h-wall 20 \
--fan-accel 5 \
--pcb-power-total 100 \
--case-root 03_cases \
--overwrite
scripts/run_openfoam_cht_case_parallel.sh \
03_cases/public_baseline_medium \
public_baseline \
4000 \
16The current formulation uses ddtSchemes/default = steadyState. OpenFOAM still
writes numbered time directories, but this repository calls those numbers
solver-progress coordinates, not physical transient time. Consequently,
the checkpoint comparison is a convergence/protocol audit—not a physical
time-step-independence study.
Detailed instructions: OpenFOAM reproduction guide.
| Item | Public baseline |
|---|---|
| Enclosure | 0.30 x 0.30 x 0.40 m |
| PCBs | 8 slabs, each 0.240 x 0.180 x 0.003 m |
| Total heat | 100 W |
| Ambient | 298.15 K |
| External convection coefficient | 20 W/m2/K, calibrated screening assumption |
| PCB effective conductivity | 0.5 W/m/K |
| Fan baseline | equivalent momentum source, scale 5 m/s2 |
| Finest public numerical pair | 2.92M and 4.56M cells |
The momentum source is a screening surrogate. A measured installed fan P–Q curve and enclosure system-resistance curve are still required before fan physics can support production decisions.
configs/ frozen public case and claim scope
data/ targets, histories, mesh/window checks, ledgers, statuses
scripts/ case generation, execution, extraction, comparison, plots
tests/ evidence and case-generator regression tests
figures/ model diagrams, field evidence, regenerated result plots
docs/ methodology, validation, limitations, full rerun guide
.github/workflows/ automatic public-evidence validation
Recommended reading order: this README → methodology → validation logic → limitations → full rerun. Column definitions and artifact provenance are listed in the data map and the figure map.
The research workspace contains about 68 GB, including 65 GB of OpenFOAM case directories and 3 GB of audit intermediates. Those files are not suitable for a clean GitHub repository. This public package keeps the generator, compact results, validation logic, selected figures, and provenance needed to audit the conclusion. Users can regenerate full solver fields locally.
The separate Zig-Zag Serpentine Cold Plate CFD Reproduction uses ANSYS Fluent to study liquid cooling and benchmark pressure drop/maximum temperature. It is a different project, not another version of this enclosure.
Code: MIT. Local data and figures: CC BY 4.0.
Citation metadata: CITATION.cff.
Benchmark: M. Wankhede, V. Khaire, A. Goswami, and S. D. Mahajan, “Evaluation of Cooling Solutions for Outdoor Electronics,” THERMINIC 2007, https://arxiv.org/abs/0801.1043.




