Anda di halaman 1dari 21

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 heat equation 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 dengan
L)
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 SKEMA
EKSPLISIT\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 SKEMA
IMPLISIT\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 bahwa pada program skema
implisit ini tidak berbeda jauh dengan skema eksplisit secara struktur
program, perbedaan terjadi hanya pada perumusan di bagian perhitungan.
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.










Plot Grafik
0
1
2
3
4
5
6
1 2 3 4 5
t
e
m
p
e
r
a
t
u
r


x
grafik analitik
t = 1
t = 2
t = 3
t = 4
t = 5
0
1
2
3
4
5
6
1 2 3 4 5
t
e
m
p
e
r
a
t
u
r

x
grafik eksplisit
t = 1
t = 2
t = 3
t = 4
t = 5








0
1
2
3
4
5
6
1 2 3 4 5
t
e
m
p
e
r
a
t
u
r

x
implisit
t = 1
t = 2
t = 3
t = 4
t = 5
0
1
2
3
4
5
6
1 2 3 4 5
t
e
m
p
e
r
a
t
u
r

x
crank-nicolson
t = 1
t = 2
t = 3
t = 4
t = 5
Grafik eror ( selisih analitik dan numerik )

Eror eksplisit



Eror implisit


0
0.0005
0.001
0.0015
0.002
0.0025
1 2 3 4 5
t
e
m
p
e
r
a
t
u
r

x
eror eksplisit
t = 1
t = 2
t = 3
t = 4
t = 5
0
0.0005
0.001
0.0015
0.002
0.0025
1 2 3 4 5
t
e
m
p
e
r
a
t
u
r

x
eror implisit
t = 1
t = 2
t = 3
t = 4
t = 5

Eror crank-nicolson



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.
0
0.0005
0.001
0.0015
0.002
0.0025
1 2 3 4 5
t
e
m
p
e
r
a
t
u
r

x
eror crank-nicolson
t = 1
t = 2
t = 3
t = 4
t = 5