Downloads · 30 days
0
UARK-NED3/PODNN-ColdPlate
PODNN-ColdPlate is a tabular regression model from UARK-NED3. Use it for the tabular regression task on the model card, and read the license before you ship it in a product. The card lists the license as cc0-1.0.
A physically interpretable reduced-order surrogate that predicts the two-dimensional steady temperature field of a liquid-cooled, dual-chip, pin-fin cold plate from six boundary conditions — about 412,500 times faster…
Downloads · 30 days
0
Access
Public
Updated Sep 14, 2026
Repo size
344 KB
Likes
0
Public
Click a slice to open those files.
.pkl224 KB · 57%
From the Hugging Face model README
A physically interpretable reduced-order surrogate that predicts the two-dimensional steady temperature field of a liquid-cooled, dual-chip, pin-fin cold plate from six boundary conditions — about 412,500 times faster than the CFD solve it replaces.
Trained artifacts from Curl & Hu (2026). Data: UARK-NED3/ColdPlate-CFD-2000sims (Dryad DOI 10.5061/dryad.k0p2ngfp5).
Predicting an 11,110-node field directly makes the network's internal representation opaque. Projecting the temperature snapshots onto a proper orthogonal decomposition basis first compresses the field to four coefficients that retain 99.32% of the temperature-field variance, and those four coefficients correspond to identifiable physical features. The network then only has to learn a six-input to four-output map. The paper uses that latent space for sensitivity analysis, thermal-resistance mapping, and design exploration — things a black-box field regressor does not support.
Two stages. The neural network predicts POD coefficients; the POD basis reconstructs the field.
6 boundary conditions
-> param_scaler (StandardScaler)
-> Dense(64, ReLU, L2=1e-3) -> Dropout(0.1)
-> Dense(64, ReLU, L2=1e-3) -> Dropout(0.1)
-> Dense(32, ReLU, L2=1e-3)
-> Dense(4) # scaled POD coefficients
-> mode_scaler inverse transform
-> pca.inverse_transform # 4 modes -> 11,110 nodes
-> temperature field (K) on the yz mid-plane
Optimizer Adam (lr = 1e-3), loss MSE.
| Input | Units |
|---|---|
chip1.thermal.heat_flux | W/m² |
chip2.thermal.heat_flux | W/m² |
inlet1.momentum.mass_flow_rate | kg/s |
inlet1.thermal.total_temperature | K |
inlet2.momentum.mass_flow_rate | kg/s |
inlet2.thermal.total_temperature | K |
Output: temperature (K) at 11,110 nodes on the central yz mid-plane. Node
coordinates are in the dataset under the yz-mid|coordinates key of any
sim_NNNN.npz.
Order the six inputs exactly as listed. It is the column order the scaler was fit on.
| File | Contents |
|---|---|
pod_nn.h5 | Keras network weights |
pca.pkl | sklearn PCA: 4 retained POD modes and the snapshot mean |
param_scaler.pkl | sklearn StandardScaler for the 6 inputs |
mode_scaler.pkl | sklearn StandardScaler for the 4 POD coefficients |
training_history.json | Per-epoch train and validation MSE |
All four of the first files are required. The .h5 alone does not produce a
temperature field — it emits four scaled POD coefficients, and pca.pkl is
what turns those into an 11,110-node field. For the same reason, a one-line
keras.saving.load_model("hf://...") will not give you a working surrogate;
use the snippet below.
Pickle notice.
pca.pkl,param_scaler.pkl, andmode_scaler.pklare Python pickles and unpickle into scikit-learn objects, so loading them executes code. They are published unmodified from the CC0 Dryad deposit. Load them only from this repository or the deposit, in an environment where you would run the authors' code anyway.
| Training set | sim_0001–sim_0100 (100 simulations), 80/20 train/validation |
| Test set | sim_1601–sim_2000 (400 simulations) |
| Retained modes | 4 |
| Epochs | 500 cap, batch size 8 |
| Random seed | 42 |
training_history.json records 379 epochs, so training stopped short of
the 500 cap. The history also carries a learning_rate series, indicating a
schedule was active. Final recorded loss 0.0498, validation loss 0.0387 (MSE
in the scaled POD-coefficient space, not kelvin).
Reported test metrics: R² = 0.998, RMSE = 1.94 K, MAE = 1.46 K.
A 100-sample training set is enough to reach the error floor. The paper's decomposition analysis attributes the floor to the number of retained POD modes rather than to dataset size, so adding simulations does not help — add modes instead.
import pickle
import numpy as np
from huggingface_hub import hf_hub_download
from tensorflow.keras.models import load_model
REPO = "UARK-NED3/PODNN-ColdPlate"
get = lambda f: hf_hub_download(REPO, f)
net = load_model(get("pod_nn.h5"), compile=False)
pca = pickle.load(open(get("pca.pkl"), "rb"))
p_scal = pickle.load(open(get("param_scaler.pkl"), "rb"))
m_scal = pickle.load(open(get("mode_scaler.pkl"), "rb"))
# [chip1 q", chip2 q", inlet1 mdot, inlet1 T0, inlet2 mdot, inlet2 T0]
x = np.array([[40000.0, 35000.0, 0.010, 300.0, 0.010, 300.0]])
coeffs = m_scal.inverse_transform(net.predict(p_scal.transform(x), verbose=0))
field = pca.inverse_transform(coeffs) # (1, 11110) temperature in K
print(field.shape, field.min(), field.max())
Requires TensorFlow/Keras, scikit-learn, and NumPy ≥ 1.20.
The three pickles were written by scikit-learn 1.7.2 (read from the
_sklearn_version field embedded in each file). Install that version to avoid
unpickling warnings or silent attribute mismatches. The deposit's
requirements.txt pins nothing — it lists bare package names — so 1.7.2 is
the only recoverable version fact, and the exact TensorFlow build used for
training is not recorded anywhere in the release.
The dataset repository carries the full pipeline under 3_SourceCode/. Run
01_train_model.py first to regenerate these artifacts, then scripts 02–12
for the paper's figures. Every script seeds NumPy and TensorFlow with
RANDOM_SEED=42; with matching library versions, runs reproduce the published
numbers.
Curl, D. and Hu, H. 2026. Physically interpretable surrogate modeling of thermal fields in electronics cooling using combined proper orthogonal decomposition and neural networks. AI Thermal Fluids 6, 100040. https://doi.org/10.1016/j.aitf.2026.100040
Data: 10.5061/dryad.k0p2ngfp5 · Software: Curl, D. and Hu, H. CFDTwin: An open-source GUI and Python toolkit for POD-NN surrogate modeling of ANSYS Fluent simulations. arXiv:2605.27725 (2026).
U.S. National Science Foundation award OIA-2429580, EPSCoR Research Fellow: NSF: Immersion Cooling of Interior Permanent Magnet Synchronous Motors with Additively Manufactured Stator Windings (award page).
CC0 1.0 Universal (public domain dedication), matching the Dryad deposit these artifacts come from. Note that CFDTwin itself is released separately under the MIT License.
Han Hu, Associate Professor of Mechanical Engineering, University of Arkansas — [email protected]