25
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

FISIKA KOMPUTASI Program Mengunakan Bahasa C TUGAS 2

  • 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.

Plot Grafik

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.