22
FISIKA KOMPUTASI Program Mengunakan Bahasa C DISTRIBUSI PANAS , PERSAMAAN GELOMBANG, HEAT EQUATION Oleh: 1.Tifa Alief Saditareno 140310090052 2. Nurainy Kusumawati 140310100010 3. Rina Kurnia 140310100034 4. Mentari Halimun 140310100042 5. Orina Amelia 140310100060 UNIVERSITAS PADJADJARAN FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

LAPORAN FISIKA KOMPUTASI

Embed Size (px)

Citation preview

FISIKA KOMPUTASI

Program Mengunakan Bahasa C

DISTRIBUSI PANAS , PERSAMAAN GELOMBANG, HEAT EQUATION

Oleh:

1. Tifa Alief Saditareno 140310090052

2. Nurainy Kusumawati 140310100010

3. Rina Kurnia 140310100034

4. Mentari Halimun 140310100042

5. Orina Amelia 140310100060

UNIVERSITAS PADJADJARAN

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

JURUSAN FISIKA

BANDUNG

2013

SOAL

1. Sebuah plat konduktor tipis berukuran 4x8 cm. Bagian kiri dari plat tersebut diset pada temperatur 0oC sedangkan bagian kanannya diset pada temperatur 100oC. Bagian atas plat tersebut dikenakan syarat batas

Neuman dengan dan syarat batas bawah plat dengan .

Bila setiap titik pada plat tersebut terdapat generasi kalor sebesar 5 cal/cm3

dan jika diketahui bahwa untuk plat tersebut konduktivitas termalnya

adalah , tentukan distribusi temperaturnya.

Program:

/*distribusi panas pelat konduktor*/

#include <conio.h>#include <math.h>#include <stdio.h>

main(){ int i,j;

float x, y, Dx, Dy, Dx1, Dx2, Dy1, Dy2, k, Q, m, n, c, B[100][100]; FILE *fp; char namafile[50];

printf("\tdistribusi panas pelat konduktor c\n\n"); printf("\n\npanjang x = ");scanf("%f",&x); printf("\npanjang y = ");scanf("%f",&y); printf("\nnilai delta x = ");scanf("%f",&Dx); printf("\nnilai delta y = ");scanf("%f",&Dy); printf("\nnilai generasi kalor (Q) =");scanf("%f",&Q); printf("\nnilai konduktivitas termal(k) = ");scanf("%f",&k); printf("\n\n"); m=x/Dx; n=y/Dy; c=-Q/k; FILE * data;

data = fopen("heatequation1.xls","w"); for(i=1;i<n;i++) { for(j=1;j<m;j++) { if (i==1)

B[i][j]=(B[i+1][j]+B[i-1][j]+B[i][j+1]-(c*Dx*Dx*Dy*Dy)+(30*Dy))/3; else if (i==n) B[i][j]=(B[i+1][j]+B[i-1][j]+B[i][j-1]-(c*Dx*Dx*Dy*Dy)-(10*Dy))/3; else B[i][j]=(B[i+1][j]+B[i-1][j]+B[i][j+1]+B[i][j-1]-(c*Dx*Dx*Dy*Dy))/4; } } for(i=0;i<=n;i++) { for(j=1;j<m;j++) { printf(" %f",B[i][j]); fprintf(data, "\n %.3f",B[i][j]); } printf("\n\n"); fprintf(data, "\n"); } fclose(data); getch();}

Tampilan :

Analisa :

Berdasarkan program diatas yang dilakukan terlebih dahulu adalah

Menentukan batasan panjang pelat logam yang akan dianalisis secara

komputasi. Menentukan batas-batas temperatur pada pinggir pelat logam

dalam keadaan steady state (tunak). Membuat Skema grid lines dan

menentukan titik jurik untuk menghitung titik jaringan distribusi

temperatur pada pelat logam. Setelah diketahui bentuk persamaan

matriksnya, diselesaikan dengan metode iterasi untuk mengetahui nilai

temperatur pada titik-titik yang dicari.

Pada program yang telah dilakukan dengan menginput nilai x ,nilai y,

delta x, delta y, generasi kalor dan konduktifitas termal maka didapatkan

matriks distribusi panas 2D. Maksimal matriks yang dihasilkan 100x100.

Sebelum melakukan iterasi, pada program kita menghitung nilai gamma

