Upload
unpad
View
0
Download
0
Embed Size (px)
Citation preview
FISIKA KOMPUTASI
Program Mengunakan Bahasa C
TUGAS 2
Disusun Oleh:
1.Brain Aulia B 140310090016
2.Arry Wahyudi 140310100018
3.Nur Anwar 140310100090
UNIVERSITAS PADJADJARAN
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
JURUSAN FISIKA
BANDUNG
2014
SOAL
1. a. Selesaikan secara numerik untuk kasus heatequation dengan menggunakan skema eksplisit.
Program:
/* TUGAS 2 FISKOM */
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
main()
{
int i, k, L, N;
float u[50][50], alpha, g, dt, dx, tmax;
FILE *simpan;
simpan = fopen("data-e.txt", "w");
L = 5; //Panjang batang
N = 5; //Jumlah grid (pilih N kurang dari atau sama denganL)
alpha = 0.00008418;
tmax = 5; // tmax adalah time step maksimum
/* BENTUK DISKRIT SUMBU-X */
dx = L/N;
/* SYARAT STABILITAS */
dt = (dx*dx)/(2*alpha);
/* GAMMA g */
g = ((alpha*alpha*dt)/(dx*dx));
/* SYARAT AWAL */
for(i=0; i<=N; i++)
{
u[i][0] = i; // u(x,0) = x
}
/* PERHITUNGAN */
for(k=0; k<=tmax; k++)
{
/* SYARAT BATAS NEUMANN */
u[-1][k] = u[0][k]; // backward difference
u[N+1][k] = u[N][k]; // forward difference
for(i=0; i<=N; i++)
{
/* PERHITUNGAN HEAT EQUATION */
u[i][k+1] = g*(u[i+1][k] - 2*u[i][k] + u[i-1][k]) + u[i][k];
}
}
/* TAMPILAN PROGRAM DALAM BENTUK DATA */
printf("\n\n\n\t HASIL PERHITUNGAN HEAT EQUATION SKEMAEKSPLISIT\n\n");
printf(" t =");
for(k=0; k<=tmax; k++)
{
printf(" %.2f ", (dt*k));
}
printf("\t detik \n-------------------------------------------------------\n");
for(i=1; i<=N; i++)
{
printf(" x = %d; ", i);
for(k=0; k<=tmax; k++)
{
printf(" %.6f ", u[i][k]);
fprintf(simpan," %.6f", u[i][k]);
}
printf("\n");
fprintf(simpan, "\n");
}
printf("\n\n\n");
getch();
return 0;
}
Tampilan :
Analisa :
Berdasarkan program diatas yang dilakukan
terlebih dahulu adalah Menentukan batasan panjang
pelat logam (L) yang akan dianalisis secara
komputasi dan Membuat Skema grid lines. Setelah
diketahui bentuk persamaan matriksnya,
diselesaikan dengan metode iterasi untuk
mengetahui nilai temperatur pada titik-titik yang
dicari. Syarat batas bagian kanan dan bagian kiri
plat digunakan syarat batas Neuman yang menyatakan
adanya nilai suhu awal untuk bagian kiri dan kanan
plat tersrebut. Semakin besar N maka semakin
teliti data tersebut.
2. Selesaikan secara numerik untuk kasus heat
equation dengan menggunakan skema implisit.
Program :
/* TUGAS 2 FISKOM */ #include <stdio.h>
#include <stdlib.h> #include <conio.h>main() { int i, k, L, N, iterasi; float u[50][50], alfa, g, dt, dx, tmax; FILE *simpan; simpan = fopen("implisit.txt", "w"); L = 5; //Panjang batang N = 5; //Jumlah grid (pilih N kurang dari atau sama dengan L) /* BENTUK DISKRIT SUMBU-X */ dx = L/N; /* alfa DAN dt */ alfa = 0.00008418; /* 0.00008418 merupakan alfa aluminium */ dt = 0.5; /* GAMMA g */ g = ((alfa*alfa*dt)/(dx*dx)); /* T max */ tmax = 7; // tmax adalah time step maksimum /* SYARAT AWAL */ for(i=0; i<=N; i++) { u[i][0] = i; // u(x,0) = x } /* SYARAT BATAS NEUMANN UNTUK T = 0 */ u[-1][0] = u[0][0]; // NGB u[N+1][0] = u[N][0]; // NGF /* PERHITUNGAN */ for(k=0; k<=tmax; k++) { for(iterasi=1; iterasi<=100; iterasi++)
{ /* SYARAT BATAS NEUMANN HARUS TERJAGA DI SETIAP ITERASI */ u[-1][k+1] = u[0][k+1]; // backward difference u[N+1][k+1] = u[N][k+1]; // forward difference for(i=0; i<=N; i++) { /* MATRIKS PERHITUNGAN HEAT EQUATION */ u[i][k+1] = (g/(1-(2*g)))*(u[i+1][k+1] + u[i-1][k+1]) +(1/(1-(2*g)))*u[i][k]; } } } /* TAMPILAN PROGRAM DALAM BENTUK DATA */ printf("\n\n\n\t HASIL PERHITUNGAN HEAT EQUATION SKEMAIMPLISIT\n\n"); printf(" t ="); for(k=0; k<=tmax; k++) { printf(" %.2f ", (dt*k)); } printf("\t detik \n-------------------------------------------------------\n"); for(i=1; i<=N; i++) { printf(" x = %d; ", i); for(k=0; k<=tmax; k++) { printf(" %.6f ", u[i][k]); fprintf(simpan," %.6f", u[i][k]); } printf("\n"); fprintf(simpan, "\n"); } printf("\n\n\n");
getch(); return 0; }
Tampilan :
\Analisa :
Berdasarkan program diatas dapat dianalisa bahwapada program skema implisit ini tidak berbeda jauhdengan skema eksplisit secara struktur program,perbedaan terjadi hanya pada perumusan di bagianperhitungan. Untuk skema eksplisit digunakan .
3. Selesaikan secara numerik untuk kasus heat
equation dengan menggunakan skema crank nicholson.
Listing Program :
/* TUGAS 2 FISKOM */
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main()
{
int i, k, L, N, iterasi;
float u[50][50], alfa, g, dt, dx, tmax, theta;
FILE *simpan;
simpan = fopen("data-CN.dat", "w");
L = 5; //Panjang batang
N = 5; //Jumlah grid (pilih N kurang dari atau sama dengan L)
/* BENTUK DISKRIT SUMBU-X */
dx = L/N;
/* THETA
rentangnya adalah dari 0 sampai 1.
jika theta = 0, maka bentuk diskrit kembali menjadi skema
implisit,
jika theta = 1, maka bentuk diskrit kembali menjadi skema
eksplisit,
pada Skema Crank-Nicolson ini kita ambil theta = 0.5
*/
theta = 0.5;
/* alfa, dt */
alfa = 0.00008418;
// dt = (dx*dx)/(2*alfa); /* dipakai jika theta diambil sama
dengan 1 (Skema eksplisit) */
dt = 0.5;
/* GAMMA g */
g = ((alfa*alfa*dt)/(dx*dx));
/* T max */
tmax = 5; // tmax adalah time step maksimum
/* SYARAT AWAL */
for(i=0; i<=N; i++)
{
u[i][0] = i; // u(x,0) = x
}
/* SYARAT BATAS NEUMANN UNTUK T = 0 */
u[-1][0] = u[0][0]; // backward difference
u[N+1][0] = u[N][0]; // forward difference
/* PERHITUNGAN */
for(k=0; k<=tmax; k++)
{
for(iterasi=1; iterasi<=100; iterasi++)
{
/* SYARAT BATAS NEUMANN HARUS TERJAGA DI SETIAP ITERASI */
u[-1][k+1] = u[0][k+1]; // backward difference
u[N+1][k+1] = u[N][k+1]; // forward difference
for(i=0; i<=N; i++)
{
/* MATRIKS PERHITUNGAN HEAT EQUATION */
u[i][k+1] = (u[i][k]*(1-(2*g*theta)) + (u[i+1][k+1] + u[i-1]
[k+1])*(g*(1-theta)) + (u[i+1][k]+u[i-1][k])*(g*theta)) /
(1+(2*g*(1-theta)));
}
}
}
/* TAMPILAN PROGRAM DALAM BENTUK DATA */
printf("\n\n\n\t HASIL PERHITUNGAN HEAT EQUATION SKEMA CRANK-
NICOLSON\n\n");
printf(" t =");
for(k=0; k<=tmax; k++)
{
printf(" %.2f ", (dt*k));
}
printf("\t detik \n
-------------------------------------------------------\n");
for(i=1; i<=N; i++)
{
printf(" x = %d; ", i);
for(k=0; k<=tmax; k++)
{
printf(" %.6f ", u[i][k]);
fprintf(simpan," %.6f", u[i][k]);
}
printf("\n");
fprintf(simpan, "\n");
}
printf("\n\n\n");
getch();
return 0;
}
Tampilan Program :
Analisa :
Tidak berbeda jauh dengan skema eksplisit dan implisit
dari hasil yang dapat nilainya hampir memiliki nilai
yang sama. Sebenarnya perbedaan akan terlihat jika alfa
tidak bernilai terlalu kecil. Atau angka dibelakang
koma diperbanyak.
Perhitungan Analitik :
Program :
/* TUGAS 2 FISKOM */
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main()
{
int n, j, k, N, tmax;
float u[50][50], deret[50][50], deretan[50][50], L, dt, alfa, pi,
dx;
FILE *simpan;
simpan = fopen("data-an.dat", "w");
pi = 3.14;
/* Bagian yang dapat diubah-ubah */
L = 5; // Panjang Batang
N = 5; // Banyaknya Grid
alfa = 0.00008418; // alfa alumunium
tmax = 5;
dt = 0.5; //diskritisasi waktu
dx = 1; //jarak antar grid
printf("\n\n\t RUMUS ANALITIK HEAT EQUATION 1D\n\n\n");
/* PERHITUNGAN ANALITIK */
for(k=0; k<=tmax; k++)
{
for(j=0; j<=N; j++)
{
for(n=1; n<=500; n++) // Penjumlahan Sigma, Sampai n = 500;
{
deret[j][k] = (cos((((2*n)-1)*pi*j*dx)/(L))*exp(-
(alfa*alfa*((2*n)-1)*((2*n)-1)*pi*pi*k*dt)/(L*L)))/(((2*n)-
1)*((2*n)-1));
deretan[j][k] += deret[j][k];
}
u[j][k] = L/2 - deretan[j][k]*((4*L)/(pi*pi));
}
}
/* TAMPILAN PROGRAM DALAM BENTUK DATA */
for(j=1; j<=N; j++)
{
printf(" x = %d; ", j);
for(k=1; k<=tmax; k++)
{
printf(" %.6f ", u[j][k]);
fprintf(simpan," %.2f", u[j][k]);
}
printf("\n");
fprintf(simpan, "\n");
}
printf("\n\n\n");
getch();
return 0;
}
Tampilan :
Analisa :
Dari perhitungan analitik dapat terlihat hasil tidak
terlalu berbeda jauh dengan perhitungan numerik.
1 2 3 4 50
1
2
3
4
5
6
grafik analitik
t = 1t = 2t = 3t = 4t = 5
Δx
temp
eratur
1 2 3 4 50
1
2
3
4
5
6
grafik eksplisit
t = 1t = 2t = 3t = 4t = 5
Δx
temp
eratur
1 2 3 4 50
1
2
3
4
5
6
implisit
t = 1t = 2t = 3t = 4t = 5
Δx
temp
eratur
1 2 3 4 50
1
2
3
4
5
6
crank-nicolson
t = 1t = 2t = 3t = 4t = 5
Δx
temp
eratur
Grafik eror ( selisih analitik dan numerik )
Eror eksplisit
1 2 3 4 50
0.0005
0.001
0.0015
0.002
0.0025
eror eksplisit
t = 1t = 2t = 3t = 4t = 5
Δx
temp
eratur
Eror implisit
1 2 3 4 50
0.00050.0010.00150.0020.0025
eror implisit
t = 1t = 2t = 3t = 4t = 5
Δx
temp
erat
ur
Eror crank-nicolson
1 2 3 4 50
0.0005
0.001
0.0015
0.002
0.0025
eror crank-nicolson
t = 1t = 2t = 3t = 4t = 5
Δx
temp
eratur
Analisa Keseleruhan Grafik error :
Dari Grafik plot error dapat dianlisa bahwa nilai error
menuju nilai 0 atau bernilai konvergen. Semakin lama
waktu dan semakin lebar ygrid yang dipakai erronya
semakin mendekati nol. Nilai alfa juga berperan
terhadap terjadinya nilai error jika di input nilai
alfa yang lebih besar maka nilai errornya semakin
terlihat.