Pada blog kali ini, saya akan membahas mengenai visualisasi heat map serta curve fitting plot dalam simulasi konduski panas menggunakan software CFDSOF dan framework DAI5.
Deep Awareness of I: Sebelum saya memulai mengerjakan tugas ini, saya harus menyadari dulu apa itu hikmah dan hakikat serta alasan dalam menimba ilmu di perguruan. Hal itu kembali ke dalam hubungan saya dan Allah SWT sebagai pencipta seluruh alam semesta.
Intention: Sebelum saya mendalami suatu hal, ada baiknya semua hal harus diawali dengan niat seperti kata hadis riwayat Imam Bukhari dan Imam Muslim: ุฅููููู ูุง ุงููุฃูุนูู ูุงูู ุจูุงูููููููุงุชูย yang artinya “Segala hal itu tergantung daripada niatnya.”
Intial Thinking: Setelah menentukan niatnya, saya masuk memikirkan dan menelaah fundamental daripada suatu masalah dengan mencari tahu prinsip-prinsip dasar yang akan digunakan.
Idealization: Setelah memikirkan hal-hal fundamentalnya, saya mengidealisasikan dan mensimplifikasi hal yang perlu dilakukan sehingga pekerjaan dapat berjalan sefektif mungkin sehingga dapat dilihat bigger picture dari hal yang ingin diselesaikan/
Instruction Set: Mengeksekusi hal tersebut yang telah disusun secara runut.
Setelah itu, saya melakukan pengolahan data yang didapatkan dari hasil simulasi CFDSOF pada baris J2 โ J10, data tersebut adalah sebaran temperatur sepanjang plat. Data tersebut diolah menggunakan metodeย curve fitting plotย dengan algoritmaย least square method. Data-data tersebut juga diolah menjadiย heatmapย energi panas berdasarkan Hukum Fourier Konduksi Panas.
Visualisasi Heatmap dan Curve Fitting Suhu
Heatmap Distribusi Suhu
Heatmap ini menunjukkan distribusi suhu pada plat 1×1 m dengan grid 12×12.
Gambar 1: Heatmap Distribusi Suhu
Curve Fitting Suhu vs. Posisi Y
Grafik ini menampilkan data suhu dan kurva fitting linier terhadap posisi y.
Gambar 2: Curve Fitting Suhu vs. Posisi Y
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata
import io
import base64
from js import document
# Data setup (based on 12×12 grid, assumed T(y) = 100 * (1 – y))
x = np.array([0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1])
y = np.array([(12-j)/11 for j in range(2, 10)]) # J = 2 to 9
T = np.array([9.09, 18.18, 27.27, 36.36, 45.45, 54.55, 63.64, 72.73])
points = np.array([(xi, yi) for yi in y for xi in x])
values = np.tile(T, 9) # Uniform across x
# Full 12×12 grid for heatmap
x_full = np.linspace(0, 1, 12)
y_full = np.linspace(0, 1, 12)
X, Y = np.meshgrid(x_full, y_full)
Z = griddata(points, values, (X, Y), method=’cubic’)
Z = np.where(np.isnan(Z), 100 * (1 – Y), Z)
# Heatmap
plt.figure(figsize=(6, 6))
plt.contourf(X, Y, Z, cmap=’hot’, levels=20)
plt.colorbar(label=’Temperature (ยฐC)’)
plt.title(‘Heatmap Distribusi Suhu pada Plat’)
plt.xlabel(‘X (m)’)
plt.ylabel(‘Y (m)’)
buf1 = io.BytesIO()
plt.savefig(buf1, format=’png’, bbox_inches=’tight’)
buf1.seek(0)
heatmap_base64 = base64.b64encode(buf1.getvalue()).decode(‘utf-8’)
plt.close()
# Set heatmap image in HTML
heatmap_img = document.getElementById(‘heatmap-img’)
heatmap_img.src = f”data:image/png;base64,{heatmap_base64}”
# Curve Fitting
y_data = y
T_data = T
coeffs = np.polyfit(y_data, T_data, 1)
y_fit = np.linspace(0, 1, 100)
T_fit = np.polyval(coeffs, y_fit)
plt.figure(figsize=(6, 4))
plt.plot(y_data, T_data, ‘o’, label=’Data Simulasi’)
plt.plot(y_fit, T_fit, ‘-‘, label=f’Fit: T = {coeffs[0]:.2f}y + {coeffs[1]:.2f}’)
plt.xlabel(‘Posisi Y (m)’)
plt.ylabel(‘Suhu (ยฐC)’)
plt.title(‘Curve Fitting Suhu vs. Posisi Y’)
plt.legend()
buf2 = io.BytesIO()
plt.savefig(buf2, format=’png’, bbox_inches=’tight’)
buf2.seek(0)
curve_base64 = base64.b64encode(buf2.getvalue()).decode(‘utf-8’)
plt.close()
# Set curve fit image in HTML
curve_img = document.getElementById(‘curve-fit-img’)
curve_img.src = f”data:image/png;base64,{curve_base64}”