Upload
afinanisa1
View
132
Download
8
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 :
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