Anda di halaman 1dari 21

WORM HOLE 2D

Contoh terakhir adalah model sederhana lubang cacing ruang waktu. Ini adalah
geometri ruang waktu sederhana yang, dalam kerangka dari teori relativitas umum,
menggambarkan hubungan dua jarak area di ruang yang asimetris datar. Artinya, itu cukup
jauh dari mulut lubang cacing, ruang hampir rata - bebas dari gravitasi. Sebuah geometri
digambarkan pada gambar 1 dibawah:

Gambar 1. Geometri khas ruang dekat lubang cacing

Gambar 1 di atas adalah geometri khas ruang di dekat lubang cacing. dua asimtotik
Daerah datar ruang terhubung melalui "leher" yang bisa diatur menjadi Panjangnya kecil
dibandingkan dengan jarak mulut lubang cacing saat bepergian dari di luar ruang.
Jarak yang ditempuh seseorang melalui mulut bisa jauh lebih kecil dari jarak
tempuh di luar lubang cacing dan setidaknya secara teoritis, lubang cacing yang bisa dilalui
dapat digunakan untuk perjalanan dan / atau komunikasi antar bintanga ntara daerah yang
tidak jauh di alam semesta. Tentu saja kita perlu dicatat bahwa lubang cacing makroskopik
dan stabil semacam itu tidak diketahui untuk menjadi mungkin ada dalam kerangka relativitas
umum. Satu kebutuhan jenis materi yang eksotis dengan kerapatan energi negatif yang tidak
pernah ada telah diamati Geometri eksotis seperti itu mungkin bisa disadari secara
mikroskopis dan fluktuasi kuantum ruangwaktu dan membuat struktur skala kecil geometri
sebuah "busa ruang waktu".
Kita akan mempelajari model geometri di atas yang sangat sederhana di pesawat
dengan partikel yang bergerak bebas di dalamnya. Kami mengambil pesawat dua dimensid an
potong dua disk yang sama dengan jari-jari R dengan pusat pada jarak d seperti di Gambar 2.
Kami mengidentifikasi titik di kedua lingkaran sedemikian rupa sehingga intinya 1 dari
lingkaran kiri sama dengan titik 1 pada lingkaran kanan, titik 2 di sebelah kiri dengan titik 2
di sebelah kanan dan lain-lain. Dua lingkaran itu diberikan oleh persamaan parametrik
x(θ)=d/2+Rcosθ, y(θ)=Rsinθ, -π<θ≤π untuk lingkaran kanan dan x(θ)=-d/2-Rcosθ,
y(θ)=Rsinθ, -π<θ≤π untuk kiri poin pada dua lingkaran dengan yang sama diidentifikasi.
Partikel yang memasuki lubang cacing dari lingkaran kiri dengan kecepatan v segera keluar
dari kanan dengan kecepatan v' seperti yang ditunjukkan pada gambar 2.

Gambar 2.

Gambar 2 di atas adalah sebuah model sederhana geometri ruang waktu pada gambar 1.
Partikelnya Bergerak di seluruh pesawat kecuali dengan menahan dua disk yang telah
dilepas. Itu lubang cacing dimodelkan oleh dua lingkaran x(θ) = ±d/2±Rcosθ, y (θ) = Rsinθ,
-π < θ ≤ π dan memiliki panjang nol sejak poinnya teridentifikasi. Ada sebuah arah yang
diberikanmdalam identifikasi ini, sehingga poin yang sama pun sama (bisa dibayangkan
bagaimana ini terjadi dengan melipat pesawat melintasi sumbu y dan kemudian merekatkan
dua lingkaran bersama). Pintu masuk partikel melalui satu mulut dan keluar melalui yang lain
dilakukan seperti yang ditunjukkan pada vektor kecepatan ⃗v ⃗v '.
 FLOWCHART PROGRAM WORM HOLE

START

PI=3.141592653589793
24D0,Lx,Ly,L,R,d,x0,
y0,v0,theta,tf,dt,t,
x,y,vx,vy,xc1,yc1,xc
2,yc2,r1,r2,i

Y
L<=d+2.0D0*R
d<=2.0D0*R

END
T
Y
V0<=0.0D0

