Assalamualaikum Warahmatullahi Wabarakatuh.
Di hari yang penuh berkah ini, di mana kita masih diberi kesempatan oleh Allah SWT untuk terus belajar dan berkembang, saya ingin membahas Studi Kasus Integrasi Numerik menggunakan DAI5 dalam analisis konduksi panas steady-state 2D.
Sebelum masuk ke pembahasan utama, berikut langkah-langkah yang saya lakukan dalam mengerjakan tugas ini:
Setelah melakukan tugas membuat Video Tutorial CFDSOF mengenai Heat Conduction 2D yang anda bisa tonton pada link di bawah ini:
Kita telah menghasilkan sebuah data persebaran panas dalam bentuk excel yang kita bisa olah datanya. Lalu data tersebut akan saya analisis sedemikian rupa dengan langkah-langkah di bawah ini:
A. Curve Fitting
Langkah pertama, kita mulai dengan menyimpan plot xy dengan sumbu Y sebagai temperatur dari J2 sampai J10, lalu menggabungkannya menjadi satu file hingga menjadi seperti ini:

Setelah itu saya melakukan prompting pada AI DeepSeek untuk membantu saya membuat visualisasi curve fitting dengan kode HTML, CSS, dan JavaScript.

HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Curve Fitting Heat Conduction</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<h1>Curve Fitting Heat Conduction</h1>
<canvas id="heatChart"></canvas>
</div>
<!-- Tambahkan Chart.js -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<!-- Tambahkan math.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/11.7.0/math.min.js"></script>
<script src="script.js"></script>
</body>
</html>
CSS
body {
font-family: Arial, sans-serif;
background-color: #f4f4f9;
color: #333;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.container {
background: white;
padding: 20px;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
text-align: center;
}
h1 {
margin-bottom: 20px;
}
canvas {
max-width: 800px;
max-height: 600px;
}
JavaScript
// Data dari file Excel yang diberikan
const panjang = [0, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, 100000];
const temperatur = [
[67300000, 67300000, 67300000, 67300000, 67300000, 67300000, 67300000, 67300000, 67300000],
[69965900, 69170300, 68954100, 68954100, 69371400, 69991200, 71066300, 73034300, 77133600],
[71093400, 70461100, 70305400, 70305400, 71153700, 72227100, 73939800, 76637300, 80900300],
[71646700, 71275300, 71268200, 71268200, 72478000, 73824000, 75828700, 78675000, 82530500],
[71918300, 71725200, 71838100, 71838100, 73280200, 74762700, 76876200, 79703800, 83246700],
[72001500, 71869500, 72026300, 72026300, 73547700, 75070700, 77210100, 80017500, 83452700],
[71918300, 71725200, 71838100, 71838100, 73280300, 74762700, 76876300, 79703800, 83246700],
[71646700, 71275300, 71268200, 71268200, 72478000, 73824100, 75828700, 78675100, 82530500],
[71093400, 70461100, 70305500, 70305500, 71153700, 72227100, 73939800, 76637300, 80900300],
[69965900, 69170300, 68954100, 68954100, 69371400, 69991200, 71066300, 73034300, 77133600],
[67300000, 67300000, 67300000, 67300000, 67300000, 67300000, 67300000, 67300000, 67300000]
];
// Fungsi untuk curve fitting (polinomial orde 2)
function polynomialFit(x, y, order) {
const n = x.length;
const X = math.zeros(n, order + 1);
const Y = math.matrix(y);
for (let i = 0; i < n; i++) {
for (let j = 0; j <= order; j++) {
X.set([i, j], Math.pow(x[i], j));
}
}
const XT = math.transpose(X);
const XTX = math.multiply(XT, X);
const XTY = math.multiply(XT, Y);
const coefficients = math.multiply(math.inv(XTX), XTY);
return coefficients.toArray();
}
// Menyiapkan data untuk Chart.js
const labels = panjang;
const datasets = temperatur[0].map((_, colIndex) => {
const data = temperatur.map(row => row[colIndex]);
const coefficients = polynomialFit(panjang, data, 2); // Curve fitting orde 2
const fitData = panjang.map(x => coefficients[0] + coefficients[1] * x + coefficients[2] * Math.pow(x, 2));
return {
label: `J${colIndex + 2}`,
data: data,
borderColor: `hsl(${colIndex * 40}, 100%, 50%)`, // Warna yang lebih kontras
borderWidth: 2,
fill: false,
pointRadius: 5,
pointBackgroundColor: 'rgba(0, 0, 0, 0.5)',
trendline: {
data: fitData,
borderColor: `hsl(${colIndex * 40}, 100%, 50%)`,
borderWidth: 2,
borderDash: [5, 5]
}
};
});
// Membuat chart
const ctx = document.getElementById('heatChart').getContext('2d');
const heatChart = new Chart(ctx, {
type: 'line',
data: {
labels: labels,
datasets: datasets
},
options: {
responsive: true,
interaction: {
mode: 'index', // Tooltip akan menunjukkan semua dataset di titik yang sama
intersect: false
},
plugins: {
tooltip: {
enabled: true,
mode: 'index',
intersect: false
},
legend: {
position: 'top',
labels: {
font: {
size: 12
}
}
}
},
scales: {
x: {
title: {
display: true,
text: 'Panjang',
font: {
size: 14
}
},
grid: {
color: 'rgba(200, 200, 200, 0.3)'
}
},
y: {
title: {
display: true,
text: 'Temperatur',
font: {
size: 14
}
},
grid: {
color: 'rgba(200, 200, 200, 0.3)'
},
beginAtZero: false // Mulai dari nilai minimum data
}
}
}
});
Setelah ketiga kode tersebut saya input ke dalam CodePen, akan menghasilkan kurva berikut:

