Created by: Zakaa Aidan Ahmad – 2306225041
Beberapa waktu yang lalu, saya telah mendemonstrasikan fenomena perpindahan panas dalam 1 dimensi menggunakan perangkat lunak CFDSOF. Dengan itu, saya telah mendapatkan berbagai pengetahuan baru terkait peristiwa perpindahan panas, serta algoritma komputer untuk memperhitungkannya. Sementara itu, untuk bukti hasil simulasinya telah saya publiskan dalam bentuk video YouTube Berikut
Untuk proses analisis lanjutan, terdapat beberapa metode yang dapat saya gunakan. Salah satu metode tersebut ialah PINN atau Physics-Informed Neural Networks. Menggunakan kerangka berpikir DAI5, penjelasan terkait metode PINN ialah sebagai berikut:
Deep Awareness of I
Sebagai seorang manusia, saya sadar bahwa terdapat beberapa keterbatasan dalam diri saya, yang membuat saya tidak dapat melakukan beberapa hal sebaik mungkin. Namun, saya memiliki akal untuk dapat berpikir bahwa dengan bantuan suatu sistem, saya dapat melakukannya secara lebih baik. Salah satunya adalah penggunaan metode PINN dalam analisis perpindahan panas atau heat transfer, yang mana akan menghasilkan output data yang lebih akurat dibandingkan jika saya melakukannya secara manual
Intention
Dalam kesempatan kali ini, saya melakukan analisis menggunakan metode PINN. PINN sendiri – yang mana merupakan singkatan dari Physics-Informed Neural Networks – merupakan suatu metode untuk menjadi suatu jembatan antara dunia maya dengan fisik. Dengan kata lain, PINN dapat menghasilkan suatu model analisis dari suatu peristiwa fisika yang mana tetap dapat memenuhi hukum-hukum yang ada. Model tersebut memiliki keunggulan dibandingkan algoritma-algoritma komputer pada umumnya sebagai berikut:
- Dapat menyelesaikan suatu persoalan dengan lebih efisien, karena biaya operasionalnya yang lebih murah, dan algoritma tersebut sangat sederhana
- Tidak menggunakan pendekatan mesh untuk proses penyelesaiannya, sehingga meningkatkan akurasi
Sehingga, metode PINN sudah digunakan secara umum dalam berbagai aspek keteknikan selain visualisasi perpindahan panas, yang mana akan saya ujikan pada kesempatan kali ini
Initial Thinking
Proses perpindahan panas dapat dianalisis menggunakan hukum Fourier, yang menyatakan bahwa panas yang mengalir dalam suatu sistem berbanding lurus dengan gradien distribusi termalnya, yang mana dapat dirumuskan sebagai berikut:

Sementara itu, laju perpindahan panasnya dapat dirumuskan sebagai berikut:

Sehingga, jika kedua persamaan tersebut digabungkan, akan menghasilkan persamaan differensial berikut:

