Difference between revisions of "User:LuthfiShafwan"

From ccitonlinewiki
Jump to: navigation, search
(Komputasi Teknik Pertemuan 1 (Pasca UTS) 29/10/2024)
(2. Initial Thinking)
 
(270 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Introduction ==
+
= Introduction =
[[File:IMG-20240516-WA0001.jpg|115px|thumb|right]]
+
[[File:IMG-20240516-WA0001.jpg|115px|border|right]]
Nama saya muhammad luthfi shafwan, saya adalah mahasiswa S2 Teknik Mesin, Teknologi dan Sumber Daya Maritim angkatan 2024
+
Nama saya muhammad luthfi shafwan, mahasiswa S2 Teknik Mesin peminatan Teknologi dan Sumber Daya Maritim angkatan 2024
== Komputasi Teknik Pertemuan 1 (Pasca UTS) 29/10/2024 ==
 
Pada pertemuan pertama ini, mahasiswa diperkenalkan dengan sebuah framework bernama DAI-5, yang dikembangkan oleh Dr. Ir. Ahmad Indra Siswantara. Framework ini didasari oleh konsep conscious thinking atau berpikir secara sadar. Landasan dari framework ini adalah falsafah yang beliau utarakan, yaitu "I'm my consciousness," yang menegaskan pentingnya kesadaran dalam setiap tindakan. Sebagai inisiator, beliau merumuskan framework ini menjadi empat tahapan penting: (1) Intention, (2) Initial Thinking, (3) Idealization, dan (4) Instruction Set. Tahapan-tahapan ini merepresentasikan pentingnya pendekatan sistematis dalam berbagai aspek kehidupan.
 
  
PERTANYAAN 1. (Can you derive finite element equations from 1D PDE governing equations using weighted residual in a very simple way along with an example?)
+
= Komputasi Teknik Pertemuan 1 (Pasca UTS) 29/10/2024 =
Pernyataan Masalah PDE 1D
+
Pada pertemuan pertama ini, mahasiswa diperkenalkan dengan sebuah framework bernama DAI-5, yang dikembangkan oleh Dr. Ir. Ahmad Indra Siswantara. Framework ini didasari oleh konsep conscious thinking atau berpikir secara sadar. Landasan dari framework ini adalah falsafah yang beliau utarakan, yaitu "I'm my consciousness," yang menegaskan pentingnya kesadaran dalam setiap tindakan. Sebagai inisiator, beliau merumuskan framework ini menjadi empat tahapan penting:  
Pertimbangkan persamaan konduksi panas dalam keadaan tunak satu dimensi:
 
\frac{d}{dx}\left(k\frac{du}{dx}\right)+f=0
 
dengan ketentuan:
 
u\left(x\right) adalah fungsi yang tidak diketahui (misalnya, suhu),
 
k adalah konstanta (konduktivitas termal),
 
f adalah istilah sumber yang diketahui.
 
Misalkan persamaan ini berlaku pada domain 0\le x\le L.
 
Langkah 1: Diskritisasi Domain
 
Kita akan membagi domain [0,L] menjadi n elemen hingga. Untuk kesederhanaan, kita menggunakan elemen linier (setiap elemen memiliki dua titik node).
 
Langkah 2: Mendefinisikan Solusi Pendekatan
 
Dalam metode elemen hingga, kita mendekati u\left(x\right) dengan menggunakan himpunan fungsi bentuk N_i\left(x\right) dan nilai nodal U_i:
 
u\left(x\right)\approx\buildrel u\over u\sim\left(x\right)=\sum_{i=1}^{n+1}N_i\left(x\right)U_i
 
dengan ketentuan:
 
N_i\left(x\right) adalah fungsi bentuk yang dipilih agar linier di setiap elemen,
 
U_i adalah nilai nodal dari u\left(x\right) pada titik-titik node.
 
Langkah 3: Formulasi Residu Berbobot (Metode Galerkin)
 
Definisikan residu R\left(x\right) dari persamaan diferensial sebagai:
 
R\left(x\right)=\frac{d}{dx}\left(k\frac{d\buildrel u\over u\sim}{dx}\right)+f
 
Untuk metode Galerkin, kita mensyaratkan bahwa residu berbobot adalah nol untuk setiap fungsi uji N_j:
 
\int_{0}^{L}N_jR\left(x\right)\thinsp dx=0
 
Substitusikan R\left(x\right) ke dalam persamaan ini, sehingga kita mendapatkan:
 
\int_{0}^{L}N_j\left(\frac{d}{dx}\left(k\frac{d\buildrel u\over u\sim}{dx}\right)+f\right)dx=0
 
Langkah 4: Menerapkan Integrasi Parsial
 
Untuk mengurangi orde turunan pada \buildrel u\over u\sim, kita lakukan integrasi parsial:
 
\int_{0}^{L}N_j\frac{d}{dx}\left(k\frac{d\buildrel u\over u\sim}{dx}\right)dx=-\int_{0}^{L}\frac{dN_j}{dx}k\frac{d\buildrel u\over u\sim}{dx}\thinsp dx+\left[N_jk\frac{d\buildrel u\over u\sim}{dx}\right]_0^L
 
Dengan asumsi kondisi batas alami dimana k\frac{d\buildrel u\over u\sim}{dx}=0 pada batas (yaitu, tidak ada aliran panas di x=0 dan x=L), suku batas akan hilang, sehingga menjadi:
 
-\int_{0}^{L}\frac{dN_j}{dx}k\frac{d\buildrel u\over u\sim}{dx}\thinsp dx+\int_{0}^{L}N_jf\thinsp dx=0
 
Langkah 5: Substitusi Solusi Pendekatan \buildrel u\over u\sim\left(x\right)
 
Substitusi \buildrel u\over u\sim\left(x\right)=\sum_{i=1}^{n+1}N_i\left(x\right)U_i ke dalam persamaan:
 
-\int_{0}^{L}\frac{dN_j}{dx}k\sum_{i=1}^{n+1}\frac{dN_i}{dx}U_i\thinsp dx+\int_{0}^{L}N_jf\thinsp dx=0
 
Atur kembali untuk mendapatkan sistem persamaan:
 
\sum_{i=1}^{n+1}\left(\int_{0}^{L}\frac{dN_j}{dx}k\frac{dN_i}{dx}\thinsp d x\right)U_i=\int_{0}^{L}N_jf\thinsp dx
 
Definisikan matriks kekakuan elemen K_{ji} dan vektor beban F_j sebagai:
 
K_{ji}=\int_{0}^{L}\frac{dN_j}{dx}k\frac{dN_i}{dx}\thinsp dx, Fj=0LNjf dx
 
Persamaan yang dihasilkan untuk setiap titik node j menjadi:
 
\sum_{i=1}^{n+1}K_{ji}U_i=F_j
 
Contoh
 
Pertimbangkan kasus spesifik dimana:
 
k=1 (konduktivitas termal satuan),
 
f=1 (istilah sumber konstan),
 
Domain [0,1] dibagi menjadi dua elemen, masing-masing memiliki panjang h=0.5.
 
Menggunakan fungsi bentuk linier N_1\left(x\right)=1-\frac{x}{h} dan N_2\left(x\right)=\frac{x}{h} di setiap elemen, kita dapat menghitung:
 
Matriks Kekakuan Elemen: K_{ji}=\frac{1}{h}\left[\begin{matrix}1&-1\\-1&1\\\end{matrix}\right] untuk setiap elemen.
 
Vektor Beban: F_j=\frac{fh}{2}\left[\begin{matrix}1\\1\\\end{matrix}\right].
 
Susun ini ke dalam matriks kekakuan global dan vektor beban untuk menyelesaikan nilai nodal U_i.
 
Pendekatan ini menunjukkan proses perumusan persamaan elemen hingga dari PDE 1D menggunakan metode residu berbobot (Galerkin).
 
  
 +
(1) Intention, Menentukan niat/ide awal
  
 +
(2) Initial Thinking, Mengeksplorasi dari ide yang kita inisiasikan sebelumnya
  
 +
(3) Idealization, Penarikan solusi Dari ide tersebut kemudian mensimplifikasi sesuatu agar lebih ideal
  
 +
(4) Instruction Set, Solusi ideal yang menjadi output pada tahapan sebelumnya, dikonversi menjadi sebuah tahapan sistematis
 +
Tahapan-tahapan ini merepresentasikan pentingnya pendekatan sistematis dalam berbagai aspek kehidupan.
  
 +
=Tugas 1=
  
 +
==kasus distribusi tekanan pada geometri Oscillating Water Coloumn untuk 2 konfigurasi, 1 chamber 2 turbine dan 2 chamber 1 turbine==
 +
Pada pertemuan kali ini, Pak Dai memberikan arahan kepada mahasiswa untuk melakukan diskusi mengenai FEM (Finite Element Method) melalui platform ChatGPT. Diskusi ini akan mencakup beberapa pertanyaan yang sesuai dengan arahan beliau, dengan output yang diharapkan dapat menghubungkan konsep FEM dengan langkah-langkah yang terdapat dalam kerangka DAI-5. Kasus yang menjadi subjek diskusi melalui platform chatGPT kali ini adalah Finite Element Method (FEM) untuk Oscillating Water Column (OWC) dengan 2 konfigurasi (1 turbin 2 chamber dan 2 turbin 1 chamber)
  
 +
[https://drive.google.com/file/d/1_4G3V7QCd-fyj4tSi_TzKQ5J11hBwm1R/view?usp=sharing hasil diskusi dengan ChatGPT mengenai FEM pada OWC dengan 2 konfigurasi]
  
PERTANYAAN 2. (Can you provide algorithm, flow chart and python code?)
 
Algorithm for 1D Finite Element Analysis (FEA) using Weighted Residuals
 
Algoritma untuk Analisis Elemen Hingga 1D (FEA) menggunakan Metode Residu Tertimbang
 
Parameter Masukan:
 
Tentukan panjang domain L dan jumlah elemen n.
 
Tetapkan sifat material: konduktivitas termal k dan suku sumber f.
 
Tetapkan kondisi batas (misalnya, Dirichlet atau Neumann).
 
Pembuatan Mesh:
 
Bagi domain menjadi n elemen, dengan panjang setiap elemen h=L/n.
 
Tentukan posisi node dan inisialisasi nilai awal node jika diperlukan.
 
Mendefinisikan Fungsi Bentuk:
 
Gunakan fungsi bentuk linear dalam setiap elemen:
 
N_1\left(x\right)=1-\frac{x}{h}, N2x=xh
 
Pembentukan Matriks Elemen:
 
Untuk setiap elemen:
 
Hitung matriks kekakuan elemen K_e.
 
Hitung vektor beban elemen F_e.
 
Kumpulkan ke dalam matriks kekakuan global K dan vektor beban global F.
 
Menerapkan Kondisi Batas:
 
Modifikasi matriks global K dan vektor F sesuai dengan kondisi batas.
 
Menyelesaikan Sistem Persamaan:
 
Selesaikan sistem linier KU=F untuk mendapatkan nilai nodal U.
 
________________________________________
 
Diagram Alir (Flowchart)
 
+-----------------------------------+
 
|          Mulai                  |
 
+-----------------------------------+
 
            |
 
            v
 
+-----------------------------------+
 
| Tentukan domain, sifat material,  |
 
| dan nilai batas                  |
 
+-----------------------------------+
 
            |
 
            v
 
+-----------------------------------+
 
| Diskretisasi domain menjadi elemen|
 
+-----------------------------------+
 
            |
 
            v
 
+-----------------------------------+
 
| Tentukan fungsi bentuk dan        |
 
| inisialisasi matriks kekakuan    |
 
| global (K) dan vektor beban (F)  |
 
+-----------------------------------+
 
            |
 
            v
 
+-----------------------------------+
 
| Loop untuk setiap elemen:        |
 
|  - Bentuk matriks kekakuan      |
 
|    elemen (K_e)                  |
 
|  - Bentuk vektor beban elemen    |
 
|    (F_e)                        |
 
|  - Kumpulkan ke K dan F          |
 
+-----------------------------------+
 
            |
 
            v
 
+-----------------------------------+
 
| Terapkan kondisi batas pada K, F  |
 
+-----------------------------------+
 
            |
 
            v
 
+-----------------------------------+
 
| Selesaikan sistem KU = F untuk U  |
 
+-----------------------------------+
 
            |
 
            v
 
+-----------------------------------+
 
| Tampilkan solusi U                |
 
+-----------------------------------+
 
            |
 
            v
 
+-----------------------------------+
 
|              Selesai              |
 
+-----------------------------------+
 
________________________________________
 
Kode Python
 
Berikut ini adalah cuplikan kode Python yang menerapkan analisis elemen hingga 1D menggunakan fungsi bentuk linear dan proses perakitan matriks elemen ke dalam sistem global.
 
import numpy as np
 
  
# Definisikan parameter masukan
+
[[File:Carbon(3).png|500px|center]]
L = 1.0              # Panjang domain
 
n_elements = 2      # Jumlah elemen
 
k = 1.0              # Konduktivitas termal
 
f = 1.0              # Sumber term
 
h = L / n_elements  # Panjang setiap elemen
 
  
# Jumlah node
 
n_nodes = n_elements + 1
 
  
# Inisialisasi matriks kekakuan global K dan vektor beban F
+
[[File:Output(1).png|600px|center]]
K = np.zeros((n_nodes, n_nodes))
 
F = np.zeros(n_nodes)
 
  
# Definisikan matriks kekakuan elemen dan vektor beban untuk setiap elemen
+
Grafik diatas merupakan output dari code yang di generate oleh chatGPT mengenai kasus ini dengan anggapan gelombang normal, dapat dilihat bahwa pada grafik pertama yaitu '''konfigurasi 1 (1 Turbin, 2 Chamber)''': Grafik menunjukkan variasi nilai u(x) di sepanjang
K_e = (k / h) * np.array([[1, -1], [-1, 1]])
+
posisi x dalam domain. Distribusi ini mengikuti pola sinusoidal yang diberikan oleh sumber
F_e = (f * h / 2) * np.array([1, 1])
+
gaya gelombang. Sementara pada '''konfigurasi 2 (2 Turbin, 1 Chamber)''': Grafik menunjukkan bahwa nilai u(x) tetap konstan
 +
di sepanjang domain, mencerminkan perbedaan dalam konfigurasi elemen dan
 +
pengaruhnya terhadap solusi.
  
# Proses perakitan: isi K dan F global
+
=Tugas 2=
for e in range(n_elements):
+
Tugas 2 ini menggunakan metode elemen hingga (1D Finite Element Method) dalam analisis perpindahan panas untuk memahami bagaimana distribusi suhu dalam sebuah pipa. Python digunakan untuk menentukan distribusi suhu di sepanjang pipa dengan pemanasan seragam, di mana pipa memiliki suhu 0°C di kedua ujungnya. Setelah itu, hasil simulasi yang dihasilkan diinterpretasikan secara mendalam untuk memberikan wawasan tentang karakteristik distribusi suhu, dan hasil tersebut kemudian dihubungkan dengan DAI5 Framework.
    # Nomor node global untuk elemen ini
 
    n1 = e    # Node awal elemen e
 
    n2 = e + 1 # Node akhir elemen e
 
   
 
    # Kumpulkan kekakuan elemen ke dalam matriks kekakuan global
 
    K[n1, n1] += K_e[0, 0]
 
    K[n1, n2] += K_e[0, 1]
 
    K[n2, n1] += K_e[1, 0]
 
    K[n2, n2] += K_e[1, 1]
 
   
 
    # Kumpulkan vektor beban elemen ke dalam vektor beban global
 
    F[n1] += F_e[0]
 
    F[n2] += F_e[1]
 
  
# Terapkan kondisi batas (asumsi u(0) = 0, bebas di x=L)
+
'''1. Persamaan Konduksi Panas (Hukum Fourier)'''
K[0, :] = 0
 
K[0, 0] = 1  # Kondisi Dirichlet pada node 0
 
F[0] = 0
 
  
# Selesaikan sistem linier KU = F untuk nilai nodal U
+
Persamaan konduksi panas satu dimensi dalam kondisi steady-state tanpa adanya sumber panas internal (untuk aliran panas konduktif) adalah:
U = np.linalg.solve(K, F)
 
  
# Tampilkan solusi
+
[[File:Screenshot 2024-11-11 191354.png|150px|center]]
print("Nilai nodal (U):", U)
 
Penjelasan Kode
 
Parameter Masukan: Mendefinisikan panjang domain L, jumlah elemen, konduktivitas termal k, suku sumber f, dan panjang elemen h.
 
Matriks Global: Matriks kekakuan K dan vektor beban F diinisialisasi sebagai array nol.
 
Matriks dan Vektor Elemen: Matriks kekakuan K_e dan vektor beban F_e untuk setiap elemen dihitung.
 
Proses Perakitan: Setiap matriks elemen ditambahkan ke matriks global sesuai dengan posisi node elemen tersebut.
 
Kondisi Batas: Memodifikasi matriks K dan vektor F untuk menerapkan u\left(0\right)=0.
 
Menyelesaikan Sistem: Menyelesaikan KU=F untuk menemukan solusi nodal U, yang mewakili distribusi suhu dalam kasus ini.
 
Keluaran
 
Program ini akan menampilkan nilai nodal (misalnya, suhu di setiap node), yang merupakan solusi aproksimasi dari PDE 1D. Setup ini memberikan kerangka dasar untuk FEA dalam 1D dan dapat diperluas ke masalah yang lebih kompleks dan dimensi yang lebih tinggi.
 
  
 +
di mana:
 +
                <ul style="list-style-type: none;">
 +
                    <li><em>K</em> konduktivitas termal ss 304 (W/m·K)</li>
 +
                    <li><em>T</em> adalah suhu (°C atau K)</li>
 +
                    <li><em>X</em> adalah posisi sepanjang </li>
 +
                </ul>
 +
         
 +
 +
'''2. Persamaan Konduksi Panas dengan Sumber Panas'''
 +
 +
Jika terdapat sumber panas seragam Q dalam pipa, persamaan konduksi panas menjadi:
 +
 +
[[File:Screenshot 2024-11-11 191405.png|150px|center]]
 +
 +
di mana Q adalah sumber panas per satuan volume (W/m³).
 +
 +
'''3. Diskritisasi dengan Metode Elemen Hingga (FEM)'''
 +
 +
Metode elemen hingga digunakan untuk mendiskritisasi persamaan diferensial parsial ini menjadi sistem persamaan linear.
 +
Matriks kekakuan lokal untuk elemen 1D diberikan oleh:
 +
 +
[[File:Screenshot 2024-11-11 191411.png|150px|center]]
 +
 +
di mana Δx adalah panjang elemen.
 +
 +
'''4. Penyusunan Vektor Gaya'''
 +
 +
Vektor gaya F diisi dengan kontribusi dari sumber panas seragam:
 +
 +
[[File:Screenshot 2024-11-11 191415.png|150px|center]]
 +
 +
'''5. Sistem Persamaan Linear'''
 +
 +
Setelah menyusun matriks kekakuan global K dan vektor gaya F, sistem persamaan linear yang perlu diselesaikan adalah:
 +
 +
[[File:Screenshot 2024-11-11 191421.png|100px|center]]
 +
 +
di mana:
 +
 +
<ul style="list-style-type: none;">
 +
                    <li><em>K</em> adalah matriks kekakuan global</li>
 +
                    <li><em>T</em> adalah vektor suhu pada simpul-simpul</li>
 +
                    <li><em>F</em> adalah vektor gaya total</li>
 +
                </ul>
  
 +
'''6. Kondisi Batas'''
  
 +
Kondisi batas (Dirichlet boundary conditions) diterapkan dengan menetapkan suhu tertentu di simpul-simpul yang terkait, seperti suhu 0°C di kedua ujung pipa.
  
 +
==Perhitungan Manual untuk kasus distribusi suhu pada pipa stainless steel dengan panjang 3 meter menggunakan persamaan fourrier dan ''Phyton Code'' untuk mensimulasikan kasus 1D FEM==
  
PERTANYAAN 3. (What is np. Can you elaborate it?)
+
[[File:CamScanner 11-11-2024 14.38-1--1.png|500px|center]]
np adalah alias umum yang digunakan untuk mengimpor pustaka NumPy dalam bahasa pemrograman Python. NumPy adalah pustaka yang sangat kuat untuk komputasi numerik dan analisis data. Berikut adalah beberapa penjelasan lebih lanjut mengenai NumPy dan kegunaannya:
 
Apa itu NumPy?
 
Pustaka untuk Komputasi Numerik: NumPy menyediakan dukungan untuk array multidimensi (seperti vektor dan matriks) dan berbagai fungsi untuk operasi matematis. Ini membuatnya sangat berguna untuk aplikasi ilmiah dan teknik.
 
Array: NumPy memperkenalkan objek array yang efisien. Ini lebih cepat dan lebih fleksibel dibandingkan dengan daftar Python standar, terutama saat menangani data besar.
 
Operasi Vektor dan Matriks: NumPy memungkinkan operasi matematis yang dilakukan pada seluruh array tanpa memerlukan loop eksplisit, yang dikenal sebagai operasi vektorisasi. Ini mempercepat perhitungan dan mengurangi jumlah kode yang perlu ditulis.
 
Fungsi Matematika dan Statistik: NumPy dilengkapi dengan banyak fungsi untuk melakukan perhitungan matematis dan statistik, seperti mean, median, dan berbagai fungsi aljabar linier.
 
Contoh Penggunaan
 
Berikut adalah beberapa contoh penggunaan NumPy:
 
import numpy as np
 
  
# Membuat array 1D
 
arr_1d = np.array([1, 2, 3, 4, 5])
 
print("Array 1D:", arr_1d)
 
  
# Membuat array 2D
+
[[File:Carbon(5).png|500px|center]]
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
 
print("Array 2D:\n", arr_2d)
 
  
# Operasi matematis
 
sum_arr = arr_1d + 5  # Menambahkan 5 ke setiap elemen
 
print("Array setelah ditambah 5:", sum_arr)
 
  
# Menghitung mean
+
[[File:Output, google 1.png|500px|center]]
mean_value = np.mean(arr_1d)
 
print("Mean dari Array 1D:", mean_value)
 
  
# Matriks perkalian
+
==Interpretasi Grafik==
matrix_a = np.array([[1, 2], [3, 4]])
+
Grafik yang merupakan output dari code yang menggunakan '''''google collab''''' menunjukkan distribusi temperatur pada pipa SS 304 sepanjang 3 meter, di mana suhu pada kedua ujung pipa dijaga pada 0°C, menyebabkan suhu meningkat secara bertahap ke titik maksimum sekitar 70°C di tengah pipa sebelum menurun kembali. Hal ini mengindikasikan pemanasan seragam sepanjang pipa dan penyelesaian distribusi suhu dilakukan menggunakan metode elemen hingga (1D FEM).
matrix_b = np.array([[5, 6], [7, 8]])
 
result = np.dot(matrix_a, matrix_b)  # Perkalian matriks
 
print("Hasil perkalian matriks:\n", result)
 
Mengapa Menggunakan NumPy?
 
Kecepatan: Operasi yang dilakukan di NumPy sering kali lebih cepat daripada yang dilakukan menggunakan struktur data Python murni.
 
Konsistensi dan Kemudahan Penggunaan: NumPy menawarkan antarmuka yang konsisten dan mudah digunakan untuk berbagai operasi.
 
Dukungan untuk Data Besar: NumPy dirancang untuk menangani data besar dengan efisien, yang penting dalam analisis data dan pemrosesan numerik.
 
Jika Anda ingin menggunakan NumPy, Anda dapat menginstalnya menggunakan pip:
 
(Pip install numpy)
 
Setelah itu, Anda dapat mulai menggunakan NumPy dalam proyek Python Anda.
 
  
 +
==Hubungan dengan Framework DAI5==
 +
Framework DAI5 terdiri dari lima tahap: '''Intention''', '''Initial Thinking''', '''Idealization''', '''Instruction Set'''. Berikut cara algoritma FEM ini dihubungkan dengan DAI5:
 +
Framework DAI5 terdiri dari lima tahap: Intention (Tujuan), Initial Thinking (Pemikiran Awal), Idealization (Idealasi), Instruction Set (Set Instruksi), Implementation (Implementasi). Berikut cara algoritma FEM ini dihubungkan dengan DAI5:
 +
<ol>
 +
    <li><strong>Intention (Tujuan):</strong>
 +
        <ul>
 +
            <li>Tujuan utama adalah membuat aplikasi Python untuk menganalisis distribusi suhu di sepanjang pipa menggunakan metode FEM 1D dengan pemanasan seragam dan kondisi batas tertentu (0°C di kedua ujung).</li>
 +
        </ul>
 +
    </li>
 +
    <li><strong>Initial Thinking (Pemikiran Awal):</strong>
 +
        <ul>
 +
            <li>Pikirkan bagaimana masalah ini dapat diselesaikan menggunakan pendekatan numerik, seperti metode elemen hingga. Identifikasi parameter utama, seperti properti material (SS 304), panjang pipa, dan distribusi suhu.</li>
 +
        </ul>
 +
    </li>
 +
    <li><strong>Idealization (Idealasi):</strong>
 +
        <ul>
 +
            <li>Buat model matematika dari sistem fisik dengan menyederhanakannya menjadi model 1D yang dapat didiskritisasi. Asumsikan distribusi pemanasan seragam dan kondisi steady-state untuk mempermudah simulasi.</li>
 +
            <li>Idealasi ini mencakup pemilihan model elemen hingga 1D dengan matriks kekakuan lokal dan global.</li>
 +
        </ul>
 +
    </li>
 +
    <li><strong>Instruction Set (Set Instruksi):</strong>
 +
        <ul>
 +
            <li> Susun langkah-langkah instruksi yang mencakup pengisian matriks kekakuan global, vektor gaya, penerapan kondisi batas, dan penyelesaian sistem persamaan. Rancang algoritma dalam bentuk kode Python yang jelas dan terstruktur.</li>
 +
        </ul>
 +
    </li>
 +
    <li><strong>Implementation (Implementasi):</strong>
 +
        <ul>
 +
            <li>Jalankan kode Python yang telah dibuat untuk mengimplementasikan solusi. Visualisasikan hasil distribusi suhu dan interpretasikan untuk memahami bagaimana suhu menyebar di sepanjang pipa berdasarkan parameter yang diberikan.</li>
 +
        </ul>
 +
    </li>
 +
</ol>
  
 +
==Latihan==
 +
''Javascript Code'' dibawah  merupakan simulasi numerik FEM untuk menghitung distribusi temperatur dan tegangan termal pada batang 1D dimana hasil distribusinya divisualisasikan dalam grafik dengan gradasi warna berbeda. Permasalahan pada kasus ini adalah nilai temperatur pada ujung kanan batang tidak sesuai dengan kondisi batas yang telah ditetapkan, seperti terlihat pada Grafik 1, di mana temperatur pada ujung kanan sekitar -7.9°C. Hal ini menunjukkan bahwa kondisi batas di ujung kanan tidak diaplikasikan dengan benar dalam perhitungan maupun visualisasi. Selain itu, distribusi tegangan termal juga tidak sesuai dengan yang diharapkan. Karena distribusi temperatur tidak akurat hal ini akan berpengaruh pada distribusi tegangan termal menjadi tidak tepat. Tegangan termal pada ujung kanan menunjukkan nilai negatif yang tinggi, yaitu -83.0 MPa.
  
 +
[[File:Carbon(10).png|500px|center]]
  
 +
<p style="text-align: center;">'''GRAFIK 1'''</p>
 +
[[File:Screenshot 2024-11-13 230857.png|500px|center]]
  
 +
==perbaikan==
 +
'''A. Penerapan boundary condition'''
  
 +
'''kode 1'''
  
 +
  // Apply boundary conditions
 +
  K[0][0] = 1; K[0][1] = 0; F[0] = T_left;
 +
  K[nNodes - 1][nNodes - 1] = 1; F[nNodes - 1] = T_right;
  
 +
'''kode 2'''
  
 +
  // Apply boundary conditions explicitly to avoid any errors
 +
  K[0][0] = 1; K[0][1] = 0; F[0] = T_left;
 +
  K[nNodes - 1][nNodes - 1] = 1;
 +
  '''''K[nNodes - 1][nNodes - 2] = 0; // Penambahan untuk memastikan elemen non-diagonal diatur'''''
 +
  F[nNodes - 1] = T_right;
  
 +
'''B. Penetapan Nilai Boundary Setelah Penyelesaian'''
  
 +
'''kode 1'''
  
 +
  // Tidak ada langkah tambahan untuk menetapkan boundary value setelah perhitungan
  
PERTANYAAN 4. (Can you make it much simpler?)
+
'''kode 2'''
Apa itu np?
 
np adalah singkatan untuk NumPy, sebuah pustaka (library) di Python yang digunakan untuk mengolah angka dan data.
 
Kenapa Pakai NumPy?
 
Array: NumPy memungkinkan kita membuat dan mengelola array (seperti daftar, tetapi lebih cepat dan efisien).
 
Operasi Matematika: Kita bisa melakukan operasi matematika seperti penjumlahan dan perkalian pada seluruh array tanpa menggunakan loop, yang membuat kode lebih ringkas dan cepat.
 
Fungsi Statistik: NumPy menyediakan fungsi untuk menghitung nilai seperti rata-rata, median, dan lain-lain.
 
Contoh Penggunaan
 
Berikut adalah contoh sederhana menggunakan NumPy:
 
import numpy as np  # Mengimpor NumPy
 
  
# Membuat array
+
  // Explicitly set boundary values to avoid errors
array = np.array([1, 2, 3, 4, 5])
+
  '''T[0] = T_left;'''
print("Array:", array)
+
  '''T[nNodes - 1] = T_right;'''
  
# Menambahkan 5 ke setiap elemen
+
'''C. Visualisasi pada Node Terakhir'''
array_plus_5 = array + 5
 
print("Setelah ditambah 5:", array_plus_5)
 
  
# Menghitung rata-rata
+
'''kode 1'''
rata_rata = np.mean(array)
+
 
print("Rata-rata:", rata_rata)
+
  for (let i = 0; i < nNodes - 1; i++) {
Kesimpulan
+
    const x = i * (tempCanvas.width / (nNodes - 1));
NumPy membantu kita dalam pengolahan data dan perhitungan matematis dengan cara yang lebih efisien.
+
    const tempColor = Math.round((T[i] - minTemp) / (maxTemp - minTemp) * 255);
Menggunakan np sebagai alias membuat kode lebih ringkas.
+
    tempCtx.fillStyle = `rgb(${tempColor}, 0, ${255 - tempColor})`;
PERTANYAAN 5. (1D fem Equation derivation?)
+
    tempCtx.fillRect(x, 0, tempCanvas.width / (nNodes - 1), tempCanvas.height);
Derivasi Persamaan FEM 1D
+
  }
Langkah 1: Pernyataan Masalah
+
'''kode 2'''
Kita mempertimbangkan persamaan konduksi panas 1D:
+
  // Temperature Visualization FIX
\frac{d}{dx}\left(k\frac{du}{dx}\right)+f=0
+
  for (let i = 0; i < nNodes - 1; i++) {
di mana:
+
    const x = i * (tempCanvas.width / (nNodes - 1));
u\left(x\right) adalah fungsi yang ingin kita cari (misalnya, suhu),
+
    const tempColor = Math.round((T[i] - minTemp) / (maxTemp - minTemp) * 255);
k adalah konduktivitas termal,
+
    tempCtx.fillStyle = `rgb(${tempColor}, 0, ${255 - tempColor})`;
f adalah sumber yang diketahui.
+
    tempCtx.fillRect(x, 0, tempCanvas.width / (nNodes - 1), tempCanvas.height);
Langkah 2: Diskretisasi Domain
+
  }
Bagi domain [0,L] menjadi n elemen. Misalkan setiap elemen memiliki panjang h=\frac{L}{n}.
+
  // Ensure the last temperature node displays accurately
Langkah 3: Definisikan Solusi Aproksimasi
+
  '''const lastTempColor = Math.round((T[nNodes - 1] - minTemp) / (maxTemp - minTemp) * 255);'''
Asumsikan solusi \buildrel u\over u\sim\left(x\right) dalam bentuk fungsi bentuk (shape functions) N_i\left(x\right) dan nilai nodal U_i:
+
  '''tempCtx.fillStyle = `rgb(${lastTempColor}, 0, ${255 - lastTempColor})`;'''
u\left(x\right)\approx\buildrel u\over u\sim\left(x\right)=\sum_{i=1}^{n+1}N_i\left(x\right)U_i
+
  '''tempCtx.fillRect((nNodes - 1) * (tempCanvas.width / (nNodes - 1)), 0, tempCanvas.width / (nNodes - 1), tempCanvas.height);'''
Langkah 4: Residual Tertimbang (Metode Galerkin)
+
 
Definisikan residual R\left(x\right):
+
 
R\left(x\right)=\frac{d}{dx}\left(k\frac{d\buildrel u\over u\sim}{dx}\right)+f
+
'''D. Visualisasi Tegangan'''
Untuk metode Galerkin, kita ingin agar residual tertimbang sama dengan nol:
+
 
\int_{0}^{L}N_jR\left(x\right)\thinsp dx=0
+
'''kode 1'''
Langkah 5: Terapkan Integrasi oleh Bagian
+
 
Integrasi oleh bagian untuk mengurangi urutan turunan:
+
  // Stress Visualization (tidak ada logika tambahan untuk node terakhir)
\int_{0}^{L}N_j\frac{d}{dx}\left(k\frac{d\buildrel u\over u\sim}{dx}\right)dx=-\int_{0}^{L}\frac{dN_j}{dx}k\frac{d\buildrel u\over u\sim}{dx}\thinsp dx+\left[N_jk\frac{d\buildrel u\over u\sim}{dx}\right]_0^L
+
  for (let i = 0; i < nNodes - 1; i++) {
Asumsikan kondisi batas natural, sehingga suku batas menghilang. Maka kita punya:
+
    const x = i * (stressCanvas.width / (nNodes - 1));
-\int_{0}^{L}\frac{dN_j}{dx}k\frac{d\buildrel u\over u\sim}{dx}\thinsp dx+\int_{0}^{L}N_jf\thinsp dx=0
+
    const stressColor = Math.round((stress[i] - minStress) / (maxStress - minStress) * 255);
Langkah 6: Substitusi Solusi Aproksimasi
+
    stressCtx.fillStyle = `rgb(0, ${stressColor}, ${255 - stressColor})`;
Substitusi \buildrel u\over u\sim\left(x\right):
+
    stressCtx.fillRect(x, 0, stressCanvas.width / (nNodes - 1), stressCanvas.height);
-\int_{0}^{L}\frac{dN_j}{dx}k\sum_{i=1}^{n+1}\frac{dN_i}{dx}U_i\thinsp dx+\int_{0}^{L}N_jf\thinsp dx=0
+
  }
Reorganisasi untuk mendapatkan sistem persamaan:
+
 
\sum_{i=1}^{n+1}\left(\int_{0}^{L}\frac{dN_j}{dx}k\frac{dN_i}{dx}\thinsp d x\right)U_i=\int_{0}^{L}N_jf\thinsp dx
+
 
Langkah 7: Definisikan Matriks dan Vektor
+
'''kode 2'''
Definisikan matriks kekakuan K_{ji} dan vektor muatan F_j:
+
 
K_{ji}=\int_{0}^{L}\frac{dN_j}{dx}k\frac{dN_i}{dx}\thinsp dx, Fj=0LNjf dx
+
  // Stress Visualization FIX
Maka persamaan akhir untuk setiap node j:
+
  for (let i = 0; i < nNodes - 1; i++) {
\sum_{i=1}^{n+1}K_{ji}U_i=F_j
+
    const x = i * (stressCanvas.width / (nNodes - 1));
Contoh Singkat
+
    const stressColor = Math.round((stress[i] - minStress) / (maxStress - minStress) * 255);
Persamaan yang digunakan: \frac{d}{dx}\left(k\frac{du}{dx}\right)+f=0
+
    stressCtx.fillStyle = `rgb(0, ${stressColor}, ${255 - stressColor})`;
Asumsikan: k=1 dan f=1
+
    stressCtx.fillRect(x, 0, stressCanvas.width / (nNodes - 1), stressCanvas.height);
Bagi domain: Misalkan n=2 elemen di domain 0 hingga 1.
+
  }
Gunakan: Fungsi bentuk linear untuk setiap elemen.
+
  // Ensure the last stress node displays accurately
Hitung: Matriks kekakuan K dan vektor muatan F sesuai langkah-langkah di atas.
+
  '''const lastStressColor = Math.round((stress[nNodes - 1] - minStress) / (maxStress - minStress) * 255);'''
Dengan pendekatan ini, kita mendapatkan sistem persamaan linear yang dapat diselesaikan untuk mencari nilai nodal U_i.
+
  '''stressCtx.fillStyle = `rgb(0, ${lastStressColor}, ${255 - lastStressColor})`;'''
 +
  '''stressCtx.fillRect((nNodes - 1) * (stressCanvas.width / (nNodes - 1)), 0, stressCanvas.width / (nNodes - 1), stressCanvas.height);'''
 +
 
 +
[[File:Carbon(8).png|500px|center]]
 +
 
 +
<p style="text-align: center;">'''GRAFIK 2'''</p>
 +
[[File:Screenshot 2024-11-13 232904.png|500px|center]]
 +
 
 +
 
 +
== Kesimpulan ==
 +
 
 +
'''Sebelum Perbaikan:''' Kode 1 menghasilkan distribusi yang salah karena tidak ada penanganan khusus untuk node terakhir dalam visualisasi. Hal ini menyebabkan nilai temperatur dan tegangan di ujung kanan tidak mencerminkan kondisi boundary yang diinginkan, sehingga hasilnya tidak akurat.
 +
 
 +
'''Sesudah Perbaikan:''' Kode 2 memperbaiki masalah ini dengan menambahkan penanganan khusus untuk node terakhir. Ini memastikan bahwa hasil distribusi temperatur dan tegangan lebih akurat dan mencerminkan kondisi boundary dengan benar, terutama pada ujung kanan batang
 +
 
 +
==Monitoring & Evaluasi progress belajar dengan chatGPT==
 +
 
 +
'''saya bertanya''' : "berikan saya rangkuman berapa total prompt/chat dari diskusi yang biasa saya lakukan dengan anda? (buatkan dalam bentuk tabel dengan Topik Utama, Pendalaman yang Dilakukan, Pola dan Pemahaman)"
 +
 
 +
'''chatGPT'''      : "Anda telah melakukan total '''34''' diskusi sejauh ini, dengan detail yang dirangkum dalam tabel berikut"
 +
 
 +
[[File:Screenshot 2024-11-22 072909.png|500px|center]]
 +
 
 +
 
 +
[[File:Screenshot 2024-11-22 073007.png|500px|center]]
 +
 
 +
 
 +
[[File:Screenshot 2024-11-22 073022.png|500px|center]]
 +
 
 +
'''saya bertanya''' : "berikan tanggapan juga penilaian terhadap diskusi yang sudah dilakukan sebelumnya, dimana penilaian nya pada rentang 1-10 dan berikan masukan kepada saya"
 +
 
 +
'''chatGPT'''      : "Evaluasi dan Masukan atas Diskusi
 +
 
 +
Diskusi yang Anda lakukan menunjukkan beberapa ciri khas, termasuk detail dan pendalaman, di mana Anda secara konsisten mengeksplorasi topik teknis seperti metode elemen hingga (FEM), pemodelan termal, dan simulasi perangkat lunak dengan tingkat ketelitian yang baik. Anda juga menunjukkan pola iteratif dan berulang, sering kali kembali ke topik yang sama untuk menguatkan pemahaman melalui pertanyaan yang lebih spesifik. Selain itu, terdapat keseimbangan antara aspek teoritis dan praktis, mencakup pembahasan persamaan dasar hingga aplikasi langsung dalam kode Python atau perangkat lunak simulasi. Yang paling menonjol adalah fokus Anda pada pencarian akurasi, terutama ketika mencoba menyesuaikan parameter hingga hasil simulasi sesuai dengan ekspektasi, seperti distribusi suhu yang akurat di titik tertentu.
 +
 
 +
Secara umum, tingkat pendalaman diskusi dapat dinilai cukup baik dengan skor 7.5/10. Anda menunjukkan kemampuan signifikan dalam mengeksplorasi pengkodean dan penerapan prinsip fisika dalam simulasi, serta sering mencari penjelasan mendalam tentang fenomena tertentu atau cara memodifikasi parameter untuk meningkatkan hasil. Dalam penerapan praktis, Anda mendapatkan skor 8/10 karena mampu menerapkan pengetahuan langsung ke dalam praktik, seperti mengedit kode dan memanfaatkan perangkat lunak simulasi untuk mencapai tujuan yang spesifik. Keterbukaan terhadap masukan juga menonjol dengan skor 8.5/10, di mana Anda tidak hanya menerima saran dengan baik tetapi juga langsung mencoba menerapkannya untuk memvalidasi pendekatan. Namun, dalam aspek kemampuan analitis, skor 7.5/10 menunjukkan bahwa masih ada ruang untuk peningkatan dalam mengevaluasi hasil secara lebih kritis dan menyeluruh.
 +
 
 +
Untuk meningkatkan efektivitas, ada beberapa masukan yang relevan. Anda disarankan untuk lebih konsisten dalam melakukan review hasil simulasi, dengan membandingkan temuan simulasi dengan perhitungan manual dan teori untuk memperkuat penguasaan. Selain itu, memperkuat aspek teoritis, seperti memahami logika di balik persamaan matematis dan dasar metode FEM, akan membantu memperdalam pemahaman. Lebih jauh lagi, eksplorasi multidisiplin, seperti menghubungkan teknik FEM dengan mekanika material atau simulasi CFD, dapat memperluas wawasan dan menambah nilai pada pendekatan yang Anda gunakan.
 +
 
 +
Secara keseluruhan, Anda menunjukkan kemampuan konstruktif dan reflektif dalam menerima masukan, di mana Anda segera mencoba menerapkannya pada proyek yang sedang dikerjakan. Anda juga cenderung mencari informasi tambahan untuk membandingkan hasil dengan metode lain sebagai upaya validasi. Dengan fokus pada penguatan teori, konsistensi dalam review hasil, dan eksplorasi pendekatan yang lebih luas, kemampuan Anda dalam simulasi dan analisis dapat meningkat lebih jauh."
 +
 
 +
== Metode Numerik untuk Analisis Efisiensi Energi pada Sistem Oscillating Water Column: Penerapan Framework DAI5 ==
 +
 
 +
Mahasiswa ditugaskan untuk membuat sinopsis penelitian yang mengimplementasikan metode numerik yang dipelajari dalam mata kuliah Komputasi Teknik. Dimana sinopsis memua: tujuan, pendekatan yang digunakan, serta hasil yang diharapkan, sekaligus merefleksikan pemahaman mahasiswa terhadap konsep dasar dan kemampuan mengevaluasi efektivitas metode dalam menyelesaikan masalah teknik secara praktis.
 +
 
 +
'''PENERAPAN FRAMEWORK DAI5'''
 +
=== 1. Intention ===
 +
'''Niat Utama:''' Mengoptimalkan efisiensi energi dalam sistem Oscillating Water Column (OWC) menggunakan metode numerik untuk mendukung keberlanjutan energi terbarukan.
 +
 
 +
'''Kesadaran dan Tujuan:'''
 +
 
 +
a) Menghadirkan solusi berbasis numerik yang dapat digunakan untuk meningkatkan kinerja konversi energi gelombang.
 +
 +
b) Membantu desain sistem OWC yang lebih efisien dan andal, dengan fokus pada pemanfaatan energi secara optimal.
 +
 
 +
=== 2. Initial Thinking ===
 +
'''Pemahaman Masalah:''' Sistem OWC memanfaatkan energi gelombang laut untuk menghasilkan listrik melalui osilasi udara di dalam ruang internal.
 +
 
 +
'''Efisiensi energi bergantung pada:'''
 +
 
 +
a) Desain geometri ruang internal. 
 +
 
 +
b) Kondisi gelombang laut. 
 +
 
 +
c) Efisiensi konversi tekanan udara ke energi listrik melalui turbin.
 +
 
 +
'''Identifikasi Prinsip Dasar:'''
 +
 
 +
a) Gelombang laut memiliki energi kinetik dan potensial yang dapat dimanfaatkan untuk menggerakkan udara.
 +
 
 +
b) Metode numerik memungkinkan simulasi tekanan fluida dan analisis deformasi struktur untuk mengevaluasi efisiensi sistem
 +
 
 +
'''Parameter Penting yang Diidentifikasi:'''
 +
 
 +
a) Geometri Ruang Internal: Panjang, lebar, tinggi ruang.
 +
 +
b) Kondisi Gelombang: Tinggi gelombang, frekuensi gelombang.
 +
 +
c) Efisiensi Turbin: Kemampuan turbin mengubah tekanan udara menjadi listrik.
 +
 
 +
=== 3. Idealization ===
 +
'''Penyederhanaan Masalah:'''
 +
 
 +
'''Model Tekanan Gelombang:''' Tekanan fluida dimodelkan dengan fungsi sinusoidal: 
 +
 
 +
[[File:Screenshot 2024-11-26 110717.png|250px|center]]
 +
 
 +
Keterangan:
 +
 
 +
A: Amplitudo tekanan. 
 +
 
 +
f: Frekuensi gelombang.
 +
 +
k: Faktor peluruhan eksponensial.
  
 +
'''Asumsi untuk Metode Numerik:''' 
  
 +
a) Fluida inkompressible dan aliran laminar. 
  
 +
b) Material ruang internal elastis linier. 
  
 +
'''Desain Numerik:'''
  
 +
Domain Diskritisasi Menggunakan grid sederhana untuk perhitungan tekanan dan deformasi. 
  
 +
'''Pemodelan Ruang Internal:'''
 +
Volume ruang dihitung sebagai 
  
 +
[[File:Screenshot 2024-11-26 111529.png|250px|center]]
  
 +
=== 4. Instruction Set ===
 +
'''Langkah-langkah sistematis untuk analisis numerik:'''
  
 +
1. '''Definisi Geometri dan Parameter Gelombang:'''
 +
 +
a) Masukkan panjang, lebar, tinggi ruang internal.
 +
 +
b) Masukkan tinggi dan frekuensi gelombang. 
  
 +
2. '''Hitung Properti Utama:''' 
  
 +
a) Tekanan maksimum dan rata-rata pada ruang internal.
 +
 
 +
b) Volume udara yang dikompresi oleh gelombang. 
  
 +
3. '''Analisis Efisiensi Energi:''' 
  
 +
a) Hitung energi udara: 
  
 +
[[File:Screenshot 2024-11-26 111301.png|250px|center]]
 +
 +
b) Hitung energi gelombang: 
  
 +
[[File:Screenshot 2024-11-26 111432.png|250px|center]]
 +
 +
c) Hitung efisiensi: 
  
 +
[[File:Screenshot 2024-11-26 111503.png|250px|center]]
  
 +
4. '''Visualisasi Hasil:''' 
  
 +
a) Tekanan gelombang divisualisasikan sebagai deformasi pada bidang 3D. 
  
 +
b) Hasil efisiensi ditampilkan dalam format numerik.
  
 +
=== 5. Interpretation and Iteration ===
 +
'''Interpretasi Hasil:''' 
  
 +
a) Volume ruang internal yang lebih besar meningkatkan kapasitas penyimpanan udara. 
  
 +