terlebih dahulu dengan melihat hubungan antara n, m, dan c. Setelah nilai

n, m, dan c diperoleh maka nilai tersebut di masukan ke perulangan.

Sehingga akan diperoleh bentuk matriksnya. Syarat batas bagian atas dan

bagian bawah plat digunakan syarat batas Neuman.

Untuk menentukan distribusi temperatur pada benda yang berbentuk

bidang datar maupun berbentuk pelat konduktor tipis berukuran 4 x 8 cm dengan

cara membagi – bagi benda tersebut kedalam beberapa grid.Perpindahan panas

secara konduksi harus menentukan syarat batas permukaan, dalam dan luar benda

agar diperoleh temperatur dimasing - masing node yang telah dibagi kedalam N

bagian.Secara analitik temperatur permukaan isolasi pada sebelah kiri diset

sebesar 0 0C , temperatur pada batas konveksi bagian kanan diset sebesar 100 0C

sedangkan secara numerik hasil yang diperoleh berbeda dengan analitik.

2. Tentukan solusi numerik untuk persamaan gelombang dibawah ini, bila

m=4, n=4, T=10, lalu bandingkan solusi pada t=1.0 dengan solusi

analitiknya yaitu :

, 0 < x < 1 0 < t

u(0,t)=u(1,t)=0, 0 < t

u(x,0)= , u(x,0) =

,

Program :

/*Persamaan Gelombang*/

#include <stdio.h>#include <math.h>#include <conio.h>

float gamma;void input_matrix(float A[200][200], int p) { int i, j; for(i=0; i<p+1; i++) { for(j=0; j<p+1; j++) { if(j==i)

A[i][j] = 2*(1-gamma); else if(j==i-1 || j==i+1)

A[i][j] = gamma; else

A[i][j] = 0; } } } main(){//deklarasi variabel//FILE *fp;int u, v, y, parsial;float t, x, beta, dt, dx, B[200][200], M[200][200], n ;

printf("\n\t\t Program Persamaan Gelombang\n ");printf("\n Masukan nilai maksimal untuk t : "); scanf("%f",

&t);printf("\n Masukan nilai maksimal untuk x : "); scanf("%f",

&x);printf("\n Masukan jumlah parsial yang diinginkan : ");

scanf("%d", &parsial);printf("\n Masukan nilai konstanta betta yang telah

ditentukan : "); scanf("%f", &beta); printf("\n");

dx = x/(parsial+1); dt = sqrt(dx*dx/(4*beta)); /* dt^2 <= dx^2/betta merupakan syarat stabilitas */

gamma = (beta*dt*dt) /(dx*dx);

input_matrix(B, parsial);

printf("nilai dt : %f\n", dt);printf("\n");printf("nilai dx : %f\n", dx);printf("\n");printf("nilai gamma : %f\n", gamma);printf("\n");printf("\nMatriks B\n");printf("\n");

for(u=0; u<parsial+1; u++) { for(v=0; v<parsial+1; v++) {

printf("%f\t", B[u][v]); }

printf("\n"); }

n=t/dt;printf("\nMatriks M[u][y]\n");printf("iterasi\tt\t\t M[u][y]\n");for(u=0; u<parsial; u++)

{printf("\n%d", u+1);for(v=0; v<n+1; v++)

{M[u+1][v] = 0;for(y=0; y<parsial+1; y++)

{if(u==0)

M[u][y]= sin(3.14*y*dx/57.32)/2;M[u+1][u] += B[v][y]*M[u][y];

}if(u>0)

M[u+1][v] -= M[u-1][v];printf("\t%f\t%f\n", (u+1)*dt, M[u+1][v]);

} }getch ();

int f, i, j, par_a, par_b, C; char namafile [300]; savefile: printf("\n\n\tAkan disimpan dalam File?\n\tTekan 1 = Yes , tekan 2 = No : ");scanf("%d",&f); if(f==1) { sprintf(namafile,"trace.txt"); fp = fopen(namafile, "a+"); fprintf(fp,"\nINPUT MATRIKS B\n"); for (i=1;i<=par_a;i++) {

for (j=1;j<=par_b;j++) { fprintf(fp,"%d ",B[u][v]); } fprintf(fp,"\n"); } fprintf(fp,"\nHASIL TRACE\n"); fprintf(fp,"%d ",C); fclose(fp); printf("\n\n\t\tFile Telah Disimpan dengan Nama 'trace.txt'\n"); }

else if(f==2) { printf("\n\tData Tidak Disimpan dalam File\n"); } else { printf("\n\tKode yanga Diinputkan salah"); goto savefile; }return 0;}

Tampilan :

GRAFIK

Program matlab :%wave equationclear; close all; clc;c = 1;n = 100; x = linspace(0,1,n); dx = 1/(n-1);dt = dx;u(:,1) = sin(pi*x);u(1,2) = 0;for i = 2:n-1u(i,2) = 0.5*(dt^2*c^2*(u(i+1,1)-2*u(i,1)+u(i-1,1))/dx^2+2*u(i,1));endu(n,2) = 0;error = 1; k = 1;while k < 100 k = k+1; u(1,k+1) = 0; for i = 2:n-1 u(i,k+1) = dt^2*c^2*(u(i+1,k)-2*u(i,k)+u(i-1,k))/dx^2+2*u(i,k)-u(i,k-1); end

u(n,k+1) = 0;endplot(x,u), xlabel('x'),ylabel('y')title('Wave Equation'),xlabel('x'),ylabel('y'),colorbar

Analisa :

Sistem gelombang mempunyai fungsi gelombang yang menggambarkan

perpindahan satu partikel dalam medium. Fungsi tersebut tergantung pada

posisi dan waktu (dimensi ruang dan waktu ), sehingga secara umum fungsi

gelombang dapat dinyatakan dengan .

Program ini digunakan untuk memvisualisasikan solusi persamaan

diferensial gelombang dua dimensi. Dimana kita memasukkan nilai maksimal

untuk waktu (t) dan maksimal untuk ruang (x) serta menginput nilai parsial

yang diinginkan beserta nilai beta yang kita tentukan nilainya. Pada program

persamaan gelombang ini,kita menginput nilai m =4, n=4, T=10. Nilai x yang

diinputkan secara syarat batas tidak boleh besar dari 1 dan nilai t besar dari 0.

Ada tiga bagian utama yaitu fungsi utama (main), fungsi gamma dan fungsi

untuk menyimpan file. Sebelum fungsi utama pada program ini dijelaskan

fungsi gamma terlebih dahulu yang nantinya dipanggil pada fungsi main.

Untuk fungsi penyimpanan file boleh dipilih pengguna apakah ingin

menyimpan file atau tidak. Kemudian hasil program akan menghasilkan nilai

dt, dx, dan gamma. Hasil akhirnya berupa matriks M yang kita inginkan yang

nilainya diperoleh secara numerik.

3. Heat equation in 2D

}

source

Pangkal

Program :

/* heat equation 2D */

#include <conio.h>#include <stdio.h>#include <math.h>

float Gamma;void input_matrix(float B[100][100], int p){

int k, l;for(k=0; k<p*p; k++)

{for(l=0; l<p*p; l++)

{if(l==k)

B[k][l] = 1-(4*Gamma);else if(l==k-p || l==k+p)

B[k][l] = Gamma;else if(l==k+1 && l%p!=0)

B[k][l] = Gamma;else if(l==k-1 && k%p!=0)

B[k][l] = Gamma;else

B[k][l] = 0;}

}}

float f(float d, float g){

return (5*exp(-50*(((-0.1)*(d-0.1))-((g-0.25)*(g-0.25)))));}

float h(float o, float p){

return (((o*o)+(p*p))/50);}

main(){ int i, j, k, f, n, x, y; float m, a, Gamma, Dx, Dt, alpha, T, xi, yj, A[100][100], B[100][100]; void input_matrix(float B[100][100], int p);

printf("\n\t\t Heat Equation 2D\n "); printf (" \n\n\n Nilai x dan nilai y maksimal = "); scanf("%f", &a); printf (" \n Nilai T maksimal = "); scanf("%f", &T); printf (" \n Banyaknya grid yang diinginkan = "); scanf("%f", &n); printf (" \n konstanta alpha = "); scanf("%f", &alpha);

Dx = a/(n+1); Dt = (Dx*Dx)/(8*alpha); //syarat stabilitas parabolik 2D Gamma = alpha*Dt/(Dx*Dx); input_matrix(A, n); //menginput matrix A printf ("Dt = %f\n",Dt); printf ("Dx = %f\n",Dx); printf ("Gamma = %f\n", Gamma); printf ("\n\n\n MATRIKS A\n\n\n"); for (i=0; i<n*n; i++) { for (j=0; j<n*n; j++) { printf("%.2f\t", A[i][j]); } printf ("\n"); } m = T/Dt; printf ("\n m = %d\n", m); printf ("\n Hasil = \n"); printf ("t\ti (xi)\t\tj (yj)\t\tB(x,y)\n"); for (i=0; i<m; i++) { printf("\n%.2f", (i+1)*Dt); { for (j=0; j<n*n; j++) B[i+1][j] += A[j][k] * B[i][k]; if(n != 0 && (j+1)%n == 0) x=n; else x = (j+1)%n;

xi = x*Dx; y = (j/n)+1; yj = y*Dx; B[i+1][j] += (xi,yj)*Dt;

if(y==1) B[i+1][j] += Gamma*h(xi,0);

if(y==n) B[i+1][j] += Gamma*h(xi,yj+Dx);

if(x==1) B[i+1][j] += Gamma*h(0,yj);

if(x==n) B[i+1][j] += Gamma*h(xi+Dx,yj);

printf("\t%d (%.2f)\t%d (%.2f)\t%f\n", x, xi, y, yj, B[i+1][j]);printf("\n");

}}return 0;

}

Tampilan

GRAFIK

Program matlab :

%heat equation 2Dclear; close all; clcn = 5; %grid has n - 2 interior points per dimension (overlapping)x = linspace(0,1,n); dx = x(2)-x(1); y = x; dy = dx;TOL = 1e-50; T = zeros(n);T(1,1:n) = 0; %TOPT(n,1:n) = 1; %BOTTOMT(1:n,1) = 0; %LEFTT(1:n,n) = 1; %RIGHTdt = dx^2/4;error = 1; k = 0; while error > TOL k = k+1; Told = T; for i = 2:n-1 for j = 2:n-1 T(i,j) = dt*((Told(i+1,j)-2*Told(i,j)+Told(i-1,j))/dx^2 ... + (Told(i,j+1)-2*Told(i,j)+Told(i,j-1))/dy^2) ...

+ Told(i,j); end end error = max(max(abs(Told-T))); endsubplot(2,1,1),contour(x,y,T),title('Temperature (heat equation)'),xlabel('x'),ylabel('y'),colorbarsubplot(2,1,2),pcolor(x,y,T),shading interp,title('Temperature (heat equation)'),xlabel('x'),ylabel('y'),colorbar

Analisa :

Dalam prinsip-prinsip perpindahan panas disebutkan bahwa panas adalah

suatu bentuk energi yang dipindahkan melalui batas system yang ada pada

temperatur yang lebih tinggi ke system lain atau lingkungan yang mempunyai

temperatur yang lebih rendah. Suatu benda tidak dapat memiliki panas, akan tetapi

panas dapat dikenali pada saat melalui batas sistem. Sedangkan perpindahan panas

adalah berlangsungnya perpindahan energi karena adanya perbedaan temperatur

antara dua sistem yang bersinggungan, dimana arah perpindahannya dari daerah

yang bertemperatur lebih rendah didalam suatu medium baik padat, cair maupun

gas.

Dalam heat equation dua-dimensi, kita membutuhkan syarat batas di

sepanjang batas. Dengan batas x diantara 0 sampai 1 dan nilai y diantara 0 sampai

1. Kita mempunyai fungsi gelombang sumber

. Dari fungsi tersebut, dapat dilihat bahwa

kita membutuhkan nilai x dan y sehingga pada program sebelum mengolah fungsi

gelombang kita menginputkan nilai x dan y yang sudah ditentukan.

Tetapi dari program yang di dapat nilai yang keluar tidak sesuai dengan

perhingan analitiknya. Pada program dibuat fungsi gamma terdahulu. Yang

kemudian dipanggil pada fungsi utama. Pada fungsi utama yang diinputkan

terlebih dahulu adalah nilai x, y, T, jumlah parsial yang diinginkan dan konstanta

alpha. Nilai alpha yang diinputkan digunakan untuk menghitung nilai gamma,

dengan rumus : Gamma = alpha*Dt/(Dx*Dx). Setelah itu kita mendapatkan

nilai gamma dan nilai dx serta dy. Setelah itu baru dibuat program perulangan

untuk mendapatkan matriks menggunakan nilai tersebut.