Yang mana pada kondisi steady state yang saya ujikan pada kesempatan kali ini, gradien distribusi temperatur pada sumbu x bernilai nol, sehingga kalor tersebar secara linier pada setiap posisi dalam arah tersebut
Idealization
Tugas dari algoritma PINN tersebut ialah menghitung tingkat energy loss yang terjadi dalam suatu proses perpindahan panas, dan membuatnya bernilai sekecil mungkin. Loss function tersebut sendiri terdiri dari beberapa parameter berbeda, diantaranya adalah:
- Physical loss, merupakan energi yang hilang dalam proses perpindahan panas akibat hambatan internal, hal tersebut dipengaruhi oleh konduktivitas termal pada alat hantar, dimana semakin besar nilainya, semakin kecil tingkat energy loss nya
- Boundary loss, merupakan kehilangan energi akibat pengaruh eksternal, yang mana terjadi antara sistem dengan lingkungan maupun sebaliknya
- Total loss, merupakan akumulasi dari physical dan boundary loss
Dalam kesempatan kali ini, saya menggunakan parameter untuk dimasukkan dalam algoritma perhitungan perpindahan panas sebagai berikut:
- Material yang digunakan adalah baja nirkarat dengan konduktivitas 16,2 W/mK
- Panjang batang baja sebesar 1 meter
- Temperatur pada kedua ujungnya diatur sebagai T0 = 100C dan T1 = 0
Langkah selanjutnya ialah komputer akan menghitung loss function agar menghasilkan nilai sedekat mungkin dengan hasil analitiknya. Pada percobaan kali ini, saya mengatur agar iterasi (epoch) dilakukan sebanyak 5000 kali agar hasilnya maksimal
Instruction Set
Terakhir, saya menggunakan bantuan pemrograman Python untuk menghitung solusi PINN dari hasil percobaan menggunakan CFDSOF, dengan beberapa set kode sebagai berikut:
- Mengimpor modul
Bertujuan untuk mendapatkan fungsi-fungsi bawaan Python untuk mempermudah proses pemrograman. Fungsi-fungsi yang saya impor adalah sebagai berikut:
- Torch, untuk menggunakan operasi dalam kalkulus, seperti turunan dan integral, dalam perhitungan
- Numpy, untuk mengoperasikan secara aljabar linier setiap variabel yang digunakan dalam perhitungan
- Matplotlib, untuk menggenerasikan grafik berdasarkan parameter-parameter yang tersedia
import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
- Mendefinisikan parameter PINN
Saya menggunakan object-oriented programming untuk mendefinisikan suatu kelas berupa PINN dengan berbagai macam fungsi yang tersedia
class PINN(nn.Module):
def __init__(self):
super(PINN, self).__init__()
self.net = nn.Sequential(
nn.Linear(1, 20),
nn.Tanh(),
nn.Linear(20, 20),
nn.Tanh(),
nn.Linear(20, 1)
)
def forward(self, x):
return self.net(x)
- Menghitung loss function
Loss function dihitung berdasarkan physical dan boundary loss yang terjadi dalam proses perpindahan panas. Komputer akan meminimalkan nilainya untuk memaksimalkan output dalam perhitungan
def compute_loss(model, x, T0, T1):
x = x.requires_grad_(True)
T = model(x)
dT_dx = torch.autograd.grad(T, x, grad_outputs=torch.ones_like(T), create_graph=True)[0]
d2T_dx2 = torch.autograd.grad(dT_dx, x, grad_outputs=torch.ones_like(dT_dx), create_graph=True)[0]
physics_loss = torch.mean(d2T_dx2**2)
T_left = model(torch.tensor([[0.0]]))
T_right = model(torch.tensor([[1.0]]))
bc_loss = (T_left - T0)**2 + (T_right - T1)**2
return physics_loss + bc_loss
- Memodifikasi parameter PINN
Saya memodifikasi parameter dengan nilai epoch sebanyak 5000 kali untuk memaksimalkan kualitas hasil
def train_pinn(T0, T1, epochs=1000):
model = PINN()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
x = torch.linspace(0, 1, 100).reshape(-1, 1)
for epoch in range(epochs):
optimizer.zero_grad()
loss = compute_loss(model, x, T0, T1)
loss.backward()
optimizer.step()
if epoch % 100 == 0:
print(f"Epoch {epoch}, Loss: {loss.item():.6f}")
return model
- Menampilkan grafik
Grafik akan ditampilkan berdasarkan hasil perhitungan sebelumnya, agar dapat digunakan dalam berbagai media, saya juga menggunakan bantuan kode HTML untuk menggenerasikannya
def plot_results(model, T0, T1):
x = torch.linspace(0, 1, 100).reshape(-1, 1)
with torch.no_grad():
T_pred = model(x).numpy()
x = x.numpy()
T_analytical = T0 + (T1 - T0) * x
plt.figure(figsize=(8, 6))
plt.plot(x, T_pred, '--', label="PINN Solution", color='red')
plt.plot(x, T_analytical, label="Analytical Solution", color='blue')
plt.xlabel("x")
plt.ylabel("Temperature")
plt.title("1D Steady-State Heat Conduction")
plt.legend()
plt.grid(True)
plt.show()
- Program utama
Inilah program utama yang akan menggunakan setiap fungsi yang tersedia secara berurutan, sehingga akan terbentuk hasil perhitungan berdasarkan data analitik dan PINN
if __name__ == "__main__":
T0 = 100
T1 = 0
epochs = 5000
model = train_pinn(T0, T1, epochs)
plot_results(model, T0, T1)
Sementara itu, untuk hasil berupa grafik perbandingan kedua pendekatan numerik tersebut telah ditampilkan dibawah ini: