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 :

Bahasa pemrograman yang digunakan adalah bahasa Matlab. Disini akan saya tampilkan hasil akhirnya :
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.
dengan keadaan :
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.

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;
clc;
close;
%function difusi
D = 1
L = 1
D = 1
L = 1
%syarat batas
TL = 70
TR = 90
TL = 70
TR = 90
%syarat awal
T0 = 27
T0 = 27
%Diskretisasi panjang
hx = 0.1
Nx = L/hx
perhx = 1/hx
perhx2 = perhx*perhx
hx = 0.1
Nx = L/hx
perhx = 1/hx
perhx2 = perhx*perhx
%Diskretisasi waktu
dt = 0.1
nmax = 100
nsave = 10
dt = 0.1
nmax = 100
nsave = 10
%proses
for i = 1 : Nx+2
x(i) = (i-1)*hx
end
for i = 1 : Nx+2
x(i) = (i-1)*hx
end
T(1) = TL
T(Nx+2) = TR
T(1)=TL
T(Nx+2) = TR
T(1)=TL
for i = 3:Nx+1
T(i) = T0
end
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
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 :
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.







Tidak ada komentar:
Posting Komentar