Anda di halaman 1dari 19

FISIKA KOMPUTASI Program Mengunakan Bahasa C

DISTRIBUSI PANAS , PERSAMAAN GELOMBANG, HEAT EQUATION

Oleh: 1. Tifa Alief Saditareno 2. Nurainy Kusumawati 3. Rina Kurnia 4. Mentari Halimun 5. Orina Amelia 140310090052 140310100010 140310100034 140310100042 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 u u = 10 dan syarat batas bawah plat dengan = 30 . y y Bila setiap titik pada plat tersebut terdapat generasi kalor sebesar 5 cal/cm 3 dan jika diketahui bahwa untuk plat tersebut konduktivitas termalnya Neuman dengan adalah k = 0.16 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)

cal , tentukan distribusi temperaturnya. sec.cm 2

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 : u ( x, t ) = cos t sin x 2u 2 u =0, t 2 y 2 u(0,t)=u(1,t)=0, u(x,0)= sin x , 0<x<1 0<t u(x,0) = 0 x 1 0<t

u ( x, 0) = 0 , t 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; } } }

0 x 1

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 equation clear; 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-1 u(i,2) = 0.5*(dt^2*c^2*(u(i+1,1)-2*u(i,1)+u(i1,1))/dx^2+2*u(i,1)); end u(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(i1,k))/dx^2+2*u(i,k)-u(i,k-1); end

u(n,k+1) = 0; end plot(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 u ( x, t ) . 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 u 2u 2u = + + f ( x, y ) t x 2 y 2 = {( x, y )0 x 1, 0 y 1 } f ( x, y ) = 5e 50{( x 0.1) 2 ( y 0.25) 2 }


Pangkal source

u ( x, 0, t ) = u ( x,1, t ) = u (0, y, t ) = u (1, y, t ) = ( u ( x, y , 0) = 50{( x 0.1) 2 ( y 0.25) 2 }

x2 + y 2 ), t > 0 50

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 = Dt = //syarat Gamma = a/(n+1); (Dx*Dx)/(8*alpha); stabilitas parabolik 2D 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 2D clear; close all; clc n = 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; %TOP T(n,1:n) = 1; %BOTTOM T(1:n,1) = 0; %LEFT T(1:n,n) = 1; %RIGHT dt = 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(i1,j))/dx^2 ... + (Told(i,j+1)-2*Told(i,j)+Told(i,j1))/dy^2) ...

end

+ Told(i,j);

end error = max(max(abs(Told-T))); end subplot(2,1,1),contour(x,y,T), title('Temperature (heat equation)'),xlabel('x'),ylabel('y'),colorbar subplot(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

f ( x, y ) = 5e 50{( x 0.1) 2 ( y 0.25) 2 } . 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.

Anda mungkin juga menyukai