B. Menghitung Flux Panas Menggunakan Hukum Fourier

// Data dari file Excel yang diberikan
const panjang = [0, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, 100000];
const temperatur = [
[67300000, 67300000, 67300000, 67300000, 67300000, 67300000, 67300000, 67300000, 67300000],
[69965900, 69170300, 68954100, 68954100, 69371400, 69991200, 71066300, 73034300, 77133600],
[71093400, 70461100, 70305400, 70305400, 71153700, 72227100, 73939800, 76637300, 80900300],
[71646700, 71275300, 71268200, 71268200, 72478000, 73824000, 75828700, 78675000, 82530500],
[71918300, 71725200, 71838100, 71838100, 73280200, 74762700, 76876200, 79703800, 83246700],
[72001500, 71869500, 72026300, 72026300, 73547700, 75070700, 77210100, 80017500, 83452700],
[71918300, 71725200, 71838100, 71838100, 73280300, 74762700, 76876300, 79703800, 83246700],
[71646700, 71275300, 71268200, 71268200, 72478000, 73824100, 75828700, 78675100, 82530500],
[71093400, 70461100, 70305500, 70305500, 71153700, 72227100, 73939800, 76637300, 80900300],
[69965900, 69170300, 68954100, 68954100, 69371400, 69991200, 71066300, 73034300, 77133600],
[67300000, 67300000, 67300000, 67300000, 67300000, 67300000, 67300000, 67300000, 67300000]
];
// Konduktivitas termal (k) - contoh nilai, sesuaikan dengan material yang digunakan
const k = 16.2; // W/mยทK
// Fungsi untuk menghitung gradien temperatur (dT/dx)
function calculateGradient(x, T) {
const dTdx = [];
for (let i = 0; i < x.length - 1; i++) {
const deltaT = T[i + 1] - T[i];
const deltaX = x[i + 1] - x[i];
dTdx.push(deltaT / deltaX);
}
// Untuk titik terakhir, gunakan gradien dari titik sebelumnya
dTdx.push(dTdx[dTdx.length - 1]);
return dTdx;
}
// Fungsi untuk menghitung flux panas (q = -k * dT/dx)
function calculateHeatFlux(k, dTdx) {
return dTdx.map(gradient => -k * gradient);
}
// Fungsi untuk menghitung daya menggunakan metode trapesium (integral q dA)
function calculatePower(q, x) {
const P = [];
let totalPower = 0;
for (let i = 0; i < q.length - 1; i++) {
const deltaX = x[i + 1] - x[i];
const avgQ = (q[i] + q[i + 1]) / 2; // Rata-rata flux panas antara dua titik
totalPower += avgQ * deltaX; // Integral q dx
P.push(totalPower);
}
// Untuk titik terakhir, gunakan nilai daya dari titik sebelumnya
P.push(P[P.length - 1]);
return P;
}
// Menyiapkan data untuk Chart.js
const labels = panjang;
const datasets = temperatur[0].map((_, colIndex) => {
const data = temperatur.map(row => row[colIndex]);
const dTdx = calculateGradient(panjang, data); // Hitung gradien temperatur
const q = calculateHeatFlux(k, dTdx); // Hitung flux panas
const P = calculatePower(q, panjang); // Hitung daya menggunakan integral
return {
label: `J${colIndex + 2} (P)`,
data: P,
borderColor: `hsl(${colIndex * 40}, 100%, 50%)`, // Warna yang lebih kontras
borderWidth: 2,
fill: false,
pointRadius: 5,
pointBackgroundColor: 'rgba(0, 0, 0, 0.5)'
};
});
// Membuat chart
const ctx = document.getElementById('heatChart').getContext('2d');
const heatChart = new Chart(ctx, {
type: 'line',
data: {
labels: labels,
datasets: datasets
},
options: {
responsive: true,
interaction: {
mode: 'index', // Tooltip akan menunjukkan semua dataset di titik yang sama
intersect: false
},
plugins: {
tooltip: {
enabled: true,
mode: 'index',
intersect: false
},
legend: {
position: 'top',
labels: {
font: {
size: 12
}
}
}
},
scales: {
x: {
title: {
display: true,
text: 'Panjang (m)',
font: {
size: 14
}
},
grid: {
color: 'rgba(200, 200, 200, 0.3)'
}
},
y: {
title: {
display: true,
text: 'Daya (P) [Watt]',
font: {
size: 14
}
},
grid: {
color: 'rgba(200, 200, 200, 0.3)'
},
beginAtZero: false // Mulai dari nilai minimum data
}
}
}
});
Dengan kode di atas, akan menghasilkan grafik persebaran daya seperti ini:

