Minggu, 15 Desember 2013

Perambatan Panas Secara Konduksi 1 Dimensi

Perpindahan panas adalah ‘mengalirnya’ panas dari suhu tinggi ke suhu rendah. Sedangkan ‘mengalirnya’ panas dapat dibedakan menjadi 3 berdasarkan medium alir atau rambatnya. Panas yang merambat melalui medium namun tanpa merubah posisi partikel dari mediumnya disebut Konduksi. Sedang panas yang merambat melalui medium namun juga merambatkan (menggerakan searah rambatan panas) partikel medianya disebut Konveksi. Dan Radiasi adalah perambatan panas tanpa adanya medium perambatan.
Contoh yang akan dibahas adalah perambatan panas secara konduksi, dimana partikel dari logam yang tidak berpindah seiring menghilangnya panas pada batang logam tersebut. Dan kasus kali ini adalah ketika sebuah logam kedua ujungnya diberi sumber panas yang berbeda, yang jika digambarkan seperti ini : 
Dan akan memperlihatkan perubahan suhu disetiap titik (dx = 20) disetiap waktunya melalui grafik dibawah ini :




Contoh di atas adalah contoh perambatan panas secara konduksi, Dimana partikel dari logam tidak berpindah seiring menghilangnya panas pada batang logam tersebut.
untuk mendapatkan kurva tersebut, dapat dilakukan dengan langkah seperti :

  dengan keadaan :
persamaan yang berlaku untuk sistem tersebut :   

dimana nilai D adalah tetapan difusi, adalah konduktifitas termal penghantar, yang berasal dari masa jenis penghantar. Dalam teknik komputasi, langah pertama sistem fisisnya diubah ke dalam bentuk diskrit.
Caranya :





               
Nilai turunan hanya untuk nilai disalah satu titik, missal di x4
               Nilai turunan sepanjang x

Hasil akhir yang ingin saya tunjukan adalah, grafik perubahan suhu tiap waktunya, untuk setiap titik. Dimana sumbu-X sebagai panjang dari batang logam tersebut, dan sumbu-Y sebagai Suhu. 
Dan nilai awal yang saya berikan disini, antara lain :


TL = 70
TR = 90
T Logam = 30 
panjang logam = 1 meter
banyak cacah = 20 atau 1/20

Bahasa pemrograman yang digunakan adalah bahasa Matlab. Disini akan saya tampilkan hasil akhirnya :
clear all;
clc;
 
close;

%function difusi 
D = 1
 
L = 1 
%syarat batas 
TL = 70
 
TR = 90 
%syarat awal 
T0 = 27 
%Diskretisasi panjang 
hx = 0.1
 
Nx = L/hx
 
perhx = 1/hx
 
perhx2 = perhx*perhx 
 %Diskretisasi waktu 
dt = 0.1
 
nmax = 100
 
nsave = 10 
 %proses 
for i = 1 : Nx+2
 
    x(i) = (i-1)*hx
 
end 
T(1) = TL 
T(Nx+2) = TR
 
T(1)=TL 
for i = 3:Nx+1 
    T(i) = T0
 
end 
for n = 1:nmax 
     tn = n*dt
 
     for i = 3:Nx+1
 
         T(i) =(D*dt/perhx2)*(T(i+1)-2*T(i)+T(i-1))+T(i);
 
     end
 
     if mod(n,nsave)
 
        Suhu = [x' T'] csvwrite(['test_' num2str(n) '.csv'],Suhu,x,T)
 
     end
 
end 


Dan jika kita menggunakan bahasa pemrograman Borland Dhelpi7, 
tampilan form yang dimaksud :


dengan algoritma sebagai berikut :

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    SG1: TStringGrid;
    Button1: TButton;
    EdSuhuKiri: TEdit;
    EdSuhuKanan: TEdit;
    EdSuhuAwal: TEdit;
    EdPanjang: TEdit;
    EdCacah: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure SG1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=0 to 1999 do
  begin
  SG1.Cells[i,0]:='t'+ inttostr(i);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var o,L,Tl,Tr,T,Nx,hx,tm,D,dt:real;
i,n: integer;
begin
L:=strtofloat(edPanjang.Text);
Tl:=strtofloat(edSuhuKiri.Text);
Tr:=strtofloat(edSuhuKanan.Text);
T:=strtofloat(edSuhuAwal.Text);
Nx:=strtofloat(edCacah.Text);
tm:=2000;
dt:=L/tm;
D:=1;
hx:=1/Nx;

SG1.RowCount:=round(Nx+1);
SG1.ColCount:=round(tm+1);
with SG1 do
begin
  for i:= 1 to round(Nx-1) do
  for n:= 0 to round(tm-1) do
  begin
  cells[0,1]:=floattostr(Tl);
  cells[n,round(Nx-1)]:=floattostr(Tr);
  cells[0,i]:=floattostr(T);
  end;
  for n:=0 to round(tm-1) do
  for i:=2 to round(Nx-2) do
  begin
  cells[n,1]:=floattostr(Tl);
  cells[n,round(Nx-1)]:=floattostr(Tr);

  o := dt*D*(strtofloat(cells[n,i-1]) - 2*strtofloat(cells[n,i]) + strtofloat(cells[n,i+1])) / (hx*hx) + strtofloat(cells[n,i]);
  cells[n+1,i]:=floattostr(o);
  end;

end;
end;

procedure TForm1.SG1Click(Sender: TObject);
var
Nx:integer;
begin
Nx:=strtoint(edCacah.Text);
SG1.RowCount:=Nx+1;
end;

procedure XlsWriteCellLabel(XlsStream: TStream; const ACol, ARow: Word;
const AValue: string);
var
L: Word;
const
{$J+}
CXlsLabel: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
{$J-}
begin
L := Length(AValue);
CXlsLabel[1] := 8 + L;
CXlsLabel[2] := ARow;
CXlsLabel[3] := ACol;
CXlsLabel[5] := L;
XlsStream.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));
XlsStream.WriteBuffer(Pointer(AValue)^, L);
end;
function SaveAsExcelFile(AGrid: TStringGrid; AFileName: string): Boolean;
const
{$J+} CXlsBof: array[0..5] of Word = ($809, 8, 00, $10, 0, 0); {$J-}
CXlsEof: array[0..1] of Word = ($0A, 00);
var
FStream: TFileStream;
I, J: Integer;
begin
Result := False;
FStream := TFileStream.Create(PChar(AFileName), fmCreate or fmOpenWrite);
try
CXlsBof[4] := 0;
FStream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
for i := 0 to AGrid.ColCount - 1 do
for j := 0 to AGrid.RowCount - 1 do
XlsWriteCellLabel(FStream, I, J, AGrid.cells[i, j]);
FStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
Result := True;
finally
FStream.Free;
end;
 end;

// button1 untuk save ke excel
procedure TForm1.Button2Click(Sender: TObject);
begin
If SaveAsExcelFile(SG1,'C:\Users\A43S\Desktop\difusi.xls') then
ShowMessage('StringGrid saved!');
end;


end.















Share This!


Tidak ada komentar:

Posting Komentar

Powered By Blogger · Designed By Seo Blogger Templates| Distributed by Rocking Templates