APENDIX A PERSAMAAN MAXWELL
Persamaan Maxwell dalam bentuk differensial. ⃗
Hukum Gauss
⃗ ⃗
Hukum Gauss untuk magnetisme
⃗ ⃗
Hukum Induksi Faraday
⃗
⃗
Hukum Ampere
⃗
⃗
(A.1) (A.2) ⃗
(A.3) ⃗
(A.4)
Persamaan Maxwell dalam bentuk integral Hukum Gauss
∮ ⃗
Hukum Gauss untuk magnetisme
∮ ⃗
Hukum Induksi Faraday
∮⃗
Hukum Ampere
∮⃗
⃗
∫
(A.5) (A.6)
∫⃗ ∫⃗
(A.7) ∫
(A.8)
Karena (teorema Gauss dan Stokes) ∮ ⃗
∮
∮ ⃗
∮
Untuk medan listrik pada persamaan (A.5) dan (A.7) dalam keadaan konservatif sehingga dapat ditulis :
⃗
⃗ ⃗
(A.9)
⃗
(A.10)
Selanjutnya hubungan vektornya ⃗
⃗
(A.11)
⃗
⃗ ⃗
(A.12)
dan
i
⃗
∫⃗
(A.13)
⃗ = kerapatan fluks listrik (C/m2) = rapat volume muatan (C/m3) ⃗ = Medan Listrik (V/m) ⃗ = tegangan listrik (V) = permitivitas dielektrik (F/m)
Hubungkan persamaan (A.9), (A.11) dan (A.12) akan didapat persamaan Poisson : ⃗
⃗⃗
(A.14a)
Jika konstan, ⃗ Jika
(A.14b)
maka menjadi persamaan Laplace : ⃗
⃗⃗
(A.15a)
⃗
(A.15b)
Karena (hukum Biot-Savart) ∮ ⃗
∮
∮⃗ ⃗ = fluks magnet (A/m) ⃗ = Medan magnet (T) Maka persamaan (A.6) dan(A.8) menjadi ⃗
⃗
(A.16)
Dan ⃗ ⃗
(A.17)
Dengan hubungan vector ⃗
= permeabilitas magnetic (H/m) =konduktivitas (mhos/m)
⃗
(A.18)
⃗
(A.19)
Medan magnet pada potensial A ⃗
⃗
(A.20)
Dengan menggunakan vektor identitas ⃗
(⃗
⃗ (⃗
)
)
Jika (A.17) dan (A.18) dihubungkan dalam kondisi tanpa arus (ruang hampa) maka ⃗
sehingga didapat persamaan Poisson : (A.21)
Ketika
maka (A.22)
i
APENDIX B PERSAMAAN GELOMBANG
Gelombang Elektromagnetik merambat secara transversal. Dengan medan listrik dan medan magnet yang merambat saling tegak lurus. Misalkan gelombang elektromagnet merambat ke sumbu-x dan arah gerak medan listrik ke sumbu-y sementara medan magnetik ke sumbu-z sehingga diperoleh ⃗ ⃗
⃗
⃗ ⃗
dan ⃗
⃗
⃗ . Maka persamaan Maxwell akan berubah menjadi : ⃗ ⃗ ⃗
(B.1) ⃗ ⃗
⃗
(B.2)
⃗
⃗
⃗ ⃗
(B.3)
⃗
⃗
⃗
(B.4) ⃗
⃗ ⃗
(B.5) ⃗⃗
⃗
(B.6)
Persamaan (B.4) dan persamaan (B.6) bisa disimpulkan medan listrik dan medan magnet hanya berpengaruh pada sumbu x dan gayut waktu. ⃗
⃗
⃗
⃗
Jika digabungkan maka menjadi : ⃗
⃗
Bandingkan dengan persamaan gelombang umum :
Atau ,
=0
Maka diperoleh nilai √ Dengan v = c = kecepatan cahaya = 3 x 108 m Dengan mengubah daerah waktu menjadi frekuensi maka
Dengan Maka persawaan Maxwell dapat dituliskan ⃗( )
( )⃗ ( )
⃗( )
( )⃗ ( )
Dengan vektor perambatan elektromagnetik sebagai berikut : ( )
⃗( )
⃗( )
( )
⃗( )
⃗( )
⃗( )
⃗( )
( )
( )⃗ ( )
(
( )
( )
) ( ) ⃗ ( )⃗ ( )
( )
(
) ( )⃗ ( )
( ) ( ) ⃗ ( )⃗ ( )
Maka dapat disimpulkan bahwa √ Dengan n adalah indeks bias.
√
i
APENDIX C METODE FDTD (FINITE DIFFERENCE TIME DOMAIN)
Metode ini menggunakan turunan fungsi yang dihubungkan dengan beda hingga seperti berikut (
( )
)
( )
(C.1)
Dengan dihubungkan ke dalam medan listrik dan medan magnet, akan dihasilkan persamaan FDTDnya misalkan untuk waktu penjalaran medan E dan medan H sebagai berikut untuk ⃗ (
untuk ⃗
)
dan letak pada sumbu z misalkan untuk ⃗ (
untuk ⃗
)
Telah diketahui persamaan Maxwell
Dengan notasi ⃗ ( ) )
⃗(
⃗
⃗
⃗
⃗
(C.2) (C.3)
) dan ⃗
(
)
⃗ ((
)
Maka didapat : ⃗
⃗ ( ⃗
⃗
⃗ ( )
) ( )
⃗ ( )
⃗
⃗
(
)
⃗
(
)
⃗
⃗
(
)
⃗
(
)
)
(
Dengan menghubungkan ke dalam persamaan (C.2) dan (C.3) persamaan diatas menjadi ⃗
( ⃗
⃗
)
(
⃗ ( )
( )
(⃗ (
) (⃗
( ⃗
Dengan
dan
⃗
)
⃗ ( )
) (
)
(C.4)
⃗
(C.5)
dalam model Drude diberikan dalam persamaan ( )
Substitusi model Drude dalam persamaan (C.5) akan didapat ⃗ ⃗ ⃗ ⃗
)⃗
( (
(
⃗
⃗
(
)
( )
(
(
)⃗
(
)⃗
)
)⃗
)
⃗
⃗
)⃗
(
(C.6)
nilai fungsi frekuensi dikonversikan menjadi fungsi waktu dengan hubungan dan
. Dengan perkalian ⃗
merupakan waktu rata-rata. Maka :
⃗
⃗
⃗
⃗
Dengan cara yang sama sebelumnya akan di dapat : ⃗
(⃗ ( ⃗
⃗ ⃗
⃗ )
(⃗
) (⃗
⃗
( ⃗
)
)
⃗
(C.7)
Nilai variabel tambahan dalam persamaan yang baru merupakan skalar yaitu (
)
(
)
(
)
i
( (
)
)
)
dan ⃗
(⃗
⃗
⃗
)
( ⃗
⃗
)
(⃗
(⃗
⃗
( ⃗
)
)
⃗
(
)
)
Maka persamaan FDTD gelombang yang merambat dalam arah z sebagai berikut ⃗
⃗ ( )
( )
(⃗ ( )
⃗ (
))
(
)
dan ⃗
⃗ ( )
( )
(⃗ ( )
⃗ (
))
(
)
Persamaan diatas memberikan algoritma FDTD untuk ⃗ dan ⃗ . Untuk indeks bias FDTD dihubungkan dengan transformasi Fourier sebagai pengubah ke FDTD : √ Untuk medium yang homogen nilai = 1 sehingga indeks bias hanya bergantung dan bergantung kepada medan listrik. ̃(
̃(
∫ ⃗(
)
)
∫ ⃗( )
)
(
(
)
)
(
)
Sehingga didapat bahwa hasil transformasi Fouriernya adalah ̃(
)
⃗( )
(
)
Indeks bias merupakan perbandingan kecepatan antara dua medium maka persamaan diatas dapat diubah menjadi : ̃(
)
̃(
)
|
( (
⃗( ) ⃗( ) ) | )
(
(
)
(
) )
(
|
)
⃗ ( ⃗ (
) )
|
Untuk simulasi dalam jubah silinder maka diperlukan persamaan dalam koordinat silinder sebagai berikut: ( ) ( ) ( )
(
)
(
)
(
)
(
)
Dari transformasi kartesius : (C.13) (
)
(C.14) (C.15)
Sehingga ⃗
( ⃗ )
(
⃗
)
(
)
(
)
(
)
⃗
( )
⃗ ⃗
( )
⃗
i
APENDIX D PROGRAM MATLAB clc clear all % Adimas Agung % 110801001 % Simulasi Parameter. SIZE = 4*1024; % Angka beda langkah SlabLeft = round(SIZE/3); % Letak sebelah kiri lempengan SlabRight = round(2*SIZE/3); % Letak sebelah kanan lempengan MaxTime = 4*SIZE; % Jumlah langkah waktu PulseWidth = round(SIZE/8); % Lebar Pulsa Gauss td = PulseWidth; % tempo pulsa. source = 10; % Letak Sumber SaveFields = 1; % 0. No, 1. Ya menyimpan. SnapshotInterval = 32; % jumlah waktu untuk memfoto (menangkap layar).
% Memilih Sumber Gelombang. % 1. Gaussian 2. Sine wave 3. Ricker wavelet SourceChoice = 2;
% Konstanta yang digunakan. c = 3e8; pi = 3.141592654; e0 = (1e-9)/(36*pi); u0 = (1e-7)*4*pi;
dt = 0.5e-11; dz = 3e-3; Sc = c * dt/dz
l = PulseWidth*dz; f = c/l fmax = 1/(2*dt) w = 2*pi*f; k0 = w/c; % bilangan gelombang.
% Parameter dalam Ricker wavelet. if SourceChoice == 3 fp = f; % puncak ke puncak frekuensi dr = PulseWidth*dt*2; % Waktu tunggu end
% Inisialisasi. Ex = zeros(SIZE, 3); % komponen x untuk medan E Dx = zeros(SIZE, 3); % komponen x untuk D Hy = zeros(SIZE, 3); % komponen y untuk medan H By = zeros(SIZE, 3); % komponen y medan B
% Medan datang dan transmisi. Exi = zeros(MaxTime, 1); Ext = zeros(MaxTime, 1); Extt = zeros(MaxTime, 1); x1 = SlabLeft+1; % letak observasi (posisi pengamatan).
% Penghitungan index Bias. Z1 = SlabLeft + 50; z1 = Z1*dz; Z2 = SlabLeft + 60; z2 = Z2*dz; Exz1 = zeros(MaxTime, 1); Exz2 = zeros(MaxTime, 1);
einf = ones(SIZE,1); einf(SlabLeft:SlabRight) = 1; % einf(Drude) atau er di lempengan. uinf = ones(SIZE,1); uinf(SlabLeft:SlabRight) = 1; % uinf(Drude) atau ur di lempengan. wpesq = zeros(SIZE,1); wpesq(SlabLeft:SlabRight) = 2*w^2; % nilai DNG(Drude) untuk wpe kuadrat pada lempengan. wpmsq = zeros(SIZE,1); wpmsq(SlabLeft:SlabRight) = 2*w^2; % nilai DNG(Drude) untuk wpm kuadrat pada lempengan. ge = zeros(SIZE,1); ge(SlabLeft:SlabRight) = w/32; % frekuensi listrik pada lempengan. gm = zeros(SIZE,1);
i
gm(SlabLeft:SlabRight) = w/32; % frekuensi magnet pada lempengan.
a0 = (4*dt^2)./(e0*(4*einf+dt^2*wpesq+2*dt*einf.*ge)); a = (1/dt^2)*a0; b = (1/(2*dt))*ge.*a0; c = (e0/dt^2)*einf.*a0; d = (-1*e0/4).*wpesq.*a0; e = (1/(2*dt))*e0*einf.*ge.*a0; am0 = (4*dt^2)./(u0*(4*uinf+dt^2*wpmsq+2*dt*uinf.*gm)); am = (1/dt^2)*am0; bm = (1/(2*dt))*gm.*am0; cm = (u0/dt^2)*uinf.*am0; dm = (-1*u0/4).*wpmsq.*am0; em = (1/(2*dt))*u0*uinf.*gm.*am0;
if SaveFields == 1 ExSnapshots = zeros(SIZE, MaxTime/SnapshotInterval); % Data yang akan diplot (bentuk kurva). frame = 1; end
n1 = 1; n2 = 2; linecount = 0; % waktu keluar dari pengulangan. tic % uji pengulangan untuk medan datang pada ruang bebas. for q = 0:MaxTime % Penghitungan Hy menggunakan turunan persamaan Hy. Beda waktu q. Hy(1:SIZE-1,n2) = Hy(1:SIZE-1,n1) + ( ( Ex(1:SIZE-1,n1) Ex(2:SIZE,n1) ) * dt/(u0*dz) );
% ABC untuk ukuran H. Hy(SIZE,n2) = Hy(SIZE-1,n1) + (Sc-1)/(Sc+1)*(Hy(SIZE-1,n2) Hy(SIZE,n1) );
% Penghitungan Ex menggunakan turunan persamaan Ex. Beda waktu q+1/2.
Ex(2:SIZE,n2) = Ex(2:SIZE, n1) + ( dt/(e0*dz)*(Hy(1:SIZE-1, n2) Hy(2:SIZE, n2)) );
% ABC untuk E di 1. Ex(1,n2) = Ex(2,n1) + (Sc-1)/(Sc+1)*(Ex(2,n2) - Ex(2,n1));
% Sumber. if SourceChoice == 1 Ex(source,n2) = Ex(source,n2) + exp( -1*((q-td)/(PulseWidth/4))^2 ) * Sc; elseif SourceChoice == 2 Ex(source,n2) = Ex(source,n2) + sin(2*pi*f*(q)*dt) * Sc; elseif SourceChoice == 3 Ex(source,n2) = Ex(source,n2) + (1-2*(pi*fp*(q*dt-dr))^2)*exp(1*(pi*fp*(q*dt-dr))^2) * Sc; end
Exi(q+1) = Ex(x1,n2); % Medan datang di kiri lempengan.
temp = n1; n1 = n2; n2 = temp; end % Pengulangan inisialisasi medan untuk simulasi. Ex = zeros(SIZE, 3); % komponen x untuk medan E Hy = zeros(SIZE, 3); % komponen y untuk medan H % Simulasi dimulai. fprintf ( 1, 'Simulation started... \n'); for q = 0:MaxTime
% Indikator. fprintf(1, repmat('\b',1,linecount)); linecount = fprintf(1, '%g %%', (q*100)/MaxTime );
Ex(:,3) = Ex(:,n2); Dx(:,3) = Dx(:,n2); Hy(:,3) = Hy(:,n2); By(:,3) = By(:,n2);
i
% Penghitungan Hy menggunakan turunan persamaan Hy. Beda waktu q. By(1:SIZE-1,n2) = By(1:SIZE-1,n1) + ( ( Ex(1:SIZE-1,n1) Ex(2:SIZE,n1) ) * dt/(dz) ); Hy(:,n2) = am.*(By(:,n2)-2*By(:,n1)+By(:,3))+bm.*(By(:,n2)By(:,3))+cm.*(2*Hy(:,n1)Hy(:,3))+dm.*(2*Hy(:,n1)+Hy(:,3))+em.*(Hy(:,3));
% ABC untuk ukuran. Hy(SIZE,n2) = Hy(SIZE-1,n1) + (Sc-1)/(Sc+1)*(Hy(SIZE-1,n2) Hy(SIZE,n1) ); By(SIZE,n2) = u0*Hy(SIZE,n2);
% Penghitungan Ex menggunakan persamaan diferensial Ex. Beda waktu q+1/2. Dx(2:SIZE,n2) = Dx(2:SIZE, n1) + ( dt/(dz)*(Hy(1:SIZE-1, n2) Hy(2:SIZE, n2)) ); Ex(:,n2) = a.*(Dx(:,n2)-2*Dx(:,n1)+Dx(:,3))+b.*(Dx(:,n2)Dx(:,3))+c.*(2*Ex(:,n1)Ex(:,3))+d.*(2*Ex(:,n1)+Ex(:,3))+e.*(Ex(:,3)); % ABC untuk E di 1. Ex(1,n2) = Ex(2,n1) + (Sc-1)/(Sc+1)*(Ex(2,n2) - Ex(2,n1)); Dx(1,n2) = e0*Ex(1,n2);
% Sumber. if SourceChoice == 1 Ex(source,n2) = Ex(source,n2) + exp( -1*((q-td)/(PulseWidth/4))^2 ) * Sc; elseif SourceChoice == 2 Ex(source,n2) = Ex(source,n2) + sin(2*pi*f*(q)*dt) * Sc; elseif SourceChoice == 3 Ex(source,n2) = Ex(source,n2) + (1-2*(pi*fp*(q*dt-dr))^2)*exp(1*(pi*fp*(q*dt-dr))^2) * Sc; end Dx(source,n2) = e0*Ex(source,n2);
if (SaveFields == 1 && mod(q,SnapshotInterval) == 0) ExSnapshots(:,frame) = Ex(:,n2);
frame=frame+1; end
Ext(q+1) = Ex(x1,n2); Extt(q+1) = Ex(SlabRight+10,n2);
% Medan untuk Penghitungan index bias. Exz1(q+1) = Ex(Z1, n2); Exz2(q+1) = Ex(Z2, n2);
temp = n1; n1 = n2; n2 = temp; end fprintf ( 1, '\nSimulation complete! \n'); toc % Pengolahan. Fs = 1/dt;
% pengambilan sampel frekuensi
T = dt;
% waktu sampel
L = length(Exi);
% Panjang sinyal
t = (0:L-1)*T;
% Vektor waktu
fspan = 100;
% Titik alur dalam daerah frekuensi
figure(1) subplot(211) plot(Fs*t, Exi, 'LineWidth', 2.0, 'Color', 'b') set(gca, 'FontSize', 10, 'FontWeight', 'b') title('Medan Listrik Datang', 'FontSize', 12, 'FontWeight', 'b') xlabel('waktu', 'FontSize', 11, 'FontWeight', 'b') grid on figure(2) subplot(211) plot(Fs*t, Ext, 'LineWidth', 2.0, 'Color', 'b') set(gca, 'FontSize', 10, 'FontWeight', 'b') title('Transmisi Medan Listrik', 'FontSize', 12, 'FontWeight', 'b') xlabel('waktu', 'FontSize', 11, 'FontWeight', 'b') grid on figure(3) subplot(211)
i
plot(Fs*t, Extt, 'LineWidth', 2.0, 'Color', 'b') set(gca, 'FontSize', 10, 'FontWeight', 'b') title('Transmisi Medan Listrik Melalui Lempeng', 'FontSize', 12, 'FontWeight', 'b') xlabel('waktu', 'FontSize', 11, 'FontWeight', 'b') grid on
NFFT = 2^nextpow2(L); % untuk tenaga kedua dari Exi % Medan datang dan transmisi. EXI = fft(Exi,NFFT)/L; EXT = fft(Ext,NFFT)/L; EXTT = fft(Extt,NFFT)/L; % Penghitungan Index Bias. EXZ1 = fft(Exz1,NFFT)/L; EXZ2 = fft(Exz2,NFFT)/L; f = Fs/2*linspace(0,1,NFFT/2+1); % Membuat alur spektrum amplitudo satu bagian. figure(1) subplot(212) EXIp = 2*abs(EXI(1:NFFT/2+1)); plot(f(1:fspan), EXIp(1:fspan), 'LineWidth', 2.0, 'Color', 'r') set(gca, 'FontSize', 10, 'FontWeight', 'b') title('Spektrum Amplitudo Exi(t)', 'FontSize', 12, 'FontWeight', 'b') xlabel('Frekuensi (Hz)', 'FontSize', 11, 'FontWeight', 'b') ylabel('|EXI(f)|', 'FontSize', 11, 'FontWeight', 'b') grid on figure(2) subplot(212) EXTp = 2*abs(EXT(1:NFFT/2+1)); plot(f(1:fspan), EXTp(1:fspan), 'LineWidth', 2.0, 'Color', 'r') set(gca, 'FontSize', 10, 'FontWeight', 'b') title('Spektrum Amplitudo Ext(t)', 'FontSize', 12, 'FontWeight', 'b') xlabel('Frekuensi (Hz)', 'FontSize', 11, 'FontWeight', 'b') ylabel('|EXT(f)|', 'FontSize', 11, 'FontWeight', 'b') grid on figure(3) subplot(212) EXTTp = 2*abs(EXTT(1:NFFT/2+1)); plot(f(1:fspan), EXTTp(1:fspan), 'LineWidth', 2.0, 'Color', 'r')
set(gca, 'FontSize', 10, 'FontWeight', 'b') title('Spektrum Amplitudo Extt(t)', 'FontSize', 12, 'FontWeight', 'b') xlabel('Frekuensi(Hz)', 'FontSize', 11, 'FontWeight', 'b') ylabel('|EXT(f)|', 'FontSize', 11, 'FontWeight', 'b') grid on % Koefisien Transmisi. figure(4) subplot(211) TAU = abs(EXT(1:NFFT/2+1)./EXI(1:NFFT/2+1)); plot(f(1:fspan), TAU(1:fspan), 'LineWidth', 2.0, 'Color', 'b') set(gca, 'FontSize', 10, 'FontWeight', 'b') title('Koefisien Transmisi', 'FontSize', 12, 'FontWeight', 'b') xlabel('Frekuensi (Hz)', 'FontSize', 11, 'FontWeight', 'b') ylabel('|EXT(f)/EXI(f)|', 'FontSize', 11, 'FontWeight', 'b') axis([-1 1 -2 2]) axis 'auto x' grid on subplot(212) plot(f(1:fspan), 1-TAU(1:fspan), 'LineWidth', 2.0, 'Color', 'b') set(gca, 'FontSize', 10, 'FontWeight', 'b') title('Koefisien Refleksi', 'FontSize', 12, 'FontWeight', 'b') xlabel('Frekuensi (Hz)', 'FontSize', 11, 'FontWeight', 'b') ylabel('1-|EXT(f)/EXI(f)|', 'FontSize', 11, 'FontWeight', 'b') axis([-1 1 -2 2]) axis 'auto x' grid on % Penghitungan Indeks Bias. nFDTD = (1/(1i*k0*(z1-z2))).*log(EXZ2(1:NFFT/2+1)./EXZ1(1:NFFT/2+1)); figure(5) subplot(211) plot(f(1:fspan), real(nFDTD(1:fspan)), 'LineWidth', 2.0, 'Color', 'b'); set(gca, 'FontSize', 10, 'FontWeight', 'b') title('Indeks Bias re(n)', 'FontSize', 12, 'FontWeight', 'b') xlabel('Frekuensi (Hz)', 'FontSize', 11) ylabel('re(n)', 'FontSize', 11) grid on subplot(212)
i
plot(f(1:fspan), imag(nFDTD(1:fspan)), 'LineWidth', 2.0, 'Color', 'r'); set(gca, 'FontSize', 10, 'FontWeight', 'b') title('Indeks Bias im(n)', 'FontSize', 12, 'FontWeight', 'b') xlabel('Frekuensi (Hz)', 'FontSize', 11, 'FontWeight', 'b') ylabel('im(n)', 'FontSize', 11, 'FontWeight', 'b') grid on
if SaveFields == 1 % Simulasi Animasi. for i=1:frame-1 figure (6) % Batas penyebaran. hold off plot([SlabLeft SlabLeft], [-1 1], 'Color', 'r'); hold on plot([SlabRight SlabRight], [-1 1], 'Color', 'r'); plot(ExSnapshots(:,i), 'LineWidth', 2.0, 'Color', 'b'); set(gca, 'FontSize', 10, 'FontWeight', 'b') axis([0 SIZE -1 1]) title('Simulasi Fungsi Waktu', 'FontSize', 12, 'FontWeight', 'b') xlabel('Beda Langkah(k)', 'FontSize', 11, 'FontWeight', 'b') ylabel('Medan Listrik (Ex)', 'FontSize', 11, 'FontWeight', 'b') grid on end end
APENDIX E PROGRAM INVISIBLE CLOAK clear all; close all; % Nilai Konstanta %******************************************************************* c_0 = 3.0e8; % Kecepatan cahaya mu_0 = 4.0*pi*1.0e-7; % Permeabilitas eps_0 = 8.8542e-12; % Permitivitas losstangent = 0.0; ie = 401; je = 400;
% # Besar sel dalam arah x % # Besar sel dalam arah y
ib = ie + 1; jb = je + 1; npmls = 20; ip = ie - npmls; jp = je - npmls; xc = round(ie/2); yc = round(je/2); is = 25; js = 25;
% Letak Sumber Gelombang
it = 30; jt = 30;
% Daerah Medan atas atau bawah % Daerah medan kiri atau kanan
freq = 6.0e14; omega = 2*pi*freq; k_0 = omega/c_0; dx = c_0/freq/400; dt = dx/c_0/sqrt(2);
% Beda waktu
R1 = c_0/freq/8/dx R2 = 1.43*R1;
% dimensi Jubah
nmax = 400000;
% Jumlah beda waktu
aimp = sqrt(mu_0/eps_0);
% impedansi gelombang
threshold = 0.1; step = ceil(nmax/10);
% FDTD error
% freq = 2.0e9; % omega = 2*pi*freq; tau = 1/freq; delay = 3*tau/dt;
i
N = round(tau/dt); M = round(c_0/freq/dx); source = zeros(1,nmax); clear j; ST = 300; st = 20e3; for n=1:nmax if n < ST*N x = 1.0 - (ST*N-n)/(ST*N); g = 10.0*x^3 - 15.0*x^4 + 6.0*x^5; % sumber(n) = g * sin(2*pi*freq*n*dt); source(n) = g * exp(j*2*pi*freq*n*dt); else % sumber(n) = sin(2*pi*freq*n*dt); source(n) = exp(j*2*pi*freq*n*dt); end % sumber (n) = exp(-(((n-delay)*dt)/tau)^2) .* exp(j*2*pi*freq*n*dt); end %******************************************************************* % Inisialisasi matriks untuk komponen medan %******************************************************************* Dx = zeros(ie,jb); Dx_h1 = zeros(ie,jb); Dx_h2 = zeros(ie,jb); Dxsynch = zeros(ie,jb); Dx_h1synch = zeros(ie,jb); Dx_h2synch = zeros(ie,jb); caDx = ones(ie,jb); cbDx = ones(ie,jb).*(dt/eps_0/dx); Ex = zeros(ie,jb); Ex_h1 = zeros(ie,jb); Ex_h2 = zeros(ie,jb); Ex_h1synch = zeros(ie,jb); Ex_h2synch = zeros(ie,jb); Dy = zeros(ib,je); Dy_h1 = zeros(ib,je); Dy_h2 = zeros(ib,je); Dysynch = zeros(ib,je); Dy_h1synch = zeros(ib,je); Dy_h2synch = zeros(ib,je); caDy = ones(ib,je); cbDy = ones(ib,je).*(dt/eps_0/dx); Ey = zeros(ib,je); Ey_h1 = zeros(ib,je); Ey_h2 = zeros(ib,je); Ey_h1synch = zeros(ib,je); Ey_h2synch = zeros(ib,je); Bz = zeros(ie,je); Bz_h1 = zeros(ie,je); Bz_h2 = zeros(ie,je); Bzx = zeros(ie,je); Bzy = zeros(ie,je); Hz_p = zeros(ie,je); daBzx = ones(ie,je); dbBzx = ones(ie,je).*(dt/mu_0/dx); daBzy = ones(ie,je); dbBzy = ones(ie,je).*(dt/mu_0/dx); daBz = ones(ie,je); dbBz = ones(ie,je).*(dt/mu_0/dx); Hz = zeros(ie,je); Hz_h1 = zeros(ie,je); Hz_h2 = zeros(ie,je); % % % %
HzsourceTF = zeros(length(it:ie-it),nmax); HztransTF = zeros(length(it:ie-it),nmax); HzsourceSF = zeros(length(it:ie-it),nmax); HztransSF = zeros(length(it:ie-it),nmax);
% Coefficients for cloak a0x = ones(ie,jb); b0x = ones(ie,jb); b0xy = zeros(ie,jb); a1x = zeros(ie,jb); b1x = zeros(ie,jb); a1xy = zeros(ie,jb); b1xy = zeros(ie,jb); a2x = zeros(ie,jb); b2x = zeros(ie,jb); a2xy = zeros(ie,jb); b2xy = zeros(ie,jb); a0y = ones(ib,je); b0y = ones(ib,je); b0yx = zeros(ib,je); a1y = zeros(ib,je); b1y = zeros(ib,je); a1yx = zeros(ib,je); b1yx = zeros(ib,je);
a2y = zeros(ib,je); b2y = zeros(ib,je); a2yx = zeros(ib,je); b2yx = zeros(ib,je); a0z = ones(ie,je); b0z = ones(ie,je); a1z = zeros(ie,je); b1z = zeros(ie,je); a2z = zeros(ie,je); b2z = zeros(ie,je); % Medan Datang Ex_inc = zeros(1,jb); Hzx_inc = zeros(1,jb); Ey_inc = zeros(1,ib); Hzy_inc = zeros(1,ib); caEx_inc = ones(1,jb); cbEx_inc = ones(1,jb).*(dt/eps_0/dx); caEy_inc = ones(1,ib); cbEy_inc = ones(1,ib).*(dt/eps_0/dx); daHzx_inc = ones(1,je); dbHzx_inc = ones(1,je).*(dt/mu_0/dx); daHzy_inc = ones(1,ie); dbHzy_inc = ones(1,ie).*(dt/mu_0/dx); %******************************************************************* % Jubah %******************************************************************* for i = 1 : ie for j = 1 : je r = sqrt((i - xc + 0.5).^2 + (j - yc).^2); if (r<=R2) && (r>=R1); erx = ((r-R1) / (r)); ethetax = ((r) / (r-R1)); sigma_px = ethetax*losstangent*((tan((omega*dt)/2))/(dt/2)); gamma_px = (2*losstangent*erx*sin((omega*dt)/2))/((1erx)*dt*cos((omega*dt)/2)); omega_px = sqrt((2*sin((omega*dt)/2)*(-2*(erx1)*sin((omega*dt)/2)+... losstangent*erx*gamma_px*dt*cos((omega*dt)/2)))/((dt^2)*((cos((omega* dt)/2))^2)));
sinx = (j - yc)/r; cosx = (i - xc + 0.5)/r; ax = ((cosx.^2) + (ethetax.*(sinx.^2))) ./ (dt^2); bx = ((gamma_px.*(cosx.^2)) + ((sigma_px + (ethetax*gamma_px)).*(sinx.^2))) ./ (2*dt); cx = (((cosx.^2).*((omega_px)^2)) + (sigma_px*gamma_px.*(sinx.^2))) ./ (4); wx = ((1-ethetax).*sinx.*cosx) ./ (dt^2); fx = ((gamma_px-sigma_px-(ethetax*gamma_px)).*sinx.*cosx) ./ (2*dt); vx = ((((omega_px)^2)-(sigma_px*gamma_px)).*sinx.*cosx) ./ (4); kx = 1 / (dt^2); lx = gamma_px / (2*dt);
i
tx = ((sinx.^2) + (ethetax.*(cosx.^2))) ./ (dt^2); qx = ((gamma_px.*(sinx.^2)) + ((sigma_px + (ethetax*gamma_px)).*(cosx.^2))) ./ (2*dt); px = (((sinx.^2).*((omega_px)^2)) + (sigma_px*gamma_px.*(cosx.^2))) ./ (4); Ax1 Bx1 Cx1 Dx1
= = = =
ax+bx+cx; Ax2 = (2.*ax)-(2.*cx); Ax3 = ax-bx+cx; wx+fx+vx; Bx2 = (2.*wx)-(2.*vx); Bx3 = wx-fx+vx; kx+lx; Cx2 = (2.*kx); Cx3 = kx-lx; tx+qx+px; Dx2 = (2.*tx)-(2.*px); Dx3 = tx-qx+px;
a0x(i, j) = Ax1 - (((Bx1).^2) ./ Dx1); a1x(i, j) = Ax2 - ((Bx1.*Bx2) ./ Dx1); a2x(i, j) = ((Bx1.*Bx3) ./ Dx1) - (Ax3);
a1xy(i, j) = Bx2 - ((Bx1.*Dx2) ./ Dx1); a2xy(i, j) = ((Bx1.*Dx3) ./ Dx1) - (Bx3);
b0x(i, j) = Cx1; b1x(i, j) = -Cx2; b2x(i, j) = Cx3;
b0xy(i, j) = -(Bx1.*Cx1) ./ Dx1; b1xy(i, j) = (Bx1.*Cx2) ./ Dx1; b2xy(i, j) = -(Bx1.*Cx3) ./ Dx1;
elseif (r=R1) ery = ((r-R1) / (r)); ethetay = ((r) / (r-R1)); sigma_py = ethetay*losstangent*((tan((omega*dt)/2))/(dt/2)); gamma_py = (2*losstangent*ery*sin((omega*dt)/2))/((1ery)*dt*cos((omega*dt)/2)); omega_py = sqrt((2*sin((omega*dt)/2)*(-2*(ery1)*sin((omega*dt)/2)+...
losstangent*ery*gamma_py*dt*cos((omega*dt)/2)))/((dt^2)*((cos((omega* dt)/2))^2))); siny = (j - yc + 0.5)/r; cosy = (i - xc)/r; ay = ((cosy.^2) + (ethetay*(siny.^2))) ./ (dt^2); by = ((gamma_py*(cosy.^2)) + ((sigma_py + (ethetay*gamma_py)).*(siny.^2))) ./ (2*dt); cy = (((cosy.^2).*((omega_py)^2)) + (sigma_py*gamma_py.*(siny.^2))) ./ (4); wy = ((1-ethetay).*siny.*cosy) ./ (dt^2); fy = ((gamma_py-sigma_py-(ethetay*gamma_py)).*siny.*cosy) ./ (2*dt); vy = ((((omega_py)^2)-(sigma_py*gamma_py)).*siny.*cosy) ./ (4); ky = 1 / (dt^2); ly = gamma_py / (2*dt); ty = ((siny.^2) + (ethetay*(cosy.^2))) ./ (dt^2); qy = ((gamma_py*(siny.^2)) + ((sigma_py + (ethetay*gamma_py)).*(cosy.^2))) ./ (2*dt); py = (((siny.^2).*((omega_py)^2)) + (sigma_py*gamma_py.*(cosy.^2))) ./ (4);
Ay1 By1 Cy1 Dy1
= = = =
ay+by+cy; Ay2 = (2.*ay)-(2.*cy); Ay3 = ay-by+cy; wy+fy+vy; By2 = (2.*wy)-(2.*vy); By3 = wy-fy+vy; ky+ly; Cy2 = (2*ky); Cy3 = ky-ly; ty+qy+py; Dy2 = (2.*ty)-(2.*py); Dy3 = ty-qy+py;
a0y(i, j) = Dy1 - (((By1).^2) ./ Ay1); a1y(i, j) = Dy2 - ((By1.*By2) ./ Ay1); a2y(i, j) = ((By1.*By3) ./ Ay1) - (Dy3);
a1yx(i, j) = By2 - ((By1.*Ay2) ./ Ay1); a2yx(i, j) = ((By1.*Ay3) ./ Ay1) - (By3);
b0y(i, j) = Cy1; b1y(i, j) = -Cy2; b2y(i, j) = Cy3; b0yx(i, j) = -(By1.*Cy1) ./ Ay1; b1yx(i, j) = (By1.*Cy2) ./ Ay1; b2yx(i, j) = -(By1.*Cy3) ./ Ay1;
elseif (r
i
r = sqrt((i - xc).^2 + (j - yc).^2); if (r<=R2) && (r>=R1) muz =
(((r-R1) / (r)) * (((R2) / (R2-R1))^2));
if (muz < 1) gamma_pz = (2*losstangent*muz*sin((omega*dt)/2))/((1muz)*dt*cos((omega*dt)/2)); omega_pz = sqrt((2*sin((omega*dt)/2)*(-2*(muz1)*sin((omega*dt)/2)+... losstangent*muz*gamma_pz*dt*cos((omega*dt)/2)))/((dt^2)*((cos((omega* dt)/2))^2))); a0z(i, a1z(i, a2z(i, b0z(i, b1z(i, b2z(i,
j) j) j) j) j) j)
= = = = = =
1/dt^2 + gamma_pz/(2*dt) + ((omega_pz^2))/4; -2/dt^2 + ((omega_pz^2))/2; 1/dt^2 - gamma_pz/(2*dt) + ((omega_pz^2))/4; 1/dt^2 + gamma_pz/(2*dt); -2/dt^2; 1/dt^2 - gamma_pz/(2*dt);
elseif (muz >= 1) sigma_pz = mu_0*muz*losstangent*((tan((omega*dt)/2))/(dt/2)); daBzx(i, j) = (1-((sigma_pz*dt)/(2*mu_0*muz))) / (1+((sigma_pz*dt)/(2*mu_0*muz))); dbBzx(i, j) = (dt/(mu_0*muz)/dx) / (1+((sigma_pz*dt)/(2*mu_0*muz))); daBzy(i, j) = (1-((sigma_pz*dt)/(2*mu_0*muz))) / (1+((sigma_pz*dt)/(2*mu_0*muz))); dbBzy(i, j) = (dt/(mu_0*muz)/dx) / (1+((sigma_pz*dt)/(2*mu_0*muz))); daBz(i, j) = (1-((sigma_pz*dt)/(2*mu_0*muz))) / (1+((sigma_pz*dt)/(2*mu_0*muz))); dbBz(i, j) = (dt/(mu_0*muz)/dx) / (1+((sigma_pz*dt)/(2*mu_0*muz)));
end end end end
%******************************************************************* % Konstanta Berenger %******************************************************************** *** sigmax = -3.0*eps_0*c_0*log(1.0e-5)/(2.0*dx*npmls); rhomax = sigmax*(aimp^2); for m=1:npmls
sig(m) = sigmax*((m-0.5)/(npmls+0.5))^2; rho(m) = rhomax*(m/(npmls+0.5))^2; end %******************************************************************* % Koefisien Berenger %******************************************************************* for m=1:npmls re = sig(m)*dt/eps_0; rm = rho(m)*dt/mu_0; ca(m) = exp(-re); cb(m) = -(exp(-re)-1.0)/sig(m)/dx; da(m) = exp(-rm); db(m) = -(exp(-rm)-1.0)/rho(m)/dx; end %******************************************************************* % Inisialisasi matriks Berenger %******************************************************************* %<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Medan Hz >>>>>>>>>>>>>>>>>>>>>>>>>>> for j=1:je % Depan & belakang for i=1:npmls m = npmls+1-i; daBzx(i,j) = da(m); dbBzx(i,j) = db(m); end for i=ip+1:ie m = i-ip; daBzx(i,j) = da(m); dbBzx(i,j) = db(m); end end for i=1:ie % kiri dan kanan for j=1:npmls m = npmls+1-j; daBzy(i,j) = da(m); dbBzy(i,j) = db(m); end for j=jp+1:je m = j-jp; daBzy(i,j) = da(m); dbBzy(i,j) = db(m); end end %<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Medan Ex>>>>>>>>>>>>>>>>>>>>>>>>>>>>> for i=1:ie % Kiri dan kanan for j=2:npmls+1 m = npmls+2-j; caDx(i,j) = ca(m); cbDx(i,j) = cb(m); end for j=jp+1:je m = j-jp; caDx(i,j) = ca(m); cbDx(i,j) = cb(m); end end %<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Medan Ey>>>>>>>>>>>>>>>>>>>>>>>>>>>>
i
for j=1:je for i=2:npmls+1 m = npmls+2-i; caDy(i,j) = ca(m); cbDy(i,j) = cb(m); end for i=ip+1:ie m = i-ip; caDy(i,j) = ca(m); cbDy(i,j) = cb(m); end end
% Depan dan belakang
% Algoritma 1D FDTD %******************************************************************* for j=1:npmls m = npmls+1-j; daHzx_inc(j) dbHzx_inc(j) end for j=jp+1:je m = j-jp; daHzx_inc(j) dbHzx_inc(j) end
= da(m); = db(m);
= da(m); = db(m);
for j=2:npmls+1 m = npmls+2-j; caEx_inc(j) = ca(m); cbEx_inc(j) = cb(m); end for j=jp+1:je m = j-jp; caEx_inc(j) = ca(m); cbEx_inc(j) = cb(m); end %----------------------------------------------for i=1:npmls m = npmls+1-i; daHzy_inc(i) = da(m); dbHzy_inc(i) = db(m); end for i=ip+1:ie m = i-ip; daHzy_inc(i) = da(m); dbHzy_inc(i) = db(m); end for i=2:npmls+1 m = npmls+2-i; caEy_inc(i) = ca(m); cbEy_inc(i) = cb(m); end for i=ip+1:ie m = i-ip; caEy_inc(i) = ca(m);
cbEy_inc(i) = cb(m); end
%******************************************************************* % inisialisasi Movie %******************************************************************* figure('position',[200 200 700 520]); set(gcf,'color','white'); rect = get(gcf,'position'); rect(1:2) = [0 0]; Dx_h1 = Dx; Dy_h1 = Dy; Bz_h1 = Bz; Ex_h1 = Ex; Ey_h1 = Ey; Hz_h1 = Hz; clear j; %******************************************************************* % Pengulangan FDTD %******************************************************************* % sy = 500; % Perambatan persamaan Gauss arah y % sx = 500; % Perambatan persamaan Gauss arah x % n = 1; ne = 1; err = 0; n = 1; ne = 1; err = 100; % Dengan (nthreshold) while (n<ST*N) || (nthreshold)
%******************************************************************* % Distribusi Medan %******************************************************************* Dx_h2 = Dx_h1; Dx_h1 = Dx; Dy_h2 = Dy_h1; Dy_h1 = Dy; Bz_h2 = Bz_h1; Bz_h1 = Bz; Ex_h2 = Ex_h1; Ex_h1 = Ex; Ey_h2 = Ey_h1; Ey_h1 = Ey; Hz_h2 = Hz_h1; Hz_h1 = Hz;
%sumber(n) = exp(-(((n-delay)*dt)/(0.8*tau))^2) .*sin(2*pi*freq*n*dt);
%******************************************************************* % Ex_inc datang (1-D FDTD) %******************************************************************* Ex_inc(2:jb) = caEx_inc(2:jb).*Ex_inc(2:jb) + cbEx_inc(2:jb).*(Hzx_inc(1:je)-Hzx_inc(2:jb));
%******************************************************************* % Medan Dx dan Dy field %******************************************************************* Dx( : ,2:je) = caDx( : ,2:je).*Dx( : ,2:je) + cbDx( : ,2:je).*(Hz( : ,2:je) - Hz( : ,1:je-1)); Dy(2:ie, : ) = caDy(2:ie, : ).*Dy(2:ie, : ) + cbDy(2:ie, : ).*(Hz(1:ie-1,: ) - Hz(2:ie, : ));
i
%******************************************************************* % Ruang penghubung D dan E %******************************************************************* Dysynch(1:ie, 2:je) = 0.25*(Dy(1:ie, 2:je)+Dy(2:ib, 2:je)+Dy(1:ie, 1:je-1)+Dy(2:ib, 1:je-1)); Dy_h1synch(1:ie, 2:je) = 0.25*(Dy_h1(1:ie, 2:je)+Dy_h1(2:ib, 2:je)+Dy_h1(1:ie, 1:je-1)+Dy_h1(2:ib, 1:je-1)); Dy_h2synch(1:ie, 2:je) = 0.25*(Dy_h2(1:ie, 2:je)+Dy_h2(2:ib, 2:je)+Dy_h2(1:ie, 1:je-1)+Dy_h2(2:ib, 1:je-1)); Ey_h1synch(1:ie, 2:je) = 0.25*(Ey_h1(1:ie, 2:je)+Ey_h1(2:ib, 2:je)+Ey_h1(1:ie, 1:je-1)+Ey_h1(2:ib, 1:je-1)); Ey_h2synch(1:ie, 2:je) = 0.25*(Ey_h2(1:ie, 2:je)+Ey_h2(2:ib, 2:je)+Ey_h2(1:ie, 1:je-1)+Ey_h2(2:ib, 1:je-1)); Dxsynch(2:ie, 2:je) = 0.25*(Dx(2:ie, 2:je)+Dx(2:ie, 3:jb)+Dx(1:ie-1, 2:je)+Dx(1:ie-1, 3:jb)); Dx_h1synch(2:ie, 2:je) = 0.25*(Dx_h1(2:ie, 2:je)+Dx_h1(2:ie, 3:jb)+Dx_h1(1:ie-1, 2:je)+Dx_h1(1:ie-1, 3:jb)); Dx_h2synch(2:ie, 2:je) = 0.25*(Dx_h2(2:ie, 2:je)+Dx_h2(2:ie, 3:jb)+Dx_h2(1:ie-1, 2:je)+Dx_h2(1:ie-1, 3:jb)); Ex_h1synch(2:ie, 2:je) = 0.25*(Ex_h1(2:ie, 2:je)+Ex_h1(2:ie, 3:jb)+Ex_h1(1:ie-1, 2:je)+Ex_h1(1:ie-1, 3:jb)); Ex_h2synch(2:ie, 2:je) = 0.25*(Ex_h2(2:ie, 2:je)+Ex_h2(2:ie, 3:jb)+Ex_h2(1:ie-1, 2:je)+Ex_h2(1:ie-1, 3:jb));
%******************************************************************* % Medan Ex dan Ey %******************************************************************* Ex(1:ie, 2:je) = ((b0x(1:ie,2:je).*Dx(1:ie,2:je) + b0xy(1:ie,2:je).*Dysynch(1:ie,2:je) + ... b1x(1:ie,2:je).*Dx_h1(1:ie,2:je) + b1xy(1:ie,2:je).*Dy_h1synch(1:ie,2:je) + ... a1x(1:ie,2:je).*Ex_h1(1:ie,2:je) + a1xy(1:ie,2:je).*Ey_h1synch(1:ie,2:je) + ... b2x(1:ie,2:je).*Dx_h2(1:ie,2:je) + b2xy(1:ie,2:je).*Dy_h2synch(1:ie,2:je) + ... a2x(1:ie,2:je).*Ex_h2(1:ie,2:je) + a2xy(1:ie,2:je).*Ey_h2synch(1:ie,2:je)) ... ./ (a0x(1:ie,2:je))); Ey(2:ie, 1:je) = ((b0y(2:ie, 1:je).*Dy(2:ie, 1:je) + 1:je).*Dxsynch(2:ie, 1:je) + ... b1y(2:ie, 1:je).*Dy_h1(2:ie, 1:je) 1:je).*Dx_h1synch(2:ie, 1:je) + ... a1y(2:ie, 1:je).*Ey_h1(2:ie, 1:je) 1:je).*Ex_h1synch(2:ie, 1:je) + ... b2y(2:ie, 1:je).*Dy_h2(2:ie, 1:je) 1:je).*Dx_h2synch(2:ie, 1:je) + ... a2y(2:ie, 1:je).*Ey_h2(2:ie, 1:je) 1:je).*Ex_h2synch(2:ie, 1:je)) ... ./ (a0y(2:ie, 1:je)));
b0yx(2:ie, + b1yx(2:ie, + a1yx(2:ie, + b2yx(2:ie, + a2yx(2:ie,
%******************************************************************* % Nilai Ex datang (1-D & 2-D)
%******************************************************************* Ex(it+1:ie-it, jt+1) = Ex(it+1:ie-it, jt+1) + (dt/eps_0/dx).*Hzx_inc( jt+1); %.*exp(-((it+1:ie-it)-ic).^2./(2*sy^2))'; % Left Ex(it+1:ie-it,je-jt+1) = Ex(it+1:ie-it,je-jt+1) (dt/eps_0/dx).*Hzx_inc(je-jt+1); %.*exp(-((it+1:ie-it)-ic).^2./(2*sy^2))'; % Right
%******************************************************************* % Nilai Ey datang(1-D & 2-D) %******************************************************************* Ey( it+1,jt+1:je-jt) = Ey( it+1,jt+1:je-jt) (dt/eps_0/dx).*Hzx_inc(jt+1:je-jt); %.*exp(-(( it+1)-ic).^2./(2*sy^2))'; % Bottom Ey(ie-it+1,jt+1:je-jt) = Ey(ie-it+1,jt+1:je-jt) + (dt/eps_0/dx).*Hzx_inc(jt+1:je-jt); %.*exp(-((ie-it+1)-ic).^2./(2*sy^2))'; % Top
%******************************************************************* % Penghitungan Hzx_inc (1-D FDTD) %******************************************************************* Hzx_inc(1:je) = daHzx_inc(1:je).*Hzx_inc(1:je) + dbHzx_inc(1:je).*(Ex_inc(1:je)-Ex_inc(2:jb));
%******************************************************************* % ..... Eksitasi Sumber Datang(1-D FDTD)..... %******************************************************************* Hzx_inc(js) = Hzx_inc(js) + 1*source(n);
%******************************************************************* % medan Bzx dan Bzy (Bz) %******************************************************************* Bzx(1:ie,: ) = daBzx(1:ie,: ).*Bzx(1:ie,: ) + dbBzx(1:ie,: ).*(Ey(1:ie,: ) - Ey(2:ib, :)); Bzy( :, 1:je) = daBzy( :, 1:je).*Bzy( :, 1:je) + dbBzy( :, 1:je).*(Ex( :, 2:jb) - Ex( :, 1:je)); Bz = Bzx + Bzy;
%******************************************************************* % Medan Hz %******************************************************************* Hz = (b0z.*Bz + b1z.*Bz_h1 + b2z.*Bz_h2 - (a1z.*Hz_h1 + a2z.*Hz_h2)) ./ a0z;
%******************************************************************* % Nilai Hz datang (1-D & 2-D) %******************************************************************* Hz(it+1:ie-it, jt+1) = Hz(it+1:ie-it, jt+1) (dt/mu_0/dx).*Ex_inc( jt+1); % Left Hz(it+1:ie-it,je-jt+1) = Hz(it+1:ie-it,je-jt+1) + (dt/mu_0/dx).*Ex_inc(je-jt+1); % Right
i
%HzsourceTF(1:length(it:ie-it),n)=Hz(it:ie-it,jt+1); %HztransTF(1:length(it:ie-it),n)=Hz(it:ie-it,je-jt-1); %HzsourceSF(1:length(it:ie-it),n)=Hz(it:ie-it,js); %HztransSF(1:length(it:ie-it),n)=Hz(it:ie-it,je-js);
%******************************************************************* % Visualisasi Medan %******************************************************************* if mod(n,10)==0 timestep = num2str(n); pcolor((1:je)./M,(1:ie)./M,real(Hz)); shading interp; axis image; colorbar; axis([1/M je/M 1/M ie/M]); %pcolor((1:je)./M,(1:ie)./M,real(Hz)/max(max(real(Hz)))); shading interp; axis image; colorbar; axis([1/M je/M 1/M ie/M]); line((R1*sin((0:360)*pi/180)+yc)./M,(R1*cos((0:360)*pi/180)+xc)./M,'c olor','k'); line((R2*sin((0:360)*pi/180)+yc)./M,(R2*cos((0:360)*pi/180)+xc)./M,'c olor','k'); %xlabel('y/\lambda'); ylabel('x/\lambda'); title(['amplitude of H_z']); xlabel('y/\lambda'); ylabel('x/\lambda'); title(['H_z at timestep ', timestep]); getframe(gcf,rect); end %******************************************************************* % Penghitungan fungsi eror untuk konvergensi pulsa %****************************************************************** if mod(n,N)==0 ne = n/N; if (20*log10(sum(sum(abs(Hz(it:ie-it,jt:je-jt)))))) > (20*log10(sum(sum(abs(Hz_p(it:ie-it,jt:je-jt)))))) err(ne) = 0; else err(ne) = (20*log10(sum(sum(abs(Hz(it:ie-it,jt:je-jt)))))) (20*log10(sum(sum(abs(Hz_p(it:ie-it,jt:je-jt)))))); end Hz_p = Hz; end
%******************************************************************* %Penghitungan fungsi eror untuk konvergensi pulsa %******************************************************************* if mod(n,N)==0 ne = n/N; if max(max(abs(Hz_p(npmls+10:ip-10,npmls+10:jp-10))))==0 err(ne) = 100; else
err(ne) = max(max(abs(abs(Hz(npmls+10:ip-10,npmls+10:jp10))-abs(Hz_p(npmls+10:ip-10,npmls+10:jp-10))))) / max(max(abs(Hz_p(npmls+10:ip-10,npmls+10:jp-10)))) * 100; end Hz_p = Hz; end %******************************************************************* % Menampilkan %******************************************************************* if mod(n,step)==0 %save results_2D.mat dx dt freq nmax ie je is js err N M Ex Ey Hz; c = round(clock); disp(['Current time step: ',int2str(n-mod(n,step)),', ',int2str(n/nmax*100),'% completed at ',num2str(c(4)),':',num2str(c(5)),':',num2str(c(6))]); end n = n + 1; end %******************************************************************* % Menyimpan %****************************************************************** save results_2DTEidealcloakdielcore3.mat dx dt freq n nmax ie je xc yc R1 R2 is js err N M Ex Ey Hz;
i
APENDIX F MENGUBAH PERSAMAAN-PERSAMAAN KE PROGRAM
Persamaan (4.40) : ( (
) )
(
( )
)
(
)
Diubah dalam program menjadi :
(
)
(
)
a = 4/4*e0*einf + e0*wpesq*dt^2 + e0*einf*ge*2*dt* a = 4/e0*4*einf+e0*dt^2*wpesq+e0*2*dt*einf*ge a = (1/dt^2)*(4*dt^2)/(e0*(4*einf+dt^2*wpesq+2*dt*einf*ge) a = (1/dt^2)*a0 a0 = (4*dt^2)/(e0*(4*einf+dt^2*wpesq+2*dt*einf*ge))
(
)
( (
) )
(
)
b = (ge*2*dt)/(4*e0*einf+e0*wpesq*dt^2+e0*einf*ge*2*dt) b = (ge*2*dt)/(e0*4*einf+e0*dt^2*wpesq+e0*2*dt*einf*ge) b = (1/(2*dt))*ge*(4*dt^2)/(e0*(4*einf+dt^2*wpesq+2*dt*einf*ge)) b = (1/(2*dt))*ge.*a0
(
)
(
)
c = 4*e0*einf/(4*e0*einf+e0*wpesq*dt^2+e0*einf*ge*2*dt) c = (e0/dt^2)*einf*(4*dt^2)/e0*(4*einf+dt^2*wpesq+2*dt*einf*ge) c = (e0/dt^2)*einf.*a0;
( ) ( )
(
)
d = (-e0*wpesq*dt^2)/(4*e0*einf+e0*wpesq*dt^2+e0*einf*ge*2*dt) d = (-1*e0/4)*wpesq*(4*dt^2)/e0*(4*einf+dt^2*wpesq+2*dt*einf*ge) d = (-1*e0/4)*wpesq*a0
( )
(
) (
)
e = e0*einf*ge2*dt/(4*e0*einf+e0*wpesq*dt^2+e0*einf*ge*2*dt) e = (1/(2*dt))*e0*einf*ge *(4*dt^2)/e0*(4*einf+dt^2*wpesq+2*dt*einf*ge) e = (1/(2*dt))*e0*einf*ge*a0
Selanjutnya untuk medan magnet persamaanya ( (
)
) (
( )
Diubah dalam program menjadi : i
(
) )
(
)
(
)
am = 4/4*u0*uinf + u0*wpesq*dt^2 + u0*uinf*gm*2*dt* am = 4/u0*4*uinf+u0*dt^2*wpesq+u0*2*dt*uinf*gm am = (1/dt^2)*(4*dt^2)/(u0*(4*uinf+dt^2*wpesq+2*dt*uinf*gm) am = (1/dt^2)*am0 am0 = (4*dt^2)/(u0*(4*uinf+dt^2*wpesq+2*dt*uinf*gm))
(
)
( (
) )
(
)
bm = (gm*2*dt)/(4*u0*uinf+u0*wpesq*dt^2+u0*uinf*gm*2*dt) bm = (gm*2*dt)/(u0*4*uinf+u0*dt^2*wpesq+u0*2*dt*uinf*gm) bm = (1/(2*dt))*gm*(4*dt^2)/(u0*(4*uinf+dt^2*wpesq+2*dt*uinf*gm)) bm = (1/(2*dt))*gm.*am0
(
)
(
)
cm = 4*u0*uinf/(4*u0*uinf+u0*wpesq*dt^2+u0*uinf*gm*2*dt) cm = (u0/dt^2)*uinf*(4*dt^2)/u0*(4*uinf+dt^2*wpesq+2*dt*uinf*gm) cm = (u0/dt^2)*uinf.*am0
( )
(
) (
)
dm = (-u0*wpesq*dt^2)/(4*u0*uinf+u0*wpesq*dt^2+u0*uinf*gm*2*dt) dm = (-1*u0/4)*wpesq*(4*dt^2)/u0*(4*uinf+dt^2*wpesq+2*dt*uinf*gm) dm = (-1*u0/4)*wpesq*am0
( (
)
)
(
)
em = u0*uinf*gm2*dt/(4*u0*uinf+u0*wpesq*dt^2+u0*uinf*gm*2*dt) em = (1/(2*dt))*u0*uinf*gm *(4*dt^2)/u0*(4*uinf+dt^2*wpesq+2*dt*uinf*gm) em = (1/(2*dt))*u0*uinf*gm*am0
persamaan (4.35) : ⃗
[
⃗
]
[
(⃗
]
⃗
)
Hy(1:SIZE-1,n2) = Hy(1:SIZE-1,n1) + ( ( Ex(1:SIZE-1,n1) - Ex(2:SIZE,n1) ) * dt/(u0*dz) )
persamaan (4.36) : ⃗
⃗
(⃗
[
]
⃗
[
])
Ex(2:SIZE,n2) = Ex(2:SIZE, n1) + ( dt/(e0*dz)*(Hy(1:SIZE-1, n2) - Hy(2:SIZE, n2)) )
persamaan (4.39), (4.41),(4.42) (4.43) dan (4.44) : ⃗
(⃗
⃗ ( ⃗
⃗ ⃗
(⃗
) (⃗
)
⃗
( ⃗
)
⃗
)
)
Ex(:,n2) = a.*(Dx(:,n2)-2*Dx(:,n1)+Dx(:,3))+b.*(Dx(:,n2)Dx(:,3))+c.*(2*Ex(:,n1)-Ex(:,3))+d.*(2*Ex(:,n1) +Ex(:,3)) +e.*(Ex(:,3))
⃗
(⃗
⃗
⃗
)
(⃗
( ⃗
⃗
)
(⃗
⃗
( ⃗
)
)
Hy(:,n2) = am.*(By(:,n2)-2*By(:,n1)+By(:,3))+bm.*(By(:,n2)By(:,3))+cm.*(2*Hy(:,n1)-Hy(:,3))+dm.*(2*Hy(:,n1) +Hy(:,3))+em.*(Hy(:,3))
⃗
( )
⃗ ( )
(⃗ ( )
⃗ (
))
By(1:SIZE-1,n2) = By(1:SIZE-1,n1) + ( ( Ex(1:SIZE-1,n1) – Ex(2:SIZE,n1) ) * dt/(dz) )
⃗
( )
⃗ ( )
(⃗ ( )
⃗ (
))
Dx(2:SIZE,n2) = Dx(2:SIZE, n1) + ( dt/(dz)*(Hy(1:SIZE-1, n2) –
i
⃗
)
Hy(2:SIZE, n2)) )
(
|
)
̃ ( ̃ (
) | )
nFDTD = (1/(1i*k0*(z1-z2))) .*log(EXZ2(1:NFFT/2+1)./EXZ1(1:NFFT/2+1))
( )
( )
erx = ((r-R1) / (r));
( ) ethetax =
( )
((r) / (r-R1));
⃗
[
⃗
⃗
⃗
⃗
⃗
⃗
⃗
⃗
]
⃗ ⃗
[
⃗
⃗
⃗
[
⃗
⃗
⃗
⃗
⃗
⃗ ⃗
⃗
⃗
⃗
⃗
⃗
(
)
]
⃗
⃗
⃗
⃗
⃗
⃗
]
⃗ ⃗
[
⃗
⃗ (
Ax1 = ax+bx+cx
⃗ )
⃗ ⃗
⃗ ]
(
)
Ax2 = (2.*ax)-(2.*cx) (
)
(
)
Ax3 = ax-bx+cx ax = ((cosx.^2) + (ethetax.*(sinx.^2))) ./ (dt^2); bx = ((gamma_px.*(cosx.^2)) + ((sigma_px +(ethetax*gamma_px)) .*(sinx.^2))) ./ (2*dt); cx = (((cosx.^2).*((omega_px)^2)) + (sigma_px*gamma_px .*(sinx.^2))) ./ (4); (
)
(
)
(
)
(
)
Bx1 = wx+fx+vx (
)
(
)
Bx2 = (2.*wx)-(2.*vx) (
)
(
)
Bx3 = wx-fx+vx; wx = ((1-ethetax).*sinx.*cosx) ./ (dt^2) fx = ((gamma_px-sigma_px-(ethetax*gamma_px)).*sinx.*cosx)./(2*dt) vx = (((omega_px)^2)-(sigma_px*gamma_px)).*sinx.*cosx) ./ (4)
Cx1 = kx+lx
Cx2 = (2.*kx)
Cx3 = kx-lx
i
kx = 1 / etheta0*(dt^2); lx = gamma_px / etheta0* (2*dt); (
)
(
)
(
)
Dx1 = tx+qx+px (
)
Dx2 = (2.*tx)-(2.*px) (
)
Dx3 = tx-qx+px tx = ((sinx.^2) + (ethetax.*(cosx.^2))) ./ (dt^2) qx = ((gamma_px.*(sinx.^2)) + ((sigma_px +(ethetax*gamma_px)) .*(cosx.^2)))./(2*dt) px = (((sinx.^2).*((omega_px)^2)) + (sigma_px*gamma_px .*(cosx.^2))) ./(4)
a0x(i, j) = Ax1 - (((Bx1).^2) ./ Dx1); a1x(i, j) = Ax2 - ((Bx1.*Bx2) ./ Dx1); a2x(i, j) = ((Bx1.*Bx3) ./ Dx1) - (Ax3);
a1xy(i, j) = Bx2 - ((Bx1.*Dx2) ./ Dx1); a2xy(i, j) = ((Bx1.*Dx3) ./ Dx1) - (Bx3);
b0x(i, j) = Cx1; b1x(i, j) = -Cx2; b2x(i, j) = Cx3;
b0xy(i, j) = -(Bx1.*Cx1) ./ Dx1; b1xy(i, j) = (Bx1.*Cx2) ./ Dx1; b2xy(i, j) = -(Bx1.*Cx3) ./ Dx1;
untuk bagian y : (
)
(
)
Ay1 = ay+by+cy (
)
Ay2 = (2.*ay)-(2.*cy) (
)
(
)
Ay3 = ay-by+cy ay = ((cosy.^2) + (ethetay.*(siny.^2))) ./ (dt^2); by = ((gamma_py.*(cosy.^2)) + ((sigma_py +(ethetay*gamma_py)) .*(siny.^2))) ./ (2*dt); cy = (((cosy.^2).*((omega_py)^2)) + (sigma_py*gamma_py .*(siny.^2))) ./ (4); (
)
(
)
(
)
(
)
By1 = wy+fy+vy (
)
(
)
By2 = (2.*wy)-(2.*vy) (
)
(
)
i
By3 = wy-fy+vy; wy = ((1-ethetay).*siny.*cosy) ./ (dt^2) fy = ((gamma_py-sigma_py-(ethetay*gamma_py)).*siny.*cosy)./(2*dt) vy = (((omega_py)^2)-(sigma_py*gamma_py)).*siny.*cosy) ./ (4)
Cy1 = ky+ly
Cy2 = (2.*ky)
Cy3 = ky-ly ky = 1 / etheta0*(dt^2); ly = gamma_py / etheta0* (2*dt); (
)
(
)
(
)
Dy1 = ty+qy+py (
)
Dy2 = (2.*ty)-(2.*py) (
)
Dy3 = ty-qy+py ty = ((siny.^2) + (ethetay.*(cosy.^2))) ./ (dt^2) qy = ((gamma_py.*(siny.^2)) + ((sigma_py +(ethetay*gamma_py)) .*(cosy.^2)))./(2*dt) py = (((siny.^2).*((omega_py)^2)) + (sigma_py*gamma_py .*(cosy.^2))) ./(4)
a0y(i, j) = Ay1 - (((By1).^2) ./ Dy1); a1y(i, j) = Ay2 - ((By1.*By2) ./ Dy1); a2y(i, j) = ((By1.*By3) ./ Dy1) - (Ay3);
a1yx(i, j) = By2 - ((By1.*Dy2) ./ Dy1); a2yx(i, j) = ((By1.*Dy3) ./ Dy1) - (By3);
b0y(i, j) = Cy1; b1y(i, j) = -Cy2; b2y(i, j) = Cy3;
b0yx(i, j) = -(By1.*Cy1) ./ Dy1; b1yx(i, j) = (By1.*Cy2) ./ Dy1; b2yx(i, j) = -(By1.*Cy3) ./ Dy1;
i