theta = (PI/180.0D0)*theta
i = 0
t = 0.0D0
x = x0 ; y = y0
vx = v0*cos(theta) ; vy = v0*sin(theta)
Xc1 = 0.5D0*d ; yc1 = 0.0D0
xc2 = -0.5D0*d ; yc2 = 0.0D0
Lx = 0.5D0*L ; Ly = 0.5D0*L
r1 = sqrt((x-xc1)**2+(y-yc1)**2)
r2 = sqrt((x-xc2)**2+(y-yc2)**2)

Y
r1<=R
r2<=R

T END

ABS(x)>= Lx
ABS(y)>=Ly
Y

Wormhole.dat

Gambar 3. Flowchart program utama Wormhole


A

t < tf

t,x,y,vx,vy

i = i+1
t = i*dt
x = x+vx*dt
y = y+vy*dt

x < Lx

x = x-L

x<-Lx

x = x+L

Y>Ly

y = y-L

Y>-Ly

y = y+L

r1 = sqrt((x-xc1)**2+(y-yc1)**2)
r2 = sqrt((x-xc2)**2+(y-yc2)**2)

Y
call
r1 < R crossC1(x,y,vx,vy
,dt,r1,d)

Y
call
r2 < R crossC2(x,y,vx,v
y,dt,r1,d)

END

Gambar 4. Lanjutan flowchart program utama Wormhole


crossC1(x,y,vx,vy,dt,R,d)

x,y,vx,vy,R

xc = 0.5D0 * d
yc = 0.0D0
theta = atan2(y-yc,x-xc)
x = -xc-R*cos(theta)
vr = vx*cos(theta)+vy*sin(theta)
v0 = -vx*sin(theta)+vy*cos(theta)
vx = vr*cos(theta)+v0*sin(theta)
vy = -vr*sin(theta)+v0*cos(theta)
x = x+vx*dt
y = y+vy*dt

x,y,vx,vy

END
CrossC1

Gambar 5. Flowchart program Subroutine CrossC1

crossC2(x,y,vx,vy,dt,R,d)

x,y,vx,vy,R

xc = -0.5D0*d yc = 0.0D0
theta = PI-atan2(y-yc,x-xc)
x = -xc+R*cos(theta)
vr = -vx*cos(theta)+vy*sin(theta)
v0 = vx*sin(theta)+vy*cos(theta)
vx = -vr*cos(theta)-v0*sin(theta)
vy = -vr*sin(theta)+v0*cos(theta)
x = x+vx*dt
y = y+vy*dt

x,y,vx,vy

END
CrossC2

Gambar 6. Flowchart program Subroutine CrossC2


 PROGRAM WORM HOLE

Buka software Geany, kemudian buat program pada software geany tersebut seperti
gambar di bawah ini. Setelah program selesai dibuat, kemudian di save dengan nama
WormHole.f95, lalu ditentukan dimana ingin menyimpan file tersebut. Disini file tersebut
disimpan pada data E dan kemudian dibuat folder baru yang diberi nama “Laporan 14”,
kemudian klik save. Setelah di save, kemudian tulisan program tadi menjadi berwarna yang
berarti program sudah tersimpan seperti yang terlihat pada gambar di bawah ini:
Gambar 7. Script Program Wormhole pada Geany

Berikut penjelasan script program di atas:


program WormHole2D

implicit none

Baris pertama merupakan kepala program, kita ketahui bahwa program dimulai
dengan nama program dan diakhiri juga dengan nama program juga. WormHole2D adalah
nama program tersebut. Implicit none merupakan bagian dari kepala program.

real(8),parameter :: PI=3.14159265358979324D0

real(8) :: Lx,Ly,L,R,d
real(8) :: x0,y0,v0,theta

real(8) :: tf,dt

real(8) :: t,x,y,vx,vy

real(8) :: xc1,yc1,xc2,yc2,r1,r2

integer :: i

real(8), real adalah untuk mendeklarasikan bilangan decimal atau bilangan berkoma
sedangkan angka 8 berarti bahwa single presisi, banyak angka dibelakang komanya 8 angka,
sedangkan parameter :: PI=3.14159265358979324D0, berarti bahwa nilai PI tidak
akan berubah atau tetap. Kemudian pada script di atas yang di deklarasikan adalah
Lx,Ly,L,R,d,x0,y0,v0,theta,tf,dt,t,x,y,vx,vy,xc1,yc1,xc2,yc2,r1,r.

Kemudian integer adalah data yang merupakan bilangan bulat, maka pada script diatas
yang dideklarasikan sebagai integer adalah i.

print*,"# Enter L , d , R :"

read*,L,d,R

print*," # L=",L, "d= ",d, "R= ",R

print adalah perintah yang diberikan pada program untuk memunculkan kata atau
kalimat yang diberikan, kata atau kalimat yang ingin dimunculkan haruslah diberi tanda petik
dua. Kode perintah print di atas adalah untuk meminta pengguna memasukkan nilai L,
d , dan R yang sudah didefinisikan pada baris sebelumnya, dan outputnya berupa tulisan
“# Enter L,d,R:”, begitu juga untuk script pada baris dibawahnya yang akan
menampilkan tulisan yang diberikan tanda petik dua tersebut. sedangkan read adalah
perintah untuk membaca data, data yang diberikan atau diinput dari keyboard. Di sini yang
akan diinput adalah nilai L, d, dan R yang merupakan nilai yang diminta untuk di input dari
script program baris sebelumnya. Sedangkan pada script selanjutnya ada yang tidak diberi
tanda petik dua, itu berarti hanya akan menampilkan nilai yang sudah di input pada perintah
script sebelumnya.
if(L .le. d+2.0D0*R) stop "L <= d+2*R"

if(d .le. 2.0D0*R) stop "d <= 2*R"


kode if (L .le. d+2.0D0*R) stop "L <= d+2*R" adalah kode untuk
memberikan perintah batasan nilai pada suatu variable, yang berarti jika nilai L lebih kecil
sama dengan d+2.0D0*R (nilai L diperoleh dari hasil input keyboard pada kode baris
sebelumnya), maka diperintahkan secara otomatis program akan berhenti atau keluar dan
akan menampilkan tulisan yang diberi tanda petik " L <= d+2*R ". Begitu juga untuk
script program pada baris dibawahnya untuk nilai d.

print*,"# Enter(x0,y0),v0,theta( degrees ) :"

read*,x0,y0,v0,theta

print*,"# x0=",x0,"y0 = ",y0

print adalah perintah yang diberikan pada program untuk memunculkan kata atau
kalimat yang diberikan pada kata atau kalimat yang berada di dalam tanda petik dua.
Sedangkan yang tanpa menggunakan tanda petik adalah untuk menuliskan hasil yang
diinginkan atau hasil dari input keyboard yang sudah dijalankan oleh kode program di atas
sebelumnya. Pada kode program ini muncul tulisan untuk mendeskripsikan nilai, setelah
tulisan tersebut maka akan muncul nilainya yang mana nilai tersebut dipanggil dari kode
program pada baris sebelumnya yang memerintahkan untuk menginput nilai dari keyboard
yaitu nilai x0 dan y0.

print*,"# v0=",v0,"theta=",theta,"degrees"

if(v0 .le. 0.0D0) stop "i l l e g a l value of v0 ."

print pada script program di atas adalah perintah yang diberikan pada program
untuk memunculkan kata atau kalimat yang diberikan pada kata atau kalimat yang berada di
dalam tanda petik dua. Di ikuti dengan nilai hasil input dari keyboard yang sudah
diperintahkan pada baris program sebelumnya. kode if (v0 .le. 0.0D0) stop "i l
l e g a l value of v0 ." adalah kode untuk memberikan perintah batasan nilai pada
suatu variable, yang berarti jika nilai v0 lebih kecil dari 0 pangkat 0 (nilai v0 diperoleh dari
hasil input keyboard pada kode baris sebelumnya) maka diperintahkan secara otomatis
program akan berhenti atau keluar dan akan menampilkan tulisan yang diberi tanda petik
"illegal value of v0".

print*,"# Enter t f , dt :"


read*,tf,dt

print*,"#tf =",tf,"dt=",dt

print adalah perintah yang diberikan pada program untuk memunculkan kata atau
kalimat yang diberikan pada kata atau kalimat yang berada di dalam tanda petik dua. Pada
script di atas akan menampilkan tulisan "# Enter t f , dt :". Kemudian read adalah
untuk menampilkan nilai input dari keyboard. Sedangkan yang tanpa menggunakan tanda
petik adalah untuk menuliskan hasil yang diinginkan atau hasil dari input keyboard yang
sudah dijalankan oleh kode program di atas sebelumnya. Pada kode program ini muncul
tulisan untuk mendeskripsikan nilai, setelah tulisan tersebut maka akan muncul nilainya yang
mana nilai tersebut dipanggil dari kode program pada baris sebelumnya yang memerintahkan
untuk menginput nilai dari keyboard yaitu nilai tf, dan dt.

theta = (PI/180.0D0)*theta

i = 0

t = 0.0D0

x = x0 ; y = y0

vx = v0*cos(theta) ; vy = v0*sin(theta)

print*,"# x0=",x,"y0=",y,"v0x=",vx,"v0y=",vy

untuk 5 baris script di atas merupakan proses inisialisasi atau pemisalan, proses yang
terjadi adalah mendefinisikan darimana diperolehnya dan terjadi proses perhitungan, yang
berarti bahwa i sama dengan 0, t sama dengan 0 pangkat 0, x sama dengan x0 dan y sama
dengan y0. Sedangkan pada script di bawahnya pada vx dan vy terjadi proses perhitungan.
Dan pada script program di bawahnya ada perintah print yang berarti akan menampilkan
tulisan yang diberikan tanda petik dua lalu diikuti hasil nilai x,y,vx, dan vy yang tanpa
menggunakan tanda petik, ini seperti proses pemanggilan dari input perintah dari script
program sebelumnya.

xc1 = 0.5D0*d ; yc1 = 0.0D0

xc2 = -0.5D0*d ; yc2 = 0.0D0

Lx = 0.5D0*L ; Ly = 0.5D0*L
untuk 3 baris script di atas merupakan proses inisialisasi atau pemisalan, proses yang
terjadi adalah mendefinisikan darimana diperolehnya dan terjadi proses perhitungan untuk
variable xc1, yc1, xc2, yc2, Lx dan Ly.

r1 = sqrt((x-xc1)**2+(y-yc1)**2)

r2 = sqrt((x-xc2)**2+(y-yc2)**2)

untuk 2 baris script di atas merupakan proses inisialisasi atau pemisalan, proses yang
terjadi adalah mendefinisikan darimana diperolehnya dan terjadi proses perhitungan untuk
variable r1 dan r2.

if(r1 .le. R) stop "r1 <= R"

if(r2 .le. R) stop "r2 <= R"

kode if ((r1 .le. R) stop "r1 <= R" adalah kode untuk memberikan
perintah batasan nilai pada suatu variable, yang berarti jika nilai r1 lebih kecil sama dengan R
(nilai r1 diperoleh dari hasil perhitungan pada kode baris sebelumnya yaitu r1 = sqrt((x-
xc1)**2+(y-yc1)**2) ), maka diperintahkan secara otomatis program akan berhenti atau
keluar dan akan menampilkan tulisan yang diberi tanda petik " r1 <= R". Begitu juga
untuk script program pada baris dibawahnya untuk nilai r2.

if(ABS(x) .ge. Lx) stop "| x | >= Lx"

if(ABS(y) .ge. Ly) stop "| y | >= Ly"

kode if (ABS(x) .ge. Lx) stop "| x | >= Lx" adalah kode untuk
memberikan perintah batasan nilai pada suatu variable, yang berarti jika nilai ABS atau
absolut x lebih besar sama dengan Lx, maka diperintahkan secara otomatis program akan
berhenti atau keluar dan akan menampilkan tulisan yang diberi tanda petik "| x | >=
Lx". Begitu juga untuk script program pada baris dibawahnya untuk nilai absolut y atau "|
y |.

open(unit=11,file= "Wormhole.dat")

Kode open(unit =11, file = "Wormhole.dat")berarti bahwa file nomor


11 dengan nama Wormhole.dat harus dibuka terlebih dahulu.

do while(t .lt. tf)


kode do while (t .lt. tf) merupakan perintah berulang, yang kriteria
penghentiannya menggunakan logical expression yaitu ..lt.., yang berarti bahwa apabila
nilai t lebih kecil dari nilai tf maka diperintahkan secara otomatis program akan keluar. Kode
ini adalah kode untuk memberikan perintah batasan nilai pada suatu variable secara berulang

write(11,*) t,x,y,vx,vy

i = i+1

t = i*dt

x = x+vx*dt ; y = y+vy*dt

kode write (11,*) adalah penulisan variable t,x,y,vx,dan vy yang


merupakan hasil dari proses pendefinisian pada kode baris program sebelumnya dan device
nomor 11 sebagai file. Kemudian untuk 3 baris kode di bawahnya merupakan proses
inisialisasi atau pemisalan, proses yang terjadi adalah mendefinisikan darimana diperolehnya
dan terjadi proses perhitungan, yang akan menghasilkan nilai dari variable i,t,x, dan y
yang baru.

if(x .gt. Lx)x = x-L

if(x .lt. -Lx)x = x+L

if(y .gt. Ly)y = y-L

if(y .lt. -Ly)y = y+L

kode if (x .gt. Lx)x = x-L adalah kode untuk memberikan perintah batasan
nilai pada suatu variable, yang berarti jika nilai x (nilai yang sudah mengalami proses
perhitungan dengan rumus pada script program sebelummnya) lalu dikalikan dengan x maka
akan menghasilkan nilai x yang dikurangi dengan variable L. Begitu juga untuk script
program pada baris dibawahnya untuk 3 script program shingga diperoleh nilai x+L, y-L dan
y+L.

r1 = sqrt((x-xc1)**2+(y-yc1)**2)

r2 = sqrt((x-xc2)**2+(y-yc2)**2)
untuk 2 baris script di atas merupakan proses inisialisasi atau pemisalan, proses yang
terjadi adalah mendefinisikan darimana diperolehnya dan terjadi proses perhitungan untuk
variable r1 dan r2.

if(r1 .lt. R) then

call crossC1(x,y,vx,vy,dt,r1,d)

Kode if (r1 .lt. R) then, kode if .. then merupakan perintah , yang kriteria
penghentiannya menggunakan logical expression yaitu ..lt.., yang berarti bahwa apabila
nilai r1 yang diperoleh dari baris script program sebelumnya lebih kecil dari R maka
diperintahkan secara otomatis program akan melanjutkannya programnya dengan baris kode
program berikutnya, dimana pada kode baris program berikutnya ada proses pemanggilan
data dari script call crossC1(x,y,vx,vy,dt,r1,d)), ini merupakan bagian dari
script subroutine yang ada pada baris program di bawah yang akan di bahas di bawah pada
bagian program lain

else if(r2 .lt. R) then

call crossC2(x,y,vx,vy,dt,r2,d)

endif

Kode if (r2 .lt. R) then, kode if .. then merupakan perintah , yang kriteria
penghentiannya menggunakan logical expression yaitu ..lt.., yang berarti bahwa apabila
nilai r2 lebih kecil dari R maka diperintahkan secara otomatis program akan melanjutkannya
programnya dengan baris kode program berikutnya, dimana pada kode baris program
berikutnya ada proses pemanggilan data dari script call
crossC2(x,y,vx,vy,dt,r2,d)), ini merupakan bagian dari script subroutine, sama
pada penjelasan di atas pada call crossC1. Kemudian kode endif adalah perintah untuk
menghentikan perintah if..then.

enddo

end program WormHole2D

enddo adalah perintah untuk menghentikan perintah iterasi yang sebelumnya diberikan
pada perintah do .. while. Sedangkan end program adalah code yang menyatakan bahwa
program telah selesai atau menandakan akhir dari program dan end program harus selalu
ditulis pada akhir setiap program serta nama program tersebut WormHole2D seperti pada
kepala program.

subroutine crossC1(x,y,vx,vy,dt,R,d)

implicit none

subroutine merupakan deklarasi jenis dan variable ‘lokal’ lain, salah satu
subprogram. Program subroutine in memberikan hasil prose perhitungannya melalui
argument-argumennya, dalam hal ini jelas argument tersebut yang harus dideklarasikan sama
pada program utama. Baris pertama merupakan kepala program, kita ketahui bahwa program
dimulai dengan nama program dan diakhiri juga dengan nama program juga.
crossC1(x,y,vx,vy,dt,R,d)dimana yang di dalam tanda kurung merupakan variable
yang akan di deklarasikan pada program di bawahnya. Implicit none merupakan bagian
dari kepala program.

real(8) :: x,y,vx,vy,dt,R,d

real(8) :: vr,v0

real(8) :: theta,xc,yc

real(8), real adalah untuk mendeklarasikan bilangan decimal atau bilangan berkoma
sedangkan angka 8 berarti bahwa single presisi, banyak angka dibelakang komanya 8 angka,.
Maka pada script di atas yang di deklarasikan adalah x,y,vx,vy,dt,R,d, vr, v0,
theta, xc dan yc.

print*,"# Inside C1 : ( x , y , vx , vy , R)=",x,y,vx,vy,R

print adalah perintah yang diberikan pada program untuk memunculkan kata atau
kalimat yang diberikan pada kata atau kalimat yang berada di dalam tanda petik dua. Dimana
pada program di atas akan menampilkan tulisan berupa "# Inside C1 : ( x , y , vx
, vy , R)=". Sedangkan yang tanpa menggunakan tanda petik adalah untuk menuliskan
hasil yang diinginkan atau hasil dari input keyboard yang sudah dijalankan oleh kode
program di atas sebelumnya. Pada kode program ini muncul tulisan untuk mendeskripsikan
nilai, setelah tulisan tersebut maka akan muncul nilainya yang mana nilai tersebut dipanggil
dari kode program pada baris sebelumnya yang memerintahkan untuk menginput nilai dari
keyboard yaitu nilai x, y, vx, vy, dan R.
xc = 0.5D0 * d

yc = 0.0D0

theta = atan2(y-yc,x-xc)

x = -xc-R*cos(theta)

vr = vx*cos(theta)+vy*sin(theta)

v0 = -vx*sin(theta)+vy*cos(theta)

vx = vr*cos(theta)+v0*sin(theta)

vy = -vr*sin(theta)+v0*cos(theta)

x = x+vx*dt

y = y+vy*dt

untuk10 baris script di atas merupakan pendefinisian pada variable xc, yc, theta, x,yr,
v0,yx, yy, x, dan y. pada subprogram subroutine ini memberikan hasil proses perhitungannya
dengan argument-argumennya, dalam hal ini ‘jenis’ dari argumen tersebut yang harus
dideklarasikan pada program utama.

print*,"# Exit C2 : ( x , y , vx , vy )=",x,y,vx,vy

print adalah perintah yang diberikan pada program untuk memunculkan kata atau
kalimat yang diberikan pada kata atau kalimat yang berada di dalam tanda petik dua. Dimana
pada program di atas akan menampilkan tulisan berupa "# Exit C2 : ( x , y , vx ,
vy )=",. Sedangkan yang tanpa menggunakan tanda petik adalah untuk menuliskan hasil
yang diinginkan atau hasil dari input keyboard yang sudah dijalankan oleh kode program di
atas sebelumnya. Pada kode program ini muncul tulisan untuk mendeskripsikan nilai, setelah
tulisan tersebut maka akan muncul nilainya yang mana nilai tersebut dipanggil dari kode
program pada baris sebelumnya yang memerintahkan untuk menginput nilai dari keyboard
yaitu nilai x, y, vx, dan vy.

end subroutine crossC1

end subroutine crossC1 adalah code yang menyatakan bahwa program telah
selesai atau menandakan akhir dari program dan harus selalu ditulis pada akhir setiap
program serta nama program tersebut seperti pada kepala program kecuali yang bertanda
kurung pada kepala program ini.

subroutine crossC2(x,y,vx,vy,dt,R,d)

implicit none

subroutine merupakan deklarasi jenis dan variable ‘lokal’ lain, salah satu
subprogram. Program subroutine in memberikan hasil prose perhitungannya melalui
argument-argumennya, dalam hal ini jelas argument tersebut yang harus dideklarasikan sama
pada program utama. Baris pertama merupakan kepala program, kita ketahui bahwa program
dimulai dengan nama program dan diakhiri juga dengan nama program juga.
crossC2(x,y,vx,vy,dt,R,d)dimana yang di dalam tanda kurung merupakan variable
yang akan di deklarasikan pada program di bawahnya. Implicit none merupakan bagian
dari kepala program.

real(8),parameter :: PI=3.14159265358979324D0

real(8) :: x,y,vx,vy,dt,R,d

real(8) :: vr,v0

real(8) :: theta,xc,yc

real(8), real adalah untuk mendeklarasikan bilangan decimal atau bilangan berkoma
sedangkan angka 8 berarti bahwa single presisi, banyak angka dibelakang komanya 8 angka,
sedangkan parameter :: PI=3.14159265358979324D0, berarti bahwa nilai PI tidak
akan berubah atau tetap. Kemudian pada script di atas yang di deklarasikan adalah
x,y,vx,vy,dt,R,d, vr, v0, theta, xc dan yc.

print*,"# Inside C2 : ( x , y , vx , vy , R)=",x,y,vx,vy,R

print adalah perintah yang diberikan pada program untuk memunculkan kata atau
kalimat yang diberikan pada kata atau kalimat yang berada di dalam tanda petik dua. Dimana
pada program di atas akan menampilkan tulisan berupa "# Inside C2 : ( x , y , vx
, vy , R)=". Sedangkan yang tanpa menggunakan tanda petik adalah untuk menuliskan
hasil yang diinginkan atau hasil dari input keyboard yang sudah dijalankan oleh kode
program di atas sebelumnya. Pada kode program ini muncul tulisan untuk mendeskripsikan
nilai, setelah tulisan tersebut maka akan muncul nilainya yang mana nilai tersebut dipanggil
dari kode program pada baris sebelumnya yang memerintahkan untuk menginput nilai dari
keyboard yaitu nilai x, y, vx, vy, dan R.

xc = -0.5D0*d ! c e n t e r of C2

yc = 0.0D0

theta = PI-atan2(y-yc,x-xc)

x = -xc+R*cos(theta)

vr = -vx*cos(theta)+vy*sin(theta)

v0 = vx*sin(theta)+vy*cos(theta)

vx = -vr*cos(theta)-v0*sin(theta)

vy = -vr*sin(theta)+v0*cos(theta)

x = x+vx*dt

y = y+vy*dt

pada 10 baris script di atas merupakan pendefinisian pada variable xc, yc, theta, x,yr,
v0,yx, yy, x, dan y. pada subprogram subroutine ini memberikan hasil proses perhitungannya
dengan argument-argumennya, dalam hal ini ‘jenis’ dari argumen tersebut yang harus
dideklarasikan pada program utama.

print*,"# Exit C1 : ( x , y , vx , vy )=",x,y,vx,vy

print adalah perintah yang diberikan pada program untuk memunculkan kata atau
kalimat yang diberikan pada kata atau kalimat yang berada di dalam tanda petik dua. Dimana
pada program di atas akan menampilkan tulisan berupa *,"# Exit C1 : ( x , y , vx
, vy )=". Sedangkan yang tanpa menggunakan tanda petik adalah untuk menuliskan hasil
yang diinginkan atau hasil dari input keyboard yang sudah dijalankan oleh kode program di
atas sebelumnya. Pada kode program ini muncul tulisan untuk mendeskripsikan nilai, setelah
tulisan tersebut maka akan muncul nilainya yang mana nilai tersebut dipanggil dari kode
program pada baris sebelumnya yang memerintahkan untuk menginput nilai dari keyboard
yaitu nilai x, y, vx, dan vy.

end subroutine crossC2


end subroutine crossC2 adalah code yang menyatakan bahwa program telah
selesai atau menandakan akhir dari program dan harus selalu ditulis pada akhir setiap
program serta nama program tersebut seperti pada kepala program kecuali yang bertanda
kurung pada kepala program ini.

Kemudian klik Compile, apabila pada saat di Compile sukses, maka dilanjutkan
dengan klik Build, kemudian Excute. Maka akan keluar kotak dialog command seperti
dibawah ini, kemudian input nilai dari keyboard. Dan akan muncul nilai yang diinginkan
seperti pada gambar di bawah ini.

Gambar 8. Hasil excute dari program Wormhole pada Geany

Setelah langkah diatas dilakukan, maka pada folder tempat file tadi tersimpan akan
muncul file Wormhole.dat. Wormhole.dat ini muncul karena pada program baris ke 49 sudah
dideskripsikan dengan nama demikian (penamaan file tersebut sesuai keinginan kita).
Kemudian buka file Wormhole.dat tersebut dengan software Geany.

Gambar 9. Data yang muncul pada folder setelah di excute


Kemudian akan muncul data seperti pada gambar di bawah. Data inilah yang akan
digunakan pada MATLAB. Data di bawah adalah data t, x, y, vx, vy, untuk masing-masing
kolom.

Gambar 10. Hasil file .dat dari program Wormhole

PLOTTING DATA MENGGUNAKAN MATLAB

Pada MATLAB, kita akan ploting data hasil dari program Geany yang berupa file
.dat. dengan cara membuka software MATLAB, lalu buat program pada software MATLAB
tersebut dengan memasukkan script seperti gambar dibawah ini. Setelah selesai kemudian di
save pada folder Laporan 14 dengan nama WormHole.

Gambar 11. Hasil file .dat dari program Wormhole


Berikut penjelasan script pada program di atas:

Data = load('WormHole.dat');
t = Data(:,1);
x = Data(:,2);
y = Data(:,3);
vx = Data(:,4);
vy = Data(:,5);
Data = load('Wormhole.dat')artinya kita membuka file Wormhole.dat,
data yang akan digunakan. Kemudian dimisalkan t, x, y, vx, dan vy sesuai dengan data file
Wormhole.dat.dat. (:,1) adalah kolom pertama pada data Wormhole.dat.dat, (:,2) adalah
kolom kedua, begitu juga seterusnya sampai data vy yang merupakan kolom kelima.
figure(1)
for i=1:length(x);
a= x(i);
b= y(i);
x1= [-10 10]
y1= [0 0]
x2= [0 0]
y2= [-10 10]
figure(2) merupakan nama judul pada gambar yang akan ditampilkan. for
i=1:length adalah kode yang berarti untuk deskripsikan bahwa i sama dengan 1 sampai
sepanjang sumbu x, dan dideskripsikan bahwa a=x untuk sepanjang i demikian juga untuk b.
selanjutnya script di bawahnya lagi merupakan pendefinisian dari sumbu x, dany. misalnya
untuk x1= [-10 10] berarti bahwa garis akan muncul pada range -10 sampai 10 pada sumbu x
yang pertama yaitu yang letaknya di bawah, begitu juga untuk script selanjutnya
plot(x,y,'g',a,b,'k*','linewidth',3);hold on
plot(x1,x2,'b-',y1,y2,'r-','linewidth',3); hold off
drawnow
end
pada kode script baris pertama diatas berarti plot berupa data dari
x dan y seperti pada figure di atas yang sudah didefinisikan sebelumnya yaitu x pada kolom
kedua dan y data pada kolom ketiga. Hasil plot x dan y ini akan menjadi lintasan. Sedangkan
‘g’ berarti hasil plot berwarna hijau. Kemudian untuk kode a dan b merupakan hasil plot yang
akan melintasi lintasan x,y sepanjang i dengan hasil plot berupa pola bintang berwarna hitam
karena diberi kode ‘k*’. Kemudian'linewidth',3) merupakan kode untuk setiap hasil
plot agar hasil plot yang ditampilkan lebar garisnya 3. Selanjutnya untuk script baris kedua
itu adalah hanya garis yang sudah ditentukan rangenya pada pendefinisian di atas, dengan
garis berwarna biru dan merah. Kode drawnow digunakan agar hasil plot tersebut dapat
bergerak, dan kode end berarti bahwa program berakhir.
Gambar 12. Hasil plot menggunakan MATLAB

Anda mungkin juga menyukai