Berdasarkan analisis dan visualisasi yang telah dilakukan, kita dapat menyimpulkan beberapa hal berikut:
- Perhitungan Flux Panas (qq):
- Flux panas (qq) dihitung menggunakanย Hukum Fourier, yaituย q=โkโ dTdxq=โkโ dxdTโ, di manaย kkย adalah konduktivitas termal danย dTdxdxdTโย adalah gradien temperatur.
- Gradien temperatur dihitung menggunakan metode numerik (beda hingga) dari data temperatur yang diberikan.
- Perhitungan Daya (PP):
- Daya (PP) dihitung menggunakan integral numerik dari flux panas terhadap panjang (xx), yaituย P=โซqโdxP=โซqdx.
- Metode trapesium digunakan untuk menghitung integral secara numerik, menghasilkan daya kumulatif pada setiap titik.
- Visualisasi Data:
- Grafik menampilkan persebaran daya (PP) sebagai fungsi dari panjang (xx) untuk setiap kolom data (J2-J10).
- Warna yang kontras dan tooltip memudahkan pembacaan dan interpretasi data.
- Hasil Visualisasi:
- Grafik menunjukkan bagaimana daya (PP) berubah seiring dengan perubahan panjang (xx).
- Setiap kolom data (J2-J10) memiliki pola distribusi daya yang unik, yang dapat digunakan untuk analisis lebih lanjut.
Penutup
Proyek ini telah berhasil memvisualisasikan persebaran daya berdasarkan data temperatur yang diberikan. Dengan menggunakan Hukum Fourier dan metode numerik, kita dapat menghitung flux panas (qq) dan daya (PP) secara akurat. Visualisasi menggunakan Chart.js memudahkan interpretasi data dan membantu dalam memahami pola distribusi daya.
Manfaat dan Aplikasi:
- Analisis Termal: Visualisasi ini dapat digunakan untuk menganalisis distribusi panas dan daya dalam sistem termal.
- Optimasi Desain: Hasil analisis dapat digunakan untuk mengoptimalkan desain sistem termal, seperti heat exchanger atau sistem pendingin.
- Pembelajaran: Proyek ini juga dapat digunakan sebagai alat pembelajaran untuk memahami konsep flux panas, daya, dan metode numerik.
Sekian dari saya, semoga apa yang saya sudah tuliskan pada hari ini akan membantu orang banyak di kemudian hari. Mohon maaf bila ada kesalahan kata, Wassalamualaikum Wr. Wb
MESIN!!! BERSYUKUR! BERSYUKUR! BERSYUKUR!