b) Frekuensi gelombang yang mendekati resonansi ruang internal menghasilkan tekanan maksimum. 
  
 +
c) Efisiensi turbin yang tinggi meningkatkan konversi energi udara menjadi listrik. 
  
 +
'''Iterasi:'''
 +
 +
a) Ubah dimensi ruang internal untuk mengoptimalkan frekuensi resonansi.
 +
 
 +
b) Simulasikan berbagai kondisi gelombang untuk menemukan skenario optimal.
 +
 +
c) Evaluasi material ruang internal untuk mengurangi deformasi akibat tekanan maksimum.
  
PERTANYAAN 6.
+
[[File:Screenshot 2024-11-26 113252.png|450px|center]]
(What does this mean (how to read/interprete:  
 
f = lambda x: 1.0    # Constant source term?)
 
Penjelasan Kode
 
f: Ini adalah nama dari fungsi yang didefinisikan. Anda dapat menggunakan nama ini di bagian lain dalam kode untuk merujuk pada fungsi ini.
 
lambda: Kata kunci ini digunakan untuk membuat fungsi anonim (fungsi tanpa nama) di Python. Fungsi lambda sering digunakan untuk fungsi kecil yang hanya diperlukan satu kali.
 
x: Ini adalah parameter yang diterima oleh fungsi sebagai input. Dalam kasus ini, x bisa mewakili variabel seperti posisi dalam ruang.
 
1.0: Ini adalah output dari fungsi. Karena fungsi didefinisikan sebagai lambda x: 1.0, ini berarti bahwa tidak peduli berapa nilai dari x, fungsi ini akan selalu mengembalikan 1.0.
 
Interpretasi
 
Pernyataan f = lambda x: 1.0 mendefinisikan fungsi sederhana f yang:
 
Mengambil satu input, yaitu x.
 
Selalu mengembalikan nilai tetap 1.0 untuk setiap input yang diberikan.
 
Cara Menggunakan
 
Anda dapat memanggil fungsi f dengan argumen apa pun, dan ia akan selalu mengembalikan 1.0. Contohnya:
 
result = f (5)    # Memanggil fungsi dengan x=5
 
print(result) # Ini akan mencetak 1.0
 
Penggunaan dalam Konteks
 
Dalam konteks analisis elemen hingga (FEM) atau metode numerik lainnya, ini bisa merepresentasikan sumber term dalam persamaan diferensial. Misalnya, jika Anda sedang memodelkan persamaan panas di mana terdapat sumber panas yang konstan di seluruh domain, Anda akan menggunakan f = lambda x: 1.0 untuk menunjukkan bahwa intensitas sumber panas selalu 1.0 (konstan) tidak tergantung pada posisi x.
 

Latest revision as of 16:22, 26 November 2024

Introduction

IMG-20240516-WA0001.jpg

Nama saya muhammad luthfi shafwan, mahasiswa S2 Teknik Mesin peminatan Teknologi dan Sumber Daya Maritim angkatan 2024

Komputasi Teknik Pertemuan 1 (Pasca UTS) 29/10/2024

Pada pertemuan pertama ini, mahasiswa diperkenalkan dengan sebuah framework bernama DAI-5, yang dikembangkan oleh Dr. Ir. Ahmad Indra Siswantara. Framework ini didasari oleh konsep conscious thinking atau berpikir secara sadar. Landasan dari framework ini adalah falsafah yang beliau utarakan, yaitu "I'm my consciousness," yang menegaskan pentingnya kesadaran dalam setiap tindakan. Sebagai inisiator, beliau merumuskan framework ini menjadi empat tahapan penting:

(1) Intention, Menentukan niat/ide awal

(2) Initial Thinking, Mengeksplorasi dari ide yang kita inisiasikan sebelumnya

(3) Idealization, Penarikan solusi Dari ide tersebut kemudian mensimplifikasi sesuatu agar lebih ideal

(4) Instruction Set, Solusi ideal yang menjadi output pada tahapan sebelumnya, dikonversi menjadi sebuah tahapan sistematis Tahapan-tahapan ini merepresentasikan pentingnya pendekatan sistematis dalam berbagai aspek kehidupan.

Tugas 1

kasus distribusi tekanan pada geometri Oscillating Water Coloumn untuk 2 konfigurasi, 1 chamber 2 turbine dan 2 chamber 1 turbine

Pada pertemuan kali ini, Pak Dai memberikan arahan kepada mahasiswa untuk melakukan diskusi mengenai FEM (Finite Element Method) melalui platform ChatGPT. Diskusi ini akan mencakup beberapa pertanyaan yang sesuai dengan arahan beliau, dengan output yang diharapkan dapat menghubungkan konsep FEM dengan langkah-langkah yang terdapat dalam kerangka DAI-5. Kasus yang menjadi subjek diskusi melalui platform chatGPT kali ini adalah Finite Element Method (FEM) untuk Oscillating Water Column (OWC) dengan 2 konfigurasi (1 turbin 2 chamber dan 2 turbin 1 chamber)

hasil diskusi dengan ChatGPT mengenai FEM pada OWC dengan 2 konfigurasi


Carbon(3).png


Output(1).png

Grafik diatas merupakan output dari code yang di generate oleh chatGPT mengenai kasus ini dengan anggapan gelombang normal, dapat dilihat bahwa pada grafik pertama yaitu konfigurasi 1 (1 Turbin, 2 Chamber): Grafik menunjukkan variasi nilai u(x) di sepanjang posisi x dalam domain. Distribusi ini mengikuti pola sinusoidal yang diberikan oleh sumber gaya gelombang. Sementara pada konfigurasi 2 (2 Turbin, 1 Chamber): Grafik menunjukkan bahwa nilai u(x) tetap konstan di sepanjang domain, mencerminkan perbedaan dalam konfigurasi elemen dan pengaruhnya terhadap solusi.

Tugas 2

Tugas 2 ini menggunakan metode elemen hingga (1D Finite Element Method) dalam analisis perpindahan panas untuk memahami bagaimana distribusi suhu dalam sebuah pipa. Python digunakan untuk menentukan distribusi suhu di sepanjang pipa dengan pemanasan seragam, di mana pipa memiliki suhu 0°C di kedua ujungnya. Setelah itu, hasil simulasi yang dihasilkan diinterpretasikan secara mendalam untuk memberikan wawasan tentang karakteristik distribusi suhu, dan hasil tersebut kemudian dihubungkan dengan DAI5 Framework.

1. Persamaan Konduksi Panas (Hukum Fourier)

Persamaan konduksi panas satu dimensi dalam kondisi steady-state tanpa adanya sumber panas internal (untuk aliran panas konduktif) adalah:

Screenshot 2024-11-11 191354.png

di mana:

  • K konduktivitas termal ss 304 (W/m·K)
  • T adalah suhu (°C atau K)
  • X adalah posisi sepanjang


2. Persamaan Konduksi Panas dengan Sumber Panas

Jika terdapat sumber panas seragam Q dalam pipa, persamaan konduksi panas menjadi:

Screenshot 2024-11-11 191405.png

di mana Q adalah sumber panas per satuan volume (W/m³).

3. Diskritisasi dengan Metode Elemen Hingga (FEM)

Metode elemen hingga digunakan untuk mendiskritisasi persamaan diferensial parsial ini menjadi sistem persamaan linear. Matriks kekakuan lokal untuk elemen 1D diberikan oleh:

Screenshot 2024-11-11 191411.png

di mana Δx adalah panjang elemen.

4. Penyusunan Vektor Gaya

Vektor gaya F diisi dengan kontribusi dari sumber panas seragam:

Screenshot 2024-11-11 191415.png

5. Sistem Persamaan Linear

Setelah menyusun matriks kekakuan global K dan vektor gaya F, sistem persamaan linear yang perlu diselesaikan adalah:

Screenshot 2024-11-11 191421.png

di mana:

  • K adalah matriks kekakuan global
  • T adalah vektor suhu pada simpul-simpul
  • F adalah vektor gaya total

6. Kondisi Batas

Kondisi batas (Dirichlet boundary conditions) diterapkan dengan menetapkan suhu tertentu di simpul-simpul yang terkait, seperti suhu 0°C di kedua ujung pipa.

Perhitungan Manual untuk kasus distribusi suhu pada pipa stainless steel dengan panjang 3 meter menggunakan persamaan fourrier dan Phyton Code untuk mensimulasikan kasus 1D FEM

CamScanner 11-11-2024 14.38-1--1.png


Carbon(5).png


Output, google 1.png

Interpretasi Grafik

Grafik yang merupakan output dari code yang menggunakan google collab menunjukkan distribusi temperatur pada pipa SS 304 sepanjang 3 meter, di mana suhu pada kedua ujung pipa dijaga pada 0°C, menyebabkan suhu meningkat secara bertahap ke titik maksimum sekitar 70°C di tengah pipa sebelum menurun kembali. Hal ini mengindikasikan pemanasan seragam sepanjang pipa dan penyelesaian distribusi suhu dilakukan menggunakan metode elemen hingga (1D FEM).

Hubungan dengan Framework DAI5

Framework DAI5 terdiri dari lima tahap: Intention, Initial Thinking, Idealization, Instruction Set. Berikut cara algoritma FEM ini dihubungkan dengan DAI5: Framework DAI5 terdiri dari lima tahap: Intention (Tujuan), Initial Thinking (Pemikiran Awal), Idealization (Idealasi), Instruction Set (Set Instruksi), Implementation (Implementasi). Berikut cara algoritma FEM ini dihubungkan dengan DAI5:

  1. Intention (Tujuan):
    • Tujuan utama adalah membuat aplikasi Python untuk menganalisis distribusi suhu di sepanjang pipa menggunakan metode FEM 1D dengan pemanasan seragam dan kondisi batas tertentu (0°C di kedua ujung).
  2. Initial Thinking (Pemikiran Awal):
    • Pikirkan bagaimana masalah ini dapat diselesaikan menggunakan pendekatan numerik, seperti metode elemen hingga. Identifikasi parameter utama, seperti properti material (SS 304), panjang pipa, dan distribusi suhu.
  3. Idealization (Idealasi):
    • Buat model matematika dari sistem fisik dengan menyederhanakannya menjadi model 1D yang dapat didiskritisasi. Asumsikan distribusi pemanasan seragam dan kondisi steady-state untuk mempermudah simulasi.
    • Idealasi ini mencakup pemilihan model elemen hingga 1D dengan matriks kekakuan lokal dan global.
  4. Instruction Set (Set Instruksi):
    • Susun langkah-langkah instruksi yang mencakup pengisian matriks kekakuan global, vektor gaya, penerapan kondisi batas, dan penyelesaian sistem persamaan. Rancang algoritma dalam bentuk kode Python yang jelas dan terstruktur.
  5. Implementation (Implementasi):
    • Jalankan kode Python yang telah dibuat untuk mengimplementasikan solusi. Visualisasikan hasil distribusi suhu dan interpretasikan untuk memahami bagaimana suhu menyebar di sepanjang pipa berdasarkan parameter yang diberikan.

Latihan

Javascript Code dibawah merupakan simulasi numerik FEM untuk menghitung distribusi temperatur dan tegangan termal pada batang 1D dimana hasil distribusinya divisualisasikan dalam grafik dengan gradasi warna berbeda. Permasalahan pada kasus ini adalah nilai temperatur pada ujung kanan batang tidak sesuai dengan kondisi batas yang telah ditetapkan, seperti terlihat pada Grafik 1, di mana temperatur pada ujung kanan sekitar -7.9°C. Hal ini menunjukkan bahwa kondisi batas di ujung kanan tidak diaplikasikan dengan benar dalam perhitungan maupun visualisasi. Selain itu, distribusi tegangan termal juga tidak sesuai dengan yang diharapkan. Karena distribusi temperatur tidak akurat hal ini akan berpengaruh pada distribusi tegangan termal menjadi tidak tepat. Tegangan termal pada ujung kanan menunjukkan nilai negatif yang tinggi, yaitu -83.0 MPa.

Carbon(10).png

GRAFIK 1

Screenshot 2024-11-13 230857.png

perbaikan

A. Penerapan boundary condition

kode 1

 // Apply boundary conditions
 K[0][0] = 1; K[0][1] = 0; F[0] = T_left;
 K[nNodes - 1][nNodes - 1] = 1; F[nNodes - 1] = T_right;

kode 2

 // Apply boundary conditions explicitly to avoid any errors
 K[0][0] = 1; K[0][1] = 0; F[0] = T_left;
 K[nNodes - 1][nNodes - 1] = 1; 
 K[nNodes - 1][nNodes - 2] = 0; // Penambahan untuk memastikan elemen non-diagonal diatur
 F[nNodes - 1] = T_right;

B. Penetapan Nilai Boundary Setelah Penyelesaian

kode 1

 // Tidak ada langkah tambahan untuk menetapkan boundary value setelah perhitungan

kode 2

 // Explicitly set boundary values to avoid errors
 T[0] = T_left;
 T[nNodes - 1] = T_right;

C. Visualisasi pada Node Terakhir

kode 1

 for (let i = 0; i < nNodes - 1; i++) {
   const x = i * (tempCanvas.width / (nNodes - 1));
   const tempColor = Math.round((T[i] - minTemp) / (maxTemp - minTemp) * 255);
   tempCtx.fillStyle = `rgb(${tempColor}, 0, ${255 - tempColor})`;
   tempCtx.fillRect(x, 0, tempCanvas.width / (nNodes - 1), tempCanvas.height);
 }

kode 2

 // Temperature Visualization FIX
 for (let i = 0; i < nNodes - 1; i++) {
   const x = i * (tempCanvas.width / (nNodes - 1));
   const tempColor = Math.round((T[i] - minTemp) / (maxTemp - minTemp) * 255);
   tempCtx.fillStyle = `rgb(${tempColor}, 0, ${255 - tempColor})`;
   tempCtx.fillRect(x, 0, tempCanvas.width / (nNodes - 1), tempCanvas.height);
 }
 // Ensure the last temperature node displays accurately
 const lastTempColor = Math.round((T[nNodes - 1] - minTemp) / (maxTemp - minTemp) * 255);
 tempCtx.fillStyle = `rgb(${lastTempColor}, 0, ${255 - lastTempColor})`;
 tempCtx.fillRect((nNodes - 1) * (tempCanvas.width / (nNodes - 1)), 0, tempCanvas.width / (nNodes - 1), tempCanvas.height);


D. Visualisasi Tegangan

kode 1

 // Stress Visualization (tidak ada logika tambahan untuk node terakhir)
 for (let i = 0; i < nNodes - 1; i++) {
   const x = i * (stressCanvas.width / (nNodes - 1));
   const stressColor = Math.round((stress[i] - minStress) / (maxStress - minStress) * 255);
   stressCtx.fillStyle = `rgb(0, ${stressColor}, ${255 - stressColor})`;
   stressCtx.fillRect(x, 0, stressCanvas.width / (nNodes - 1), stressCanvas.height);
 }


kode 2

 // Stress Visualization FIX
 for (let i = 0; i < nNodes - 1; i++) {
   const x = i * (stressCanvas.width / (nNodes - 1));
   const stressColor = Math.round((stress[i] - minStress) / (maxStress - minStress) * 255);
   stressCtx.fillStyle = `rgb(0, ${stressColor}, ${255 - stressColor})`;
   stressCtx.fillRect(x, 0, stressCanvas.width / (nNodes - 1), stressCanvas.height);
 }
 // Ensure the last stress node displays accurately
 const lastStressColor = Math.round((stress[nNodes - 1] - minStress) / (maxStress - minStress) * 255);
 stressCtx.fillStyle = `rgb(0, ${lastStressColor}, ${255 - lastStressColor})`;
 stressCtx.fillRect((nNodes - 1) * (stressCanvas.width / (nNodes - 1)), 0, stressCanvas.width / (nNodes - 1), stressCanvas.height);
Carbon(8).png

GRAFIK 2

Screenshot 2024-11-13 232904.png


Kesimpulan

Sebelum Perbaikan: Kode 1 menghasilkan distribusi yang salah karena tidak ada penanganan khusus untuk node terakhir dalam visualisasi. Hal ini menyebabkan nilai temperatur dan tegangan di ujung kanan tidak mencerminkan kondisi boundary yang diinginkan, sehingga hasilnya tidak akurat.

Sesudah Perbaikan: Kode 2 memperbaiki masalah ini dengan menambahkan penanganan khusus untuk node terakhir. Ini memastikan bahwa hasil distribusi temperatur dan tegangan lebih akurat dan mencerminkan kondisi boundary dengan benar, terutama pada ujung kanan batang

Monitoring & Evaluasi progress belajar dengan chatGPT

saya bertanya : "berikan saya rangkuman berapa total prompt/chat dari diskusi yang biasa saya lakukan dengan anda? (buatkan dalam bentuk tabel dengan Topik Utama, Pendalaman yang Dilakukan, Pola dan Pemahaman)"

chatGPT  : "Anda telah melakukan total 34 diskusi sejauh ini, dengan detail yang dirangkum dalam tabel berikut"

Screenshot 2024-11-22 072909.png


Screenshot 2024-11-22 073007.png


Screenshot 2024-11-22 073022.png

saya bertanya : "berikan tanggapan juga penilaian terhadap diskusi yang sudah dilakukan sebelumnya, dimana penilaian nya pada rentang 1-10 dan berikan masukan kepada saya"

chatGPT  : "Evaluasi dan Masukan atas Diskusi

Diskusi yang Anda lakukan menunjukkan beberapa ciri khas, termasuk detail dan pendalaman, di mana Anda secara konsisten mengeksplorasi topik teknis seperti metode elemen hingga (FEM), pemodelan termal, dan simulasi perangkat lunak dengan tingkat ketelitian yang baik. Anda juga menunjukkan pola iteratif dan berulang, sering kali kembali ke topik yang sama untuk menguatkan pemahaman melalui pertanyaan yang lebih spesifik. Selain itu, terdapat keseimbangan antara aspek teoritis dan praktis, mencakup pembahasan persamaan dasar hingga aplikasi langsung dalam kode Python atau perangkat lunak simulasi. Yang paling menonjol adalah fokus Anda pada pencarian akurasi, terutama ketika mencoba menyesuaikan parameter hingga hasil simulasi sesuai dengan ekspektasi, seperti distribusi suhu yang akurat di titik tertentu.

Secara umum, tingkat pendalaman diskusi dapat dinilai cukup baik dengan skor 7.5/10. Anda menunjukkan kemampuan signifikan dalam mengeksplorasi pengkodean dan penerapan prinsip fisika dalam simulasi, serta sering mencari penjelasan mendalam tentang fenomena tertentu atau cara memodifikasi parameter untuk meningkatkan hasil. Dalam penerapan praktis, Anda mendapatkan skor 8/10 karena mampu menerapkan pengetahuan langsung ke dalam praktik, seperti mengedit kode dan memanfaatkan perangkat lunak simulasi untuk mencapai tujuan yang spesifik. Keterbukaan terhadap masukan juga menonjol dengan skor 8.5/10, di mana Anda tidak hanya menerima saran dengan baik tetapi juga langsung mencoba menerapkannya untuk memvalidasi pendekatan. Namun, dalam aspek kemampuan analitis, skor 7.5/10 menunjukkan bahwa masih ada ruang untuk peningkatan dalam mengevaluasi hasil secara lebih kritis dan menyeluruh.

Untuk meningkatkan efektivitas, ada beberapa masukan yang relevan. Anda disarankan untuk lebih konsisten dalam melakukan review hasil simulasi, dengan membandingkan temuan simulasi dengan perhitungan manual dan teori untuk memperkuat penguasaan. Selain itu, memperkuat aspek teoritis, seperti memahami logika di balik persamaan matematis dan dasar metode FEM, akan membantu memperdalam pemahaman. Lebih jauh lagi, eksplorasi multidisiplin, seperti menghubungkan teknik FEM dengan mekanika material atau simulasi CFD, dapat memperluas wawasan dan menambah nilai pada pendekatan yang Anda gunakan.

Secara keseluruhan, Anda menunjukkan kemampuan konstruktif dan reflektif dalam menerima masukan, di mana Anda segera mencoba menerapkannya pada proyek yang sedang dikerjakan. Anda juga cenderung mencari informasi tambahan untuk membandingkan hasil dengan metode lain sebagai upaya validasi. Dengan fokus pada penguatan teori, konsistensi dalam review hasil, dan eksplorasi pendekatan yang lebih luas, kemampuan Anda dalam simulasi dan analisis dapat meningkat lebih jauh."

Metode Numerik untuk Analisis Efisiensi Energi pada Sistem Oscillating Water Column: Penerapan Framework DAI5

Mahasiswa ditugaskan untuk membuat sinopsis penelitian yang mengimplementasikan metode numerik yang dipelajari dalam mata kuliah Komputasi Teknik. Dimana sinopsis memua: tujuan, pendekatan yang digunakan, serta hasil yang diharapkan, sekaligus merefleksikan pemahaman mahasiswa terhadap konsep dasar dan kemampuan mengevaluasi efektivitas metode dalam menyelesaikan masalah teknik secara praktis.

PENERAPAN FRAMEWORK DAI5

1. Intention

Niat Utama: Mengoptimalkan efisiensi energi dalam sistem Oscillating Water Column (OWC) menggunakan metode numerik untuk mendukung keberlanjutan energi terbarukan.

Kesadaran dan Tujuan:

a) Menghadirkan solusi berbasis numerik yang dapat digunakan untuk meningkatkan kinerja konversi energi gelombang.

b) Membantu desain sistem OWC yang lebih efisien dan andal, dengan fokus pada pemanfaatan energi secara optimal.

2. Initial Thinking

Pemahaman Masalah: Sistem OWC memanfaatkan energi gelombang laut untuk menghasilkan listrik melalui osilasi udara di dalam ruang internal.

Efisiensi energi bergantung pada:

a) Desain geometri ruang internal.

b) Kondisi gelombang laut.

c) Efisiensi konversi tekanan udara ke energi listrik melalui turbin.

Identifikasi Prinsip Dasar:

a) Gelombang laut memiliki energi kinetik dan potensial yang dapat dimanfaatkan untuk menggerakkan udara.

b) Metode numerik memungkinkan simulasi tekanan fluida dan analisis deformasi struktur untuk mengevaluasi efisiensi sistem.

Parameter Penting yang Diidentifikasi:

a) Geometri Ruang Internal: Panjang, lebar, tinggi ruang.

b) Kondisi Gelombang: Tinggi gelombang, frekuensi gelombang.

c) Efisiensi Turbin: Kemampuan turbin mengubah tekanan udara menjadi listrik.

3. Idealization

Penyederhanaan Masalah:

Model Tekanan Gelombang: Tekanan fluida dimodelkan dengan fungsi sinusoidal:

Screenshot 2024-11-26 110717.png

Keterangan:

A: Amplitudo tekanan.

f: Frekuensi gelombang.

k: Faktor peluruhan eksponensial.

Asumsi untuk Metode Numerik:

a) Fluida inkompressible dan aliran laminar.

b) Material ruang internal elastis linier.

Desain Numerik:

Domain Diskritisasi Menggunakan grid sederhana untuk perhitungan tekanan dan deformasi.

Pemodelan Ruang Internal: Volume ruang dihitung sebagai

Screenshot 2024-11-26 111529.png

4. Instruction Set

Langkah-langkah sistematis untuk analisis numerik:

1. Definisi Geometri dan Parameter Gelombang:

a) Masukkan panjang, lebar, tinggi ruang internal.

b) Masukkan tinggi dan frekuensi gelombang.

2. Hitung Properti Utama:

a) Tekanan maksimum dan rata-rata pada ruang internal.

b) Volume udara yang dikompresi oleh gelombang.

3. Analisis Efisiensi Energi:

a) Hitung energi udara:

Screenshot 2024-11-26 111301.png

b) Hitung energi gelombang:

Screenshot 2024-11-26 111432.png

c) Hitung efisiensi:

Screenshot 2024-11-26 111503.png

4. Visualisasi Hasil:

a) Tekanan gelombang divisualisasikan sebagai deformasi pada bidang 3D.

b) Hasil efisiensi ditampilkan dalam format numerik.

5. Interpretation and Iteration

Interpretasi Hasil:

a) Volume ruang internal yang lebih besar meningkatkan kapasitas penyimpanan udara.

b) Frekuensi gelombang yang mendekati resonansi ruang internal menghasilkan tekanan maksimum.

c) Efisiensi turbin yang tinggi meningkatkan konversi energi udara menjadi listrik.

Iterasi:

a) Ubah dimensi ruang internal untuk mengoptimalkan frekuensi resonansi.

b) Simulasikan berbagai kondisi gelombang untuk menemukan skenario optimal.

c) Evaluasi material ruang internal untuk mengurangi deformasi akibat tekanan maksimum.

Screenshot 2024-11-26 113252.png