ccitonline.com

CCIT – Cara Cerdas Ingat Tuhan

| AI.DAI5 | DAI5 eBook Free Download | CFDSOF | VisualFOAM | PT CCIT Group Indonesia | 8N8 |

Simulasi Proses Perpindahan Panas 1D Menggunakan Metode PINN Berdasarkan Kerangka Berpikir DAI5 – M. Yhandra Adityo – 2306260151

Assalamualaikum Wr. Wb.

(Deep Awareness of I)

Nama saya Yhandra dengan NPM 2306260151 dari program studi Teknik Mesin. Beberapa minggu lalu saya telah mensimulasikan proses heat transfer pada aplikasi virtual CFDSOF, yang mana hasil dokumentasinya telah saya upload dalam tautan di bawah ini:

(Intention)

Untuk langkah selanjutnya, saya melakukan analisis berdasarkan data yang telah saya dapatkan. Analisis tersebut bertujuan agar saya dapat memahami lebih lanjut tentang proses perpindahan panas, serta membuat inovasi terkait hal tersebut dalam dunia nyata. Untuk metode analisisnya sendiri, pada kesempatan kali ini saya menggunakan algoritma komputer berupa PINN

(Initial-Thinking)

PINN, yang mana merupakan singkatan dari physical-informed neural network, merupakan suatu program inovatif yang berfungsi untuk mencari solusi dari suatu model persamaan differensial berdasarkan kondisi nyatanya. Program tersebut memberikan keuntungan dari efisiensi dan akurasi dari hasilnya jika dibandingkan dengan metode elemen hingga (FEM) dan differensiasi hingga (FDM).

Salah satu hal yang dapat diselesaikan dengan PINN ialah fenomena heat transfer. Seperti yang kita tahu, peristiwa tersebut dapat divisualisasikan menggunakan hukum Fourier yang mana dirumuskan sebagai:

Dimana:

  • T sebagai temperatur (derajat Celsius)
  • t sebagai waktu (detik)
  • a sebagai difusivitas termal (m2/detik)
  • x sebagai posisi (meter)

(Idealization)

Dengan itu, saya mesti menghitung tingkat loss function dari perhitungannya, serta memperkecilnya seminimal mungkin untuk meningkatkan akurasi dari hasilnya. Loss function atau energy loss sendiri merupakan energi yang terbuang saat proses yang terdiri dari:

  • Physical loss, yang mana terbuang pada fase konduksi dari titik awal ke akhir sistem termal
  • Boundary loss, akibat interaksi antara sistem dan lingkungan yang menyebabkan keluar atau masuknya energi termal

Untuk itu, saya mengatur sistem sebagai suatu plat stainless steel dengan panjang 1 meter dan ketebalan 0,3 meter. Dengan itu, panas akan mengalir secara konduksi sepanjang sistem mulai dari titik 100 sampai 0 derajat Celsius secara linier. Untuk meningkatkan akurasi, saya mengiterasikan perhitungan sebanyak 3000 kali epoch.

(Instruction Set)

Saya mengkalkulasi perhitungan menggunakan bahasa pemrograman Python dalam platform web https://colab.research.google.com. Saya menggunakan modul Numpy, Matplotlib dan Torch untuk membantu pengerjaan tugas saya, dan seperti inilah bentuk kode yang telah saya buat:

import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt

# Define Physics-Informed Neural Network (PINN)
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)

# Compute loss function for training
def compute_loss(model, x, T0, T1):
    x = x.requires_grad_(True)
    T = model(x)

    # Compute derivatives
    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 (dยฒT/dxยฒ = 0)
    physics_loss = torch.mean(d2T_dx2**2)

    # Boundary conditions
    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

# Train the PINN model
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

# Plot the results
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  # Analytical solution

    plt.figure(figsize=(8, 6))
    plt.plot(x, T_pred, '--', label="PINN Solution", color='black')
    plt.plot(x, T_analytical, label="Analytical Solution", color='green')
    plt.xlabel("x")
    plt.ylabel("Temperature")
    plt.title("1D Steady-State Heat Conduction")
    plt.legend()
    plt.grid(True)
    plt.show()

# Set parameters and run the PINN model
if __name__ == "__main__":
    # Define boundary conditions and number of epochs
    T0 = 100  # Left boundary temperature
    T1 = 0    # Right boundary temperature
    epochs = 3000  # Number of training epochs

    model = train_pinn(T0, T1, epochs)
    plot_results(model, T0, T1)

Dan dari kode tersebut, akan digenerasikan grafik visualisasi hasil analitik dan PINN sebagai berikut:

Sekian dari saya, terima kasih telah mengunjungi blog yang telah saya upload, mohon maaf bila terdapat ketidaksempurnaan pada tulisan saya di atas ini, karena kesempurnaan hanya milik tuhan

Wassalamualaikum Wr. Wb.


Leave a Reply

Your email address will not be published. Required fields are marked *