U N I V E R S I TAS G U NADAR MA FAKU ULTAS TEKNO T LOGI IN NDUSTR RI
MO OLECULA AR DYNAM MICS SIMU ULATION DENGAN MODEL MONOA ATOMIK ATOM A ARG GON Disusun oleh o : Nama NPM / NIRM N Fakultas Jurusan Pembimbbing
: Nurrik ka Anggrain ni : 504974450/ 973137 7716750331 : Teknoloogi Industrii : Teknik Informatikaa P A. Benny Mutiarra, Ssi., Skom : Dr. rer. nat. Dipl. Phys.
Diajukaan Guna Melengkapi Sebagian S Sy yarat Dalam m Mencapai Gelar Sarjaana Strata Satu u (S1)
J A K A R T A 2002
Lembar Pengesahan
Komisi Pembimbing No. Nama 1. Dr. rer.nat. Dipl. Phys. A. Benny Mutiara, Ssi., Skom. 2. Ernastuti, Ssi., MIKom. 3. Tubagus Maulana, Skom., Meng.Sc. Tanggal Sidang :
Jabatan Ketua Anggota Anggota 23 Januari 2002
Panitia Ujian No. 1. 2. 3. 4. 5.
Nama Dr. Ravi Ahmad Salim Drs. Edi Sukirman, MM. Dr. rer.nat. Dipl. Phys. A. Benny Mutiara, Ssi., Skom. Ernastuti, Ssi., MIKom. Tubagus Maulana, Skom., Meng.Sc. Tanggal Lulus :
Jabatan Ketua Sekretaris Anggota Anggota Anggota 23 Januari 2002
Mengetahui, Depok,
Januari 2002
Pembimbing,
Bagian Sidang Ujian,
Dr. rer. nat. Dipl. Phys. A. Benny Mutiara, Ssi.,Skom.
Drs. Edi Sukirman MM.
Abstraksi 50497450 . 973137716750331 Nurrika Anggraini Molecular Dynamics Simulation dengan Model Monoatomik Atom Argon Skripsi . Fakultas Teknologi Industri, 2001 Kata Kunci : Fisika, Molecular Dynamic, Maxwell-Boltzmann, Lennard-Jones, Energi Kinetik, Kecepatan, Delphi (x + 51 + Lampiran) Penulisan kali ini membahas tentang bagaimana memvisualisasikan simulasi Molecular Dynamics (MD) pada sistem 3 dimensi. Sebelum masuk ke proses simulasi Molecular Dynamics, terlebih dahulu diperlukan insialisasi awal, yaitu inisialisasi posisi awal dengan menggunakan Periodic Boundary Condition, dan inisialisasi kecepatan awal dengan distribusi normal Maxwell-Boltzmann. Kemudian dilanjutkan dengan proses simulasi MD untuk mendapatkan besaranbesaran selama waktu iterasi tertentu. Dan menormalisasi gaya tarik partikle dengan metode Lennard-Jones. Penulis menyajikan aplikasi visulisasi ini dengan menggunakan
bahasa
menginisialisasi
pemrograman
variable-variable
Delphi yang
dengan
terlebih
dibutuhkan
dahulu kemudian
mengimplementasikan simulasi MD pada program. Untuk memvisualisasikan nilai data-data numerik yang dihasilkan pada proses simulasi MD, penulis membuat visualisasi dalam 3 bentuk, yaitu visualisasi dalam bentuk chart, tabel, dan kotak pengamatan virtual. Pada kotak pengamatan virtual, dibutuhkan penskalaan yang tepat dan pemetaan dari kotak pengamatan virtual ke layar komputer. Dan untuk membuat aplikasi agar interaktif
dibuat
form-form.
Penulis
menggunakan
atom
Argon
untuk
menyajikannya pada simulasi MD dan pada aplikasi yang dibuat dengan hasil perubahan besaran sesuai dengan teori yang ada.
Daftar Pustaka (1995 – 2000) iii
KATA PENGANTAR
Alhamdulillahi Robbil Alamin, puji dan syukur
penulis panjatkan
kehadirat Allah SWT karena atas limpahan rahmat serta karunuia-Nya sehingga penulis dapat menyelesaikan penulisan ini. Adapun tujuan dari pembuatan penulisan ini adalah untuk melengkapi sebagian syarat dalam mencapai gelar sarjana (S1) di Universitas Gunadarma Dalam pembuatan penulisan tugas akhir ini penulis bermaksud untuk menyajikan aplikasi yang dibuat guna menggunakan Molecular Dynamics Simulation dengan Model Monoatomik Atom Argon Selama pembuatan penulisan tugas akhir ini penulis mendapat dukungan dari beberapa pihak, untuk itu dengan segala kerendahan hati penulis mengucapkan terima kasih kepada : 1. Ibu Prof. E. S. Margianti, SE., MM., selaku Rektor Universitas Gunadarma; 2. Bapak Drs. Soebiyantoro, MMEng., selaku Dekan Fakultas Teknologi Industri; 3. Bapak Dr. rer. nat. Dipl. Phys. A. Benny Mutiara, Ssi., Skom., selaku Ketua Jurusan Teknik Informatika dan sebagai Dosen pembimbing penulisan, atas segala bimbingan dan perhatiannya dan kesempatannya yang diberikan selama ini; 4. Keluarga, Bapak dan Ibu tercinta atas kesabarannyadan kegigihannya dalam memberikan dorongan moril, dan meteril. 5. Adik-adikku Nia, Yanna, Yanni atas .do’a, dukungan dan semangatnya. 6. AP Nugraha, buat semua dukungan, semangat dan bantuannya selama ini. 7. Sahabat-sahabatku tercinta Nida dan Ela atas persahabatan yang kalian berikan, do’a, dukungannya kepada penulis. 8. Teman- teman seperjuanganku kak ati, erna, puput, yani dan mba ani, juga buat mba arti buat Ukhuwah Islamiyahnya. 9. Sahabat, teman, dan saudara penulis seluruh anggota IA0197, untuk Tari, Yan, Alinda, Oki, Didien, Ryan buat do’a dan dukungannya. iv
10. Ibu dewi, mba viva, kak gatot, kak nouviar, kak nanang, mba yuni, wayan, lukman dan rekan-rekan penulis di LAB Informatika, atas pengertiannya dan persahabatan yang kalian ciptakan di LAB ini. 11. Dan yang terakhir untuk semua pihak yang tak dapat penulis sebutkan namanya satu persatu. Karena merekalah penulis dapat menyelesaikan penulisan tugas akhir ini. Tidak ada sesuatu hal pun yang pantas diberikan penulis atas semua yang telah mereka lakukan, selain “semoga Allah membalas semua kebaikan-kebaikan ini”. Penulis menyadari bahwa hasil penulisan ini mungkin masih jauh dari kesempurnaan karena keterbatasan ilmu dan pengetahuan yang dimiliki oleh penulis, walaupun usaha untuk meminimalisasi kekurangan telah banyak dilakukan oleh penulis. Oleh sebab itu penulis mengharapkan kritik dan saransaran yang positif demi ksempurnaannya penulisan ini. Akhirnya penulis berharap semoga penulisan tugas akhir ini dapat bermanfaat bagi kita semua. 1.
v
Daftar Isi
Halaman Judul ................................................................................................... Lembar Pengesahan ........................................................................................... Abstraksi ............................................................................................................ Kata Pengantar .................................................................................................... Daftar Isi ............................................................................................................ Daftar Gambar ................................................................................................... Daftar Tabel ....................................................................................................... Daftar Lampiran ................................................................................................. Bab I
i ii iii iv vi viii ix x
Pendahuluan ....................................................................................... 1.1. Latar Belakang ............................................................................ 1.2. Rumusan Masalah ....................................................................... 1.3. Batasan Masalah ......................................................................... 1.4. Tujuan Penulisan ........................................................................ 1.5. Metode Penelitian ....................................................................... 1.6. Sistematika Penulisan .................................................................
1 1 2 2 3 3 3
Bab II Landasan Teori .................................................................................. 2.1. Molecular Dynamics ................................................................... 2.2. MD pada Sistem Fisik Microcospic ........................................... 2.3. Simulasi MD pada Microcanonical Ensambel .......................... 2.3.1. Inisialisasi ....................................................................... 2.3.1.1. Periodic Boundary Condition ........................... 2.3.1.2. Normalisasi Maxwell-Boltzmann ..................... 2.3.2. Kesetimbangan ................................................................ 2.3.3. Hasil Simulasi dan Properti Dinamik .............................. 2.3.3.1. Skema Integrasi ................................................. 2.3.3.2. Algoritma Penjumlahan Verlet ......................... 2.4. Borland Delphi ............................................................................ 2.4.1. IDE (Integrated Development Environment) ................. 2.4.1.1. Main Window (Jendela Utama) ........................ 2.4.1.2. Form Designer .................................................. 2.4.1.3. Object Inspector ................................................ 2.4.1.4. Code Editor ....................................................... 2.4.1.5. Code Explorer ................................................... 2.4.2. Visual Component Library .............................................. 2.4.3. Pemrograman di Delphi .................................................. 2.4.3.1. Konstanta dan Variable .................................... 2.4.3.2. Tipe Data .......................................................... 2.4.3.3. Pernyataan Kondisi ........................................... 2.4.3.4. Perulangan ........................................................
4 4 4 6 6 6 7 8 8 9 10 11 12 13 13 13 14 14 14 15 15 16 16 17
vi
Bab III Implementasi Simulasi MD ............................................................... 3.1. Transformasi Simulasi MD terhadap Algoritma Program .......... 3.2. Proses Inisialisasi ….................................................................... 3.2.1. Inisialisasi Parameter ....................................................... 3.2.2. Inisialisasi Posisi Partikel dengan menggunakan metode Lattice .............................................................................. 3.2.3. Normalisasi Kecepatan Partikel dengan MaxwellBoltzmann ....................................................................... 3.3. Proses Simulasi MD …................................................................ 3.3.1. Penentuan nilai posisi pada langkah waktu dasar (H) ..... 3.3.2. Pengaplikasian PBC terhadap nilai posisi ...................... 3.3.3. Perhitungan nilai kecepatan parsial ................................. 3.3.4. Perhitungan nilai gaya ..................................................... 3.3.5. Perhitungan nilai kecepatan ............................................ 3.3.6. Perhitungan nilai energi kinetik ...................................... 3.3.7. Perhitungan nilai kecepatan rata-rata .............................. 3.3.8. Perhitungan nilai kecepatan secara periodik ................... 3.3.9. Perhitungan besaran-besaran lainnya .............................. 3.4. Visualisasi Simulasi MD pada Aplikasi ..................................... 3.4.1. Visualisasi dalam bentuk Chart ...................................... 3.4.2. Visualisasi dalam bentuk kotak pengamatan virtual ....... 3.4.3. Visualisasi dalam bentuk tabel ........................................ 3.5. Perancangan Input Output .......................................................... 3.5.1. Rancangan tampilan utama ............................................. 3.5.2. Rancangan Chart ............................................................. 3.5.3. Rancangan kotak pengamatan virtual ............................. 3.5.4. Rancangan MDParameter ............................................... 3.5.5. Rancangan MDBoundary ................................................ 3.5.6. Rancangan MDTable ....................................................... 3.5.7. Rancangan MDColor ....................................................... 3.5.8. Rancangan untuk penyimpanan ...................................... 3.6. Penggunaan Aplikasi MD Simulation untuk Atom Argon ......... 3.6.1. Inisialisasi untuk atom Argon ......................................... 3.6.2. Proses simulasi MD ......................................................... 3.6.3. Visualisasi atom Argon ................................................... 3.6.4. Memulai Aplikasi ............................................................ 3.6.4.1. Tampilan Utama ................................................ 3.6.4.2. Tampilan ketika Aplikasi dijalankan ................ 3.6.4.3. Hasil MDS dalam bentuk Chart ……................ 3.6.4.3. Hasil MDS dalam bentuk Tabet ….…............... 3.6.4.3. Hasil MDS dalam bentuk Kotak Pengamatan Virtual …….......................................................
18 18 19 19 20 22 24 24 25 25 25 28 29 29 30 30 31 31 32 34 36 36 38 39 41 42 43 45 45 45 45 46 46 47 47 48 48 52 53
Bab IV Penutup ............................................................................................... 55 4.1. Kesimpulan ................................................................................. 55 4.2. Saran ........................................................................................... 56 Daftar Pustaka ................................................................................................. 57 Lampiran ........................................................................................................... 58 vii
Daftar Gambar
Gambar 3.1. Gambar 3.2. Gambar 3.3. Gambar 3.4. Gambar 3.5. Gambar 3.6. Gambar 3.7. Gambar 3.8. Gambar 3.9. Gambar 3.10. Gambar 3.11. Gambar 3.12. Gambar 3.13. Gambar 3.14. Gambar 3.15. Gambar 3.16. Gambar 3.17. Gambar 3.18. Gambar 3.19. Gambar 3.20. Gambar 3.21.
Kedudukan atom di dalam box .............................................. Pengamatan box 2 dimensi ..................................................... a. Koordinat layar komputer; b. Koordinat kotak pengamatan ............................................. Rancangan bagian utama program ......................................... Rancangan MDChart ............................................................... Rancangan MDVisualization ................................................. Rancangan MDParameter ...................................................... Rancangan MDBoundary ...................................................... Rancangan MDTable .............................................................. Rancangan MDPartColor ....................................................... Tampilan Utama Aplikasi MDS (a) …………....................... Tampilan Utama Aplikasi MDS (b) …………....................... Tampilan MDSParameter ...................................................... Tampilan MDS Visual Boundary .......................................... Tampilan Aplikasi MDS dengan Page Control Chart ............ Energi Kinetik yang dihasilkan ............................................. Energi Potensial yang dihasilkan ........................................... Total Energi yang dihasilkan ................................................. Tampilan hasil simulasi MD dalam bentuk tabel .................. Warna dari atom yang diamati .............................................. Posisi Atom yang dihasilkan selama proses simulasi ...........
viii
32 33 34 38 39 40 41 42 44 44 47 48 49 50 50 51 51 52 53 53 54
Daftar Tabel
Tabel 3.1. Struktur Tabel Utama .................................................................... Tabel 3.2. Struktur Tabel Rinci ......................................................................
ix
35 35
BAB I PENDAHULUAN 1.1.
Latar Belakang Molecular Dynamics (MD) adalah suatu metode simulasi pergerakan
molekul yang berguna mendapatkan pengertian yang lebih dari reaksi kimia, aliran zat cair, fase transisi, dan fenomena fisika lainnya, fenomena tersebut diperoleh dari interaksi molekul. Tidak hanya pergerakan dari banyak molekul di dalam zat cair, tetapi juga pergerakan molekul di dalam satu molekul besar yang terdiri dari ratusan atau ribuan atom, seperti didalam protein. Pergerakan ini tidak bisa dimengerti, jika menggunakan kasat mata. Kebanyakan pergerakan ini menggunakan
teknik simple classical newtonian dan menggunakan konsep
metematika yang biasa digunakan. Komputer merupakan alat yang sangat penting untuk metode Molecular Dynamics ini karena tidak ada cara yang lebih mudah untuk mentracing pergerakan dari sejumlah besar interaksi partikel-partikel. Perhitungan Molecular Dynamics juga menekankan pada pergerakan yang terjadi di dalam molekul itu sendiri, juga di dalam protein dan cairan asam, merupakan bagian yang penting dari sistem biologi. Hasilnya digunakan untuk mendapatkan pengertian yang mendalam dari fungsi molekul ini dalam reaksi biochemical. Perhitungan dipengaruhi oleh pergerakan dari sejumlah besar partikel yang saling berinteraksi, walaupun partikel adalah atom-atom didalam sebuah molekul atau di dalam zat cair atau zat padat atau keadaan yang lainnya. Semua keadaan tersebut mempengaruhi seri panjang setiap waktu langkah, digunakan hukum Newton’s untuk mendeterminasi posisi dan kecepatan baru dari posisi dan kecepatan lama dan gaya-gaya. Perhitungan cukup mudah tapi untuk mendapatkan kebenaran, waktu langkah harus kecil dan permintaan untuk mensimulasikan secara benar pada panjang interval waktu sesungguhnya.
1
2
Visualisasi yang teliti adalah penting untuk mengerti hasil dari Molecular Dynamics Simulation. Ribuan angka disajikan dari posisi dan kecepatan dari partikel-partikel yang tidak mudah menggambarkan pergerakannya. Bagaimana menemukan bentuk dari kumpulan data ini, atau pembelokan dan peregangan alami dari molekul besar. Gambar dan animasi cocok untuk menggambarkan formasi molekul ini, untuk menunjukkan pembelokan yang lebih detail dari fenomena ini. Untuk inilah penulis mencoba menvisualisasikan Molecular Dynamics Simulation, untuk mendapatkan hasil yang baik.
1.2.
Rumusan Masalah Yang menjadi masalah dalam penulisan tugas akhir ini adalah bagaimana
menvisualisasikan Molecular Dynamics Simulation pada sistem 3 dimensi untuk atom argon dengan menggunakan bahasa pemrograman Delphi, sehingga mendapatkan hasil yang representatif dengan Molecular Dynamics Simulation sebenarnya.
1.3.
Batasan Masalah Dalam penulisan ini penulis akan dibatasi pada masalah bagaimana
memvisualisasikan Molecular Dynamics Simulation pada sistem 3 dimensi untuk atom argon dengan variable–variable awalnya telah ditentukan sebelumnya. Molecular Dynamics Simulation yang digunakan adalah untuk menghitung rangkaian microcannonical Molecular Dynamics. Untuk menghitung perubahan posisi dan kecepatan menggunakan bentuk penjumlahan kecepatan pada algoritma Verlet. Untuk mengeliminasi energi potensial antar partikel-partikel menggunakan model Lennard Jones. Juga bagaimana menghitung perubahan energi pada selang waktu tertentu, tanpa dipengaruhi oleh energi di luar atom atau energi atom itu sendiri. Kondisi awal kumpulan atom-atom argon tersebut disajikan dalam box dengan menggunakan Face cubic center Lettice, dan pendistribuasian kecepatan menggunakan normalisasi Boltzman-Maxwell.
3
Dan bagaimana menvisualisasikan Molecular Dynamics Simulation ini dengan menggunakan kompilator Delphi.
1.4.
Tujuan Penulisan Berdasarkan latar belakang yang telah dipaparkan oleh penulis maka yang
menjadi tujuan dari penulisan tugas akhir ini adalah memberikan atau menyajikan informasi yang baik dari simulasi Molecular Dynamics untuk atom argon pada selang waktu tertentu, dengan bantuan komputer.
1.5.
Metode Penelitian Pada penulisan tugas akhir ini, menggunakan metode studi pustaka dimana
semua bahan diambil dari buku-buku dan literatur-literatur yang relevan dengan penulisan. Selain itu untuk menyelesaikan program ini penulis menggunakan kompilator Delphi.
1.6.
Sistematika Penulisan Bab I
Pendahuluan, pada bab ini akan menjelaskan mengenai latar
belakang masalah, batasan masalah, tujuan penulisan dan metode penulisan yang akan disajikan oleh penulis. Bab II Landasan Teori, pada bab ini akan menguraikan teori Molecular Dynamics dan teori-teori lainnya yang dapat menunjang permasalahan yang akan dibahas oleh penulis. Bab III Implementasi Simulasi MD, pada bab ini akan menyajikan bagaimana
cara
mengimplementasikan
visualisasi
Molecular
Dynamics
Simulation dengan menggunakan kompilator bahasa pemrograman Delphi. Dan juga akan dijelaskan bagaimana dan alasan penulis membuat rancangannya. Bab IV Penutup, bab ini merupakan bab terakhir dari penulisan yang disajikan penulis. Pada bab ini berisi kesimpulan dari apa yang telah diterangkan pada bab-bab sebelumnya, dan juga berisi saran-saran perbaikan yang berhubungan dengan masalah yang dibahas oleh penulis.
Bab II Landasan Teori 2.1.
Molecular Dynamics Molecular Dynamics Simulation (MDS) menggunakan batasan partikel
untuk menunjukkan interaksi objek–objek, atom-atom atau molekul-molekul. Ada 3 model yaitu : Hooke Law, Lennard-Jones dan Hard Spare [2]. Dalam model Hooke Law pergerakan gaya bergerak seperti partikel-partikel terhubung dengan partikel disampingnya dengan lompatan. Lennard-Jonnes adalah model dengan gaya yang kuat mempengaruhi pada jarak antar partikel yang sangat dekat, atraktif pada jarak yang jauh dan sangat lemah pada jarak yang sangat jauh. Pada model Hard Spare interaksi partikel seperti bola biliar, mereka saling bertubrukan dengan yang lainnya ketika mereka berada pada jarak tertentu, selain itu mereka tidak berinteraksi. Normalnya model Lennard-Jonnes digunakan untuk sistem 3 dimensi, tetapi dapat juga digunakan untuk sistem 1 dimensi dan 2 dimensi. Persamaan gerak untuk setiap modelnya, dengan model Hooke law dan Lennard-Jones harus menyelesaikan dengan sistem persamaan yang berbeda menggunakan metode Euler’s dan Verlet’s. Metode Euler’s karena metode ini paling mudah dari berbagai metode lainnya yang cukup beralasan untuk digunakan dan pengenalan termudah untuk beberapa ide dasar dari perhitungan numerik untuk menyelesaikan persamaan gerak. Metode Verlet’s hanya sedikit lebih kompleks namun lebih akurat. Ini adalah metode perhitungan yang termudah yang digunakan untuk perhitungan MDS. [2]
2.2.
MD Pada Sistem Fisik Microscopic Sistem microscopic bisa terdiri dari beberapa atau banyak sistem
didalamnya. Pendeskripsiannya dapat menggunakan Hamiltonian, Lagrangian atau diekspresikan langsung melalui persamaan gerak Newtons. Metode MD digunakan untuk menghitung properti-properti dengan menggunakan persamaan gerak baik properti statis dan dinamis dari sistem. Di 4
dalam metode MD persamaan gerak diselesaikan secara numerik pada komputer. Juga persamaan yang terkait untuk perhitungan numerik pada komputer. Simulasi sistem diawali dengan keadaan energi yang konstan. Properti akan dihitung dalam microcanonical ensembel dimana jumlah partikel N, volume V, dan energi E adalah konstan. Akan tetapi didalam banyak situasi ada satu yang menarik yaitu tingkah laku sistem pada temperatur T konstan atau tetap. Ini merupakan bagian dari kenyataan bahwa ensembel dari beberapa jumlah tertentu, bukan microcanonical tapi canonical ensembel. Persamaan bentuk : du (t ) k (u (t ), t ) dt
(1)
Dimana u adalah variable yang tidak diketahui, mungkin sebagai kecepatan, jari-jari atau suatu posisi, dan k adalah operator yang telah ditentukan. Variable t mewakili sebagai waktu. Tapi u(t) disajikan dalam variable acak. Penekanan pada monoatomik system adalah interaksi antar molekul yang tidak tergantung pada orientasi dari molekul-molekul. System akan disajikan dengan Hamiltonian.
pi2 1 H u ( rij ) 2 i mi i J
(2)
Dimana rij adalah jarak antara partikel i dan partikel j untuk setiap referensi menggunakan energi internal konfigurasi sebagai berikut : U ( r ) u ( rij ) i j
(3)
Misalkan sistem tetap dengan N partikel, karena properti dibatasi pada tingkat kerapatan tertentu ρ maka harus memasukkan volume pada Molecular Dynamic cell untuk mendapatkan kerapatan tetap. Jika sistem berada pada suhu 5
atau temperatur yang tidak setimbang maka bentuk dari volume tidak setimbang. Hal ini berlaku untuk cairan dan gas yang dibatasi oleh volume yang cukup besar. Untuk sistem dalam kondisi kristal bentuk tersebut tentu saja berubah.
2.3.
Simulasi MD Pada Microcanonical Esembel Pengaktualisasian simulasi komputer pada sistem molecular dapat dibagi
menjadi tiga bagian, yaitu : 2.3.1.
Inisialisasi Bagian pertama dari simulasi ini adalah untuk memberikan kondisi awal.
Tergantung dari algoritma yang digunakan, berbeda nilai awal yang diberikan. Sebuah algoritma mugkin membutuhkan dua nilai awal koordinat, satu pada saat waktu sama nol dan satu pada waktu berikutnya. Untuk ini diasumsikan bahwa untuk memulai suatu algoritma dibutuhkan posisi dan kecepatan. 2.3.1.1.
Periodic Boundary Conditions (PBC) Untuk bentuk cair dan gas diambil bentuk kubik untuk mempermudah
perhitungan. L adalah panjang sisi dari MD cell dengan volume V = L3. Pembuatan box menyebabkan pembentukan 6 permukaan yang tidak diinginkan. Partikel yang membentur permukaan ini akan berbalik kembali kedalam cell. Kecuali untuk sistem dengan jumlah partikel yang kecil, kontribusi penting untuk berbagai properti akan datang dari permukaan tersebut. Untuk mengurangi efek dari permukaan kita menetapkan periodic boundary conditions (pbc), dalam contoh cell dasar diidentikkan berulang kali secara metematis. Untuk penelitian A adalah dengan
A( x ) A( x nL )
(4)
n ( n1, n2 , n3 ) Untuk semua integer n1,n2,n3. implementasi perhitungannya adalah jika sebuah partikel menyebrangi permukaan dari cell dasar kembali sepanjang luar diding dengan kecepatan yang tidak berubah. Dengan periodic boundary 6
conditions permukaan volume dieliminasi sehingga volume terbentuk, disajikan pada pendekatan sistem macroscopic. Diasumsikan bahwa bagian volume kecil melekat atau menempel pada blok yang terdefinisi. Setiap komponen dari vektor posisi berkisar antara nol dan L. Jika i adalah partikel pada ri, ada pengaturan image partikel pada posisi ri + nL, n adalah vektor integer. Dari periodic boundary conditions kita mendapatkan energi potential di setiap rn U ( r1 ,..., rn ) u ( rij ) u (| ri r j nL |) i j
n
(5)
i j
Jarak rij antara partikel i pada ri dan partikel j pada rj adalah rij = min (|ri- rj + nl |) dari semua n. Sebuah partikel dalam cell dasar berinteraksi hanya dengan setiap n – 1 partikel lainnya dalam cell dasar atau gambaran terdekat lainnya. Akibatnya harus ada pemotongan (cut off) potential dengan kondisi r L c 2 2.3.1.2. Normalisasi Maxwell-Boltzmann Seperti telah dijelaskan diatas bahwa untuk memulai perhitungan suatu algoritma sebagai nilai awal, dibutuhkan posisi dan kecepatan awal. Dan untuk menentukan posisi awal telah digunakan metode periodic boundary conditions, sedangkan untuk mendapatkan kecepatan kita harus menormalisasi kecepatan dengan menggunakan rumus Maxwell-Boltzmann. Dimana distribusi kecepatan menurut hukum Maxwell-Boltzmann adalah sebagai berikut [5]:
(6)
f (v x ) dv x
N (v x ) dv x n
mv 2 m exp x dv x 2kT 2kT
k adalah konstanta boltzmann. Analogikan juga untuk komponen y dan z. dan dengan menggunakan standard deviasi Gaussian (kT / m)1/ 2 berkisar nilai sebenarnya
vx 0
, menjadi mendekati keseragaman selama kenaikan 7
temperatur. Selama simulasi diizinkan untuk membangun distribusi Maxwell (dan, disini mencapai kesetimbangan) dengan memonitor atau memperhatikan dinamika dari sebuah partikel [5]. Distribusi tersebut dinyatakan sebagai berikut :
(7)
H x (t )
f (v x ) ln f (v x ) dv x
disini fungsi partisi kinetik dari Boltzmann dinyatakan dengan H, dengan waktu rata 2.3.2.
–rata
ln f
adalah .
Kesetimbangan
Pada fase ini, energi bisa ditambah atau dikurangi sampai energi mencapai nilai yang diinginkan. Energi bisa dikeluarkan atau ditambahkan dengan langkah dari energi kinetik naik atau turun. Sistem sekarang mengizinkan untuk mencapai kesetimbangan dengan mengikuti integrasi dari persamaan gerak untuk sejumlah langkah. Kesetimbangan ditetapkan jika telah dibentuk untuk batasan nilai tertentu dari energi kinetik dan energi potensial. Untuk itu dapat dibatasi sedikitnya dua masalah yang relevan. Yang pertama mengenai waktu relaksasi dari sistem. Waktu dasar langkah h dibatasi waktu sesungguhnya dari simulasi. Jika waktu relaksasi terlalu lama, banyak langkah akan diminta sistem untuk mencapai kesetimbangan. Untuk beberapa sistem banyaknya waktu langkah terlalu besar untuk disajikan untuk kecepatan komputer. Akan tetapi mungkin dilakukan dengan memiliki pertimbangan dari variable. Masalah lain mungkin saja sistem telah diatur dalam bagian yang tidak relevan pada fase ruang. Masalah ini dapat diatasi dengan cara menjalankan simulasi dengan kondidi awal yang berbeda dan panjang yang berbeda. 2.3.3.
Hasil Simulasi dan Properti Dinamik
Selama simulasi berjalan kita dapat menghitung perubahan energi yang terjadi dalamnya dan perubahan–perubahan posisi dari posisi awal. Dengan energi 8
awal yang tetap, banyaknya partikel yang tetap pula dan dengan volume yang tetap, kemudian dihubungkan dengan suatu batasan-batasan persamaan gerak sehingga yang terjadi adalah suatu simulasi dari suatu temperatur tetap bukan dari suatu energi tetap. 2.3.3.1. Skema Integrasi Metode MD adalah suatu masalah nilai awal. Secara spesifik asumsikan bahwa persamaan bentuk diturunkan dari Hamiltonian, contoh persamaan gerak tersebut adalah
m
dri dp pi , i F (rij ) dt dt i j
(8)
Setiap evaluasi pada sisi kanan untuk partikel-partikel N menyebabkan N(N-2)/2 menjadi operasi-operasi yang menghabiskan waktu. Untuk menghindari ini, skema yang lebih sederhana digunakan sehingga lebih memenuhi tingkat ketepatan untuk kebanyakan aplikasi. Untuk memecahkan persamaan-persamaan gerak pada sistem komputer, dibangun suatu skema finite difference untuk persamaan-persamaan diferensial pada orde tertinggi yang memungkinkan. Dari persamaan-persamaan diferensiasi dapat diturunkan relasi-relasi rekursif untuk posisi dan atau kecepatan-kecepatan (momentum). Algoritma in dijalankan secara bertahap atau langkah demi langkah. Pada setiap langkah, pendekatan-pendekatan untuk posisi-posisi dan kecepatankecepatan akan didapat, pertama kali pada waktu t1 lalu pada t2 > t1 dan seterusnya. Dari sini integrasi dijalankan pada arah waktu. Relasi rekursi sepenuhnya memperbolehkan evaluasi efisien. Sebagai tambahan skema harus stabil secara numerik. Untuk memulai perhitungan seperti yang telah dikemukakan diatas, dideskripsikan interaksi dari N partikel dengan Hamiltonian. Untuk mudahnya, diasumsikan seperti sebelumnya potensial dua partikel dengan bentuk bola yang simetri.
9
H (9)
1 1 2 pi u ( rij ) 2 i m i j
Dimana rij didenotasikan sebagai jarak antara partikel i dan partikel j. waktu tidak masuk secara eksplisit kedalam persamaan. Mendasarkan pada sistem dimana H = E adalah gerak konstan. Ditetapkan banyaknya partikel N adalah tetap dan nol total linier momentum (p). Dalam metode klasik Hamiltonian memperbolehkan berbagai macam bentuk persamaan gerak. Bentuk persamaan tergantung dari pilihan algoritma penyelesaian yang dipilih. Walaupun persamaan gerak secara matematis ekivalen tapi tidak hanya ekivalen terhadap perhitungan. Dimulai dengan bentuk Newtonian d 2 ri (t ) 1 Fi ( rij ) dt 2 m i j
(10)
Posisi awal tetap mengkontribusi energi potensial menjadi energi total dan menentukan kecepatan menjadi energi kinetik. Dengan spesifikasi kondisi awal suatu sistem bergerak sepanjang bagian dari energi konstan dari ruang fase. 2.3.3.2. Algoritma Penjumlahan Verlet Jika posisi dan kecepatan telah diketahui atau sebagai nilai awal, kemudian dapat dibuat prosedur untuk menghitung posisi pada saat ri1 ri ri hv i 1
(11)
0
0
1 2 0 h Fi 2m
Algoritma verlet dapat diformulasikan ulang dengan memberi metode numerik yang lebih stabil. n
zi ( ri
n 1
Algoritma selengkapnya adalah 1. Tentukan posisi awal ri1 10
n
ri ) / h (12)
2. Tentukan kecepatan awal vi1 3. Hitung posisi pada setiap waktu langkah sebagai 1 n 1 n n n ri ri hv i m 1h 2 Fi 2
4. Hitung kecepatan pada setiap waktu langkah sebagai
vi
n 1
n
n 1
n
v h ( Fi Fi ) i 2m
Untuk mengeliminasi efek kemungkinan sistem harus diberi waktu untuk mencapai kesetimbangan kembali. Algoritma pencapaian kesetimbangan adalah 1. integrasi persamaan gerak untuk beberapa langkah 2. hitung energi kinetik dan potensial 3. jika energi tidak sama dengan energi yang diinginkan kemudian kembali hitung kecepatan 4. ulangi langkah mulai dari langkap pertama sampai sistem mencapai kesetimbangan. Keberhasilan prosedur tergantung dari pemberian nilai posisi awal dan pendistribusian kecepatan. Pada beberapa kasus, salah satunya memeriksa pendistribusian kecepatan setelah fase kesetimbangan telah dicapai untuk meyakinkan kesetimbangan menggunakan bentuk Maxwell-Boltzmann. Sistem partikel monoatomik dimana total energinya adalah tetap. Disini diasumsikan bahwa interaksi antara partikel akan disajikan dengan model gaya Lennard-Jones : 1 Fx ( rij ) 48 2 ( xi x j ) 2 rij rij 14
8
[13]
Dengan (nilai potensial) dan (nilai spesifik dari panjang unit) merupakan nilai yang sesuai untuk atom argon. Rumus gaya di atas dapat hitung dengan cara yang sama untuk memperoleh komponen y dan z. [1]
11
2.4.
Borland Delphi Borland Delphi merupakan aplikasi program yang berbasis objek pascal
dari Borland. Selain itu, Delphi juga memberikan fasilitas pembuatan aplikasi . Pemrograman
berorientasi
objek
adalah
pemrograman
yang
mengutamakan pemakaian ulang program dan enkapsulasi data berdasarkan fungsinya. Objek atau class adalah tipe data yang mengenkapsulasi data dan operasi didalam sebuah unit tunggal. Inti dari setiap aplikasi Delphi adalah form. Form dapat dianggap sebagai sebuah window. Form mempunyai properti dengan adanya properti tersebut tampilan form dapat diubah. 2.4.1.
IDE (Integrated Development Environment)
IDE adalah sebuah lingkungan dimana semua alat-alat yang diperlukan untuk merancang, menjalankan atau mencoba sebuah aplikasi disajikan dan terhubung dengan baik sehingga memudahkan pengembangan program. Ketika aplikasi Delphi dibuka pertama kalinya maka akan muncul tampilan
12
2.4.1.1. Main Window (Jendela Utama) Jendela utama adalah bagian utama dari IDE yang merupakan semua fungsi-fungsi utama dari program-program windows lainnya. Jendela utama dibagi menjadi 3 bagian yaitu ; 1. Menu Utama Toolbar Object Inspector
Main Window
Code Explorer
Component Palette
Code Editor
Sama seperti program windows lainnya, dipakai untuk membuka dan menyimpan file, menampilkan jendela lain, mengubah sebagainya. 13
option dan lain
2. Toolbar Pada toolbar dapat dilakukan beberapa operasi pada menu utama dengan klik tunggal. Setiap tombol pada toolbar mempunyai tooltip, yang berisi informasi mengenai kegunaan toolbar tersebut.
3. Component Palette Adalah toolbar dengan ketinggian ganda. Yang berisi page kontrol dengan semua komponennya. Urutan dan tampilan dari page dan komponen pada component palette dapat diatur. 2.4.1.2. Form Designer Pada form designer inilah dapat menentukan atau merancang suatu window aplikasi, dan dapat juga menentukan tampilan aplikasi tersebut. Cara berinteraksi dengan form designer adalah dengan memilih komponen dari component palette dan meletakannya di dalam form. Setelah ada komponen didalam formdapat diatur posisinya atau mengubah ukurannya dengan menggunakan mouse. Form designer dapat diubah tamplan dan perilaku komponen dengan menggunakan object inspector dan code editor. 2.4.1.3. Object Inspector Dengan object inspector dapat diubah properti dari setiap item dengan mudah dan dapat mengontrol tindakan yang diambil jika terjadi event. Object inspector terdiri dari 2 tab, yaitu : Tab properties, untuk melihat dan merubah properti setiap item misalnya : Font, Color. Tab events berisi event-event yang dapat direspon oleh sebuah objek misalnya : OnClose. 2.4.1.4. Code Editor Code editor atau jendela penyuntingan dipakai untuk menuliskan programprogram Delphi. Jendela penyuntingan ini mempunyai fasilitas-fasilitas highlight yang memudahkan untuk menemukan kesalahan program 2.4.1.5. Code Explorer 14
Coode explorerr digunakann untuk meemudahkan navigasi dii dalam filee unit. Code expllorer juga berisi b strukktur pohon yang y menam mpilkan semua type, class, property, method, vaariable globbal dan rutiin global yang didefinnisikan di dalam d unit. Dan juga j untuk menampilkkan semua unit u yang dippakai pada kklausa uses. 2.4.2.
Viisual Comp ponent Libaary Visual Compoonent Libraary (VCL) adalah a hierarki dari cllass(object) yang
ditulis deengan objeect pascal dan tergaabung dalaam IDE D Delphi. Deengan Componennt Palette dan d Objectt Inspector dapat mennempatkan kkomponen VCL pada form m dan memanipulas m si propertin nya tanpa menuliskaan program mnya. Komponenn Delphi dapat berssifat visual dan nonnvisual. Koomponen visual v dibangun untuk antarrmuka denggan pemakaai. Pada saaat pembuataan aplikasi kedua k jenis kom mponen terseebut dapat terlihat, tetapi komponnen nonvisuual tidak teerlihat pada saat aplikasi dijalankan. Pada P tab sttandard berrisi komponnen yang umum u digunakann, diantaranyya adalah : 1.
Komponnen PopUpM Menu
:
untuk membuat meenu popup yang
akan muuncul jika mengklik m tom mbol kanann dari mousee. Komponeen ini bersifaat nonvisuall. 2.
Komponnen Label
: dipakaai untuk menempatkann teks di dalam d
form. Koomponen inni bersifat viisual.
3.
: dipakai unntuk menerrima suatu baris
Komponnen Edit
teks yanng merupakkan masukaan. Komponnen ini jugga dapat diipakai untuk menampilkkan teks. Koomponen inii bersifat visual. 4.
Komponnen Memo
: dipakaii untuk mem masukkan aatau menam mpilan
beberaapa baris tekks. Komponnen ini bersiifat visual. 5.
Komponnen Button
: dipakaai untuk membuat m buutton yang akan
dipakai untuk mem milih optio on didalam m aplikasi. Komponen n ini bersifaat visual. 15
6.
Komponnen Panel
upakan conntainer jugga, panel dapat : meru
dipakai untuk meembuat staatus bar, toool bar daan tool paalette. Komponen ini berrsifat visuall.
2.4.3.
Peemrogramaan Di Delph hi Seperti halnyya pada bahasa b pem mrogramann Pascal, struktur bahasa
pemrogram man Delphii hampir sam ma dengan penulisan p b bahasa pemrrograman Pascal. Program yang y terstukktur ini dibuat pada co ode editor pada p Delphi yang berffungsi untuk menngontrol alggoritma darii aplikasi yaang dibuat. 2.4.3.1. Konstanta K D Variabble Dan Didalam proogram seriing digunaakan nilai konstan. Nilai ko onstan merupakann nilai yaang tidak dapat diub bah pada saat progrram diekseekusi. Sedangkann variable adalah a nilai yang dapat diubah padda saat progrram dijalan nkan. Contoh pendeklara asian konstanta dan n varibale e : Const W : word w = SizeOf(Byte); Var I
: Intager = 8;
C
: Char;
2.4.3.2. Tipe Data D Integerr 1. Tipe Data Dipakai untuk u menyyatakan bilangan yanng tidak m mempunyai nilai desimaal. Tipe dataa integer terrdiri dari by yte, word, sm mallint, inteeger, longin nt. 2. Tipe Data D Real Sedangkann tipe data real digunaakan untuk menyatakaan bilangan yang mempunyai desim mal. Tipe daata integer terdiri dari real, r single, double. 3. Tipe Data D Booleaan 16
Dipakai untuk menyatakan nilai logik. Variable tipe ini hanya dapat berisi TRUE atau FALSE. 4. Tipe Data Array Array merupakan sebuah variable tunggal yang dipakai untuk sekumpulan data. Contoh pendeklarasian array : Type ArNilai = array[1..5] of real
Pendeklarasian diatas adalah membuat sebuah tipe yang bernama ArNilai yang merupakan array dengan 5 elemen bertipe real. 5. Tipe Data Record Sama seperti array, record dipakai untuk menyimpan sekumpulan data yang berhubungan. Elemen-elemen record dapat mempunyai tipe yang sama atau tipe yang berlainan. Contoh pendeklarasian record : Type DataMhas = record Npm
: string[8];
Nama
: string[20];
Nilai
: real;
End;
Tipe DataMhs mempunyai 3 elemen dengan tipe yang berbeda. 2.4.3.3. Pernyataan kondisi Pernyataan
kondisional
digunakan
untuk
mengambil
keputusan
berdasarkan masukkan yang ada, yang dilakukan dengan eksekusi kondisonal. Pernyataan If-Then-Else mempunyai kondisi (syarat). Jika syarat benar maka dikerjakan pernyataan-pernyataan dibagian Then, sedangkan jika syarat salah , dikerjakan pernyataan-pernyataan dibagian Else. Bentuk umumnya adalah : If expresi Then Begin Expresi_1; Expresi_2; Expresi_n; End Else Expresi;
2.4.3.4. Perulangan 17
Digunakan untuk menjalankan sekumpulan instruksi berulang-ulang sampai kondisi tertentu. Perulangan For…Do merupakan perulangan yang paling sederhana. Perulangan ini dipakai jika kita mengetahui berapa kali perulangan dilakukan. Bentuk umumnya adalah For Counter:= 1 to 10 Do Writeln(‘Delphi’);
Pendeklarasian perulangan diatas variabel Counter diinisialisasi dengan satu, pernyataan setelah Do dikerjakan sekali, Counter ditambah satu, jika Counter lebih besar dari nilai akhir (10) perulangan selesai dan dikerjakan pernyataanpernyataan setelah loop For…Do, jika Counter tidak lebih besar dari nilai akhir (10) pernyataan setelah Do akan dikerjakan lagi.
18
Bab III Implementasi Simulasi MD 3.1. Transformasi Teori Simulasi MD terhadap Algoritma Program Implementasi teori MD terhadap aplikasi yang penulis buat, merupakan ringkasan dari berbagai penjelasan dan pembahasan yang menjelaskan mengenai teori tersebut. Tentunya ada beberapa bagian yang disederhanakan, sehingga lebih mudah untuk dimengerti dan diimplementasikan ke dalam algoritma program. Tetapi hal tersebut tidak mengurangi keberadaan aplikasi tersebut sebagai suatu simulasi yang representatif. Pada bab sebelumnya telah dijelaskan mengenai langkah-langkah simulasi MD secara teoritis. Pada bagian ini akan dijelaskan mengenai transformasi dari teori tersebut dalam bentuk algoritma program. Secara garis besar, langkah-langkah simulasi MD yang terdapat pada program terdiri dari dua bagian utama yaitu bagian inisialisasi dan proses simulasi. Bagian inisialisasi terbagi lagi menjadi tiga bagian yaitu inisialisasi parameter yang dibutuhkan, penyebaran posisi awal partikel dengan metoda Lattice, serta penormalisasian nilai awal kecepatan dengan menggunakan metode Maxwell-Boltzmann. Sedangkan bagian proses simulasi terdiri dari beberapa bagian lagi yaitu : 1. Memperbaharui nilai posisi dari setiap partikel pada setiap langkah waktu dasar (H); 2. Mengaplikasikan Periodic Boundary Condition (PBC) terhadap nilai posisi dari setiap partikel; 3. Menghitung nilai kecepatan parsial masing-masng partikel; 4. Menghitung nilai gaya yang terdapat pada setiiap partikel; 5. Menghitung nilai kecepatan masing-masng partikel; 6. Menghitung nilai energi kinetik pada satu kali iterasi; 7. Menghitung nilai kecepatan rata-rata; 18
19 8. Memperbaharui nilai kecepatan pada setiap kali IRep selama Clock
3.2. Proses Inisialisasi Untuk lebih mempermudah pengorganisasian variabel serta data yang ada, diperlukan suatu tipe data yang baik. Setiap partikel memiliki tiga properti arah yaitu X, Y, dan Z. Pada setiap arah tersebut terdapat tiga properti lagi yaitu Pos untuk posisi, Velo untuk kecepatan, dan Force untuk gaya. Pendeklarasiannya pada program adalah sebagai berikut : TPos Pos Velo Force End;
= : : :
record Real; Real; Real;
TPart X,Y,Z End;
= record : TPos;
Seperti telah disebutkan sebelumnya bahwa bagian ini terdiri dari tiga sub bagian, berikut penjelasan mengenai sub-sub bagian tersebut. Selanjutnya proses inisialisasi pada program baru bisa dilakukan. 3.2.1.
Inisalisasi Parameter Ada sejumlah parameter utama yang digunakan pada program ini yang
merupakan bentuk transformasi dari parameter simulasi MD yang sebenarnya. Parameter-parameter tersebut adalah seperti berikut dibawah ini : 1. NPart
: jumlah partikel dalam simulasi (kelipatan 4)
2. Side
: panjang sisi dari kubus dalam satuan sigma
3. TRef
: nilai penurunan temperatur
4. RCOff
: pemotongan potensial dalam satuan sigma
20 5. H
: langkah waktu dasar
6. IRep
: periode perbaikan kecepatan
7. IStop
: kondisi akhir perbaikan kecepatan
8. TimeMX
: jumlah iterasi MD
9. ISeed
: bibit nilai acak semu
Selain parameter-parameter diatas ada beberapa parameter lain yang merupakan kontrol atau syarat agar hasil simulasi MD didapat dengan akurat.Parameter kontrol ini diberikan nilai awal yang mencerminkan karakteristik aom Argon, yang merupakan atom yang digunakan penulis sebgai contoh untuk penulisan ini. Parameter-parameter tersebut adalah : A SideH HSQ HSQ2 NPartM RCOffS TScale VAVER
:= := := := := := := :=
Side/4; Side/2; SQR(H); HSQ/2; Npart-1; SQR(RCOff); 16/(NPart-1); 1.13*SQRT(TRef/24);
Variable A adalah sisi dibagi 4 atau seperempat sisi, SideH adalah sisi dibagi 2 atau setengah sisi, HSQ adalah kuadrat dari waktu langkah, HSQ2 adalah setengah kuadrat waktu langkah, NPartM adalah jumlah partikel yang diamati dikurang satu, RCoffs adalah kuadrat dari nilai pemotongan energi potensial, TScale adalah waktu sebelum perhitungan yang nilai sesungguhnya akan didapat jika dikalikan dengan energi kinetik, dan VAVER merupakan variable kontrol untuk mengontrol penurunan suhu pada simulasi ini. Bentuk pendeklarasian variable-variable pada program selengkapnya tercakup dalam prosedur DefaultVal dan MDSInit yang dapat dilihat pada halaman lampiran. 3.2.2.
Inisialisasi Posisi Partikel dengan menggunakan metode Lattice Langkah berikutnya adalah penyebaran nilai posisi partikel dengan
menggunakan metode Lattice. Dengan menggunakan metode tersebut setiap partikel
21 akan tersebar di dalam kotak pembatas secara teratur. Adapun implementasi metode tersebut dalam program seperti terlihat di bawah ini : var Index,LG,i,j,k : Integer; begin Index := 0; for LG := 0 to 1 do for i := 0 to 3 do for j := 0 to 3 do for k := 0 to 3 do begin Inc(Index); Part[Index].X.Pos := i*A+LG*A*0.5; Part[Index].Y.Pos := j*A+LG*A*0.5; Part[Index].Z.Pos := k*A; end;
Kode program diatas merupakan penyebaran partikel untuk sebagian jumlah partikel dari partikel yang ada. Sedangkan kode program dibawah ini untuk melanjutkan penyebaran partikel berikutnya dengan ukuran kotak pembatas yang masih sama. for LG := 2 to 3 do for i := 0 to 3 do for j := 0 to 3 do for k := 0 to 3 do begin Inc(Index); Part[Index].X.Pos := i*A+(2-LG)*A*0.5; Part[Index].Y.Pos := j*A+(LG-1)*A*0.5; Part[Index].Z.Pos := k*A+A*0.5; end; end;
Pada kode program di atas terlihat bahwa penyebaran nilai posisi setiap partikel tdak akan melebihi panjang sisi kotak pembatas yang telah ditentukan. Bentuk program selengkapnya tercakup dalam prosedur Lattice yang dapat dilihat pada halaman lampiran.
22 3.2.3.
Normalisasi Kecepatan partikel dengan metode Maxwell-Boltzmann Telah dijelaskan sebelumnya bahwa Maxwell digunakan untuk menormalisasi
kecepatan sebelum memulai perhitungan simulasi MD. Cara penulisannya pada program adalah; RandSeed := ISeed; Counter := 1; while (Counter<=NPart) do begin Boltz(Part[Counter].X.Velo,Part[Counter+1].X.Velo); Boltz(Part[Counter].Y.Velo,Part[Counter+1].Y.Velo); Boltz(Part[Counter].Z.Velo,Part[Counter+1].Z.Velo); Inc(Counter,2); end;
RandSeed mempunyai nilai sama dengan ISeed yang merupakan benih untuk merandom dengan psedo random nilai ISeed ini akan menghasilkan nilai yang merupakan karakteristik dari atom argon. Kemudian dengan nilai random yang telah terbentuk, digunakan untuk memberi nilai kecepatan pada setiap posisi. Disini seperti telah dikemukakan bahwa setiap posisi mempunyai 3 elemen yaitu elemen X, Y, dan Z, pemberian nilai kecepatan pada elemen-elemen tersebut dengan memanggil procedure Boltz(velo1,velo2) yang berisi : procedure Boltz(var Velo1: Real;var Velo2: Real); var S,R, v1,v2 : Real; begin repeat v1 := 2*Random-1; v2 := 2*Random-1; S := SQR(v1)+SQR(v2); until (S<1); R := -2*Ln(S)/S; Velo1 := v1*SQRT(R); Velo2 := v2*SQRT(R); end;
Pada procedure Boltz(velo1,velo2) ini nilai kecepatan pertama dan kedua didapat dari 2 kali random di kurang 1. Variable S merupakan resultan dari kedua
23 kecepatan tersebut. Nilai kecepatan tersebut terus dirandom sampai mendapatkan resultan yang lebih kecil dari 1. Dan setelah mendapatkan nilai resultan yang kurang dari 1 kemudian hitung R, dengan mengalikan ln(S) dengan 2 kemudian dibagi dengan S. Dari hasil yang didapat kembalikan nilai kecepatan didalam procedure Boltz ke procedure Maxwell, dengan kecepatan pertama dikali akar dari R dan kecepatan kedua juga dikali dengan akar dari R. Setelah mendapatkan kecepatan disetiap posisi dengan procedure Boltz tadi, ubah lagi kecepatannya untuk mendapatkan energi kinetik disetiap arah. Cara penulisannya pada program adalah : EKIN := 0; SP := 0; for i := 1 to NPart do SP := SP+Part[i].X.Velo; SP := SP/NPart; for i := 1 to NPart do begin Part[i].X.Velo := Part[i].X.Velo-SP; EKIN := EKIN+SQR(Part[i].X.Velo); end;
Pertama kali beri nilai awal energi kinetik sama dengan nol, namun hanya didefinisikan sekali, dan juga beri nilai linier momentum arah X sama dengan nol. Hitung nilai linier momentum arah X dengan menjumlahkan selurah kecepatan pada arah X, kemudian bagi nilai linier momentum tersebut dengan banyaknya jumlah partikel. Ubah nilai kecepatan pada arah X dengan mengurangi kecepatan dengan nilai linier momentum untuk setiap partikel. Dan hitung energi kinetik pada arah X, dengan menjumlahkan energi kinetik dengan kuadrat kecepatan pada arah X disetiap partikel. Hal yang sama juga dilakukan untuk arah Y dan Z untuk mendapatkan energi kinetik keseluruhan. TS := TScale*EKIN; SC := SQRT(TRef/TS);
Kemudian untuk mendapatkan temperatur sebelum perhitungan adalah dengan mengalikan TScale dengan energi kinetik. Dan untuk mendapatkan skala faktornya adalah dengan mengkuadratkan pengurangan temperatur dibagi temparatur.
24 SC := SC*H; for i := 1 to NPart do begin Part[i].X.Velo := Part[i].X.Velo*SC; Part[i].Y.Velo := Part[i].Y.Velo*SC; Part[i].Z.Velo := Part[i].Z.Velo*SC; end;
Ubah lagi kecepatan disetiap arah dengan mengalikannya dengan skala faktor temperatur untuk semua partikel. Setelah selesai menormalisasikan kecepatan dengan procedure Maxwell baru disini nilai Clock atau iterasi bertambah.
3.3. Proses Simulasi MD Bagian ini merupakan proses simulasi MD yang sebenarnya, sesudah selesai melewati bagian inisialisasi. Dibagian ini pula, terdapat beberapa proses yang dilakukan untuk setiap kali waktu iterasi. Proses-proses simulasi MD tersebut sebagai berikut. 3.3.1.
Penentuan nilai posisi pada langkah waktu dasar (H) Pertama kali yang dilakukan adalah menempatkan posisi awal partikel, yang
dituliskan pada program sebagai berikut : for i := 1 to NPart do with Part[i] do begin X.Pos := X.Pos+X.Velo+X.Force; Y.Pos := Y.Pos+Y.Velo+Y.Force; Z.Pos := Z.Pos+Z.Velo+Z.Force; end;
Pada kode program di atas memberikan nilai posisi awal setiap patikel dengan menjumlah nilai posisi yang terakhir kali didapat ditambah dengan nilai kecepatan, dan ditambah dengan nilai gaya untuk setiap arah X, Y, Z.
25 3.3.2.
Pengaplikasian PBC terhadap nilai posisi Setelah didapat posisi pada langkah waktu dasar, kemudian sebar kembali
posisi-posisi partikel tersebut kedalam box, yang mempunyai panjang sisi yang sama panjangnya. implementasinya pada program adalah : for i := 1 to NPart do with Part[0+i] do begin if (X.Pos<0) then X.Pos := if (X.Pos>Side) then X.Pos if (Y.Pos<0) then Y.Pos := if (Y.Pos>Side) then Y.Pos if (Z.Pos<0) then Z.Pos := if (Z.Pos>Side) then Z.Pos end;
X.Pos+Side; := X.Pos-Side; Y.Pos+Side; := Y.Pos-Side; Z.Pos+Side; := Z.Pos-Side;
Jika nilainya kurang dari nol atau bernilai negatif, kembalikan ke dalam box dengan ditambah panjang sisi box. Dan jika nilainya lebih besar dari sisi box, kembalikan kedalam box dengan dikurangi panjang sisi box. Pengaplikasian pada kotak pembatas ini dilakukan untuk setiap partikel dan setiap arah X, Y dan Z 3.3.3.
Perhitungan nilai kecepatan parsial Pada Bagian ini, sesudah berhasil menentukan posisi dengan baik, maka dapat
dihitung kecepatan parsial setiap partikel, disetiap posisi untuk arah X, Y, dan Z . Cara penulisannya pada program adalah sebagai berikut : for i := 1 to NPart do with Part[i] do begin X.Velo := X.Velo+X.Force; Y.Velo := Y.Velo+Y.Force; Z.Velo := Z.Velo+Z.Force; end;
kecepatan sebagian ini dihitung dengan menjumlahkan kecepatan setiap posisi (X, Y, Z) dengan gaya sebanyak jumlah partikel yang ada. 3.3.4.
Perhitungan nilai gaya Implementasi untuk menghitung gaya pada setiap partikel adalah sebagai
berikut :
26 VIR := 0; EPot := 0;
Merupakan kode untuk pemberian nilai awal untuk kecepatan di dalam partikel sama dengan nol dan energi potensial sama dengan nol. for i := 1 to NPart do begin Part[i].X.Force := 0; Part[i].Y.Force := 0; Part[i].Z.Force := 0; end;
setelah selesai memberi nilai awal kode program diatas adalah untuk menginisialisasi kembali gaya disetiap arah sama dengan nol, sebanyak jumlah partikel yang ada. Dibawah ini adalah penulisan kode program untuk mendapatkan nilai posisi pada setiap partikel. Sehingga dapat ditentukan perubahan posisi setiap partikel tersebut apakah memenuhi syarat atau tidak, jika tidak memenuhi syarat maka dilakukan beberapa penugasan seperti mengembalikan posisi ke dalam box, dan menormalisasi potensial yang terjadi antar atom dengan menggunakan metode Lennard-Jones. XX := Part[i].X.Pos-Part[j].X.Pos; YY := Part[i].Y.Pos-Part[j].Y.Pos; ZZ := Part[i].Z.Pos-Part[j].Z.Pos;
Diatas merupakan cara penulisan program untuk mendapatkan beda posisi setiap partikel dengan partikel sebelahnya untuk setiap arah. Hasil yang didapat dieliminasi untuk menetapkan partikel tetap pada box tersebut, penulisannya adalah sebagai berikut : if (XX<(-1*SideH)) then XX := XX+Side; if (XX>SideH) then XX := XX-Side;
Jika beda posisi partikel satu dengan partikel di sebelahnya bernilai negative yang berarti keluar sebelah kiri box, tambahkan dengan panjang sisi box. Dan jika nilainya lebih besar dari panjang sisi box positif yang berarti keluar ke sebelah kanan
27 box, kurangi dengan panjang sisi box. Sama halnya dengan pendeklarasian untuk arah Y dan Z Seperti terlihat dibawah ini : if if if if
(YY<(-1*SideH)) (YY>SideH) then (ZZ<(-1*SideH)) (ZZ>SideH) then
then YY := YY+Side; YY := YY-Side; then ZZ := ZZ+Side; ZZ := ZZ-Side;
Setelah selesai memeriksa apakah beda posisi partikel yang bersebelahan negative atau posistif dan mengembalikannya kedalam box, kemudian cari resultannya. Dituliskan pada program sebagai berikut: RD := SQR(XX)+SQR(YY)+SQR(ZZ);
Dari hasil nilai resultan yang telah didapat, lalu periksa resultan apakah nilainya lebih besar dari nilai pemotongan potensial (Cut-Off). Jika lebih besar lanjutkan untuk memeriksa partikel yang bersebelahan selanjutnya. Jika tidak memenuhi syarat tersebut normalisasi potential antar partikel dengan metode Lennard-Jones, cara penugasannya pada program adalah : if not (RD>RCOffS) then EPot := EPot+Power(RD,-6)-Power(RD,-3); R148 := Power(RD,-7)-Power(RD,-4)/2; VIR := VIR - RD*R148;
Disini energi potensial dijumlahkan dengan resultan pangkat -6 dikurangi dengan resultan pangkat -3, resultannya didapat dengan mengurangi resultan pangkat -7 dengan resultan pangkat -2 dibagi 2. kemudian hitung kembali gaya pada setiap partikel disetiap arah. Dengan cara sebagai berikut : KX := XX*R148; Part[i].X.Force := Part[i].X.Force+KX; Part[j].X.Force := Part[j].X.Force-KX;
Variable KX berisi nilai selisih partikel yang bersebelahan di arah X di kali dengan resultan gaya pada metode Lennard-Jones. Kemudian hitung kembali gaya dengan menjumlahkan nilai gaya lama pada arah X dengan nilai KX, dan hitung nilai gaya partikel disebelahnya dengan mengurangi gaya lama pada arah X dengan KX.
28 Begitu pula untuk menghitung gaya pada arah Y dan Z yang cara penulisannya adalah sebagai berikut : KY := YY*R148; Part[i].Y.Force Part[j].Y.Force KZ := ZZ*R148; Part[i].Z.Force Part[j].Z.Force
:= Part[i].Y.Force+KY; := Part[j].Y.Force-KY; := Part[i].Z.Force+KZ; := Part[j].Z.Force-KZ;
Lakukan semua pemeriksaan interksi antar partikel ini sampai semua partikel telah diperiksa. Setelah seluruh partikel diperiksa beda potensialnya dengan metode LennardJones. Kemudian dapat dihitung kembali gaya setiap partikel untuk setiap arah, yang cara penulisannya pada program adalah sebagai berikut : for i := 1 to NPart do with Part[i] do begin X.Force := X.Force*HSQ2; Y.Force := Y.Force*HSQ2; Z.Force := Z.Force*HSQ2; end;
Nilai setiap gaya yang dihasilkan dengan menggunakan normalisasi LennardJones dikalikan dengan HSQ2 untuk mendapatkan nilai gaya kembali. 3.3.5.
Perhitungan nilai kecepatan Setelah menghitung gaya antar partikel dengan menggunakan metode
Lennard-Jones. Hitung kembali kecepatan setiap partikel dengan menjumlahkan kecepatan dengan gaya yang terakhir kali didapat. Implementasinya pada kode program adalah sebagai berikut : for i := 1 to NPart do with Part[i] do begin X.Velo := X.Velo+X.Force; Y.Velo := Y.Velo+Y.Force; Z.Velo := Z.Velo+Z.Force; end;
29 3.3.6.
Perhitungan nilai energi kinetik Setelah mendapatkan kecepatan baru, kemudian nilai energi kinetik
diperbaharui kembali dengan menjumlahkan resultan kecepatan setiap partikel dibagi dengan kuadrat waktu langkah. Cara penulisannya pada program adalah sebagai berikut : EKIN := 0; for i := 1 to NPart do with Part[i] do EKIN := EKIN+SQR(X.Velo)+SQR(Y.Velo)+SQR(Z.Velo); EKIN := EKIN/HSQ;
3.3.7.
Perhitungan nilai kecepatan rata-rata Pada bagian ini sebelum dimulai prosesnya terlebih dahulu harus memberikan
nilai awal untuk variable kecepatan dan count, inplementasinya pada kode program dalah sebegai berikut : Vel Count
:= 0; := 0;
Setelah selesai menginisialisasi nilai kecepatan dengan sama dengan nol, dan nilai count sama dengan nol. Nilai count berfungsi untuk menghitung banyaknya iterasi yang telah dilakukan. Setelah selesai dengan inisialisasi tadi, periksa seluruh partikel. Kuadrat kecepatan setiap arah X, Y, Z pindahkan ke variable VX, VY, VZ. Kemudian hitung resultan kecepatannya dan hasilnya dibagi dengan waktu langkah (SQ), lalu periksa hasil pembagian resultan kecepatan dengan waktu langkah dengan VAVER, jika lebih besar tambah satu junlah count jika tidak nilai kecepatan sama dengan nilai kecepatan sebelumnya dijumlahkan dengan hasil bagi resultan kecepatan dengan waktu langkah (SQ). Cara mendapatkan nilai tersebut pada program adalah sebagai berikut: for i := 1 to NPart do with Part[i] do begin VX := SQR(X.Velo); VY := SQR(Y.Velo); VZ := SQR(Z.Velo); SQ := SQRT(VX+VY+VZ);
30 SQT := SQ/H; if (SQT>VAVER) then Inc(Count); Vel := Vel+SQ; end;
Setelah itu baru didapat kecepatan rata-rata dengan membagi nilai kecepatan dengan waktu langkah, yang penugasannya dengan cara : Vel := Vel/H;
3.3.8.
Perbaikan nilai kecepatan secara periodik Jika jumlah waktu iterasi (Clock) masih lebih kecil dari nilai pemberhentian
perhitungan kecepatan (IStop), dan sisa hasil bagi waktu iterasi (Clock) dengan perhitungan kecepatan setiap langkah (IRep) sama dengan nol kemudian hitung kembali skala temperatur dan faktor skala. Cara penugasannya pada program : if (Clock<=IStop) and (Clock mod IRep = 0) then TS := TScale*EKIN; SC := SQRT(TRef/TS);
Dan hitung kembali kecepatan untuk setiap partikel dan energi kinetiknya dari temperatur dibagi dengan temperatur sebelum perhitungan. Untuk mendapatkan nilai tersebut, maka diprogram ditulis : for i := 1 to NPart do with Part[i] do begin X.Velo := X.Velo*SC; Y.Velo := Y.Velo*SC; Z.Velo := Z.Velo*SC; end; EKIN := TRef/TScale;
3.3.9.
Perhitungan besaran-besaran lainnya Bagian ini merupakan bagian terakhir dari perhitungan simulasi MD untuk
satu kali waktu iterasi. Akan didapat nilai-nilai energi kinetik, energi potensial, energi total, temperatur, tekanan, kecepatan dan RP. Pada Program ditulis sebagai berikut : EK EPot ETot Temp Pres
:= := := := :=
24*EKIN; 4*EPot; EK+EPot; TScale*EKIN; Den*16*(EKIN-VIR)/NPart;
31 Vel RP
:= Vel/NPart; := (Count/NPart)*100;
3.4. Visualisasi Simulasi MD pada Aplikasi Pada implementasi program simulasi MD diatas, dihasilkan nilai data-data dalam bentuk rangkaian nilai-nilai numerik sesuai dengan jumlah iterasi yang dijalankan. Tentunya data-data numerik tadi sangatlah sulit untuk dicerna apabila disajikan begitu saja. Untuk itu agar data-data yang dihasilkan dari simulasi MD tersebut dapat tervisualisasikan dengan baik, maka pada aplikasi ini disediakan beberapa bentuk visualisasi yang berbeda yaitu dalam bentuk chart, tabel maupun kotak pengamatan virtual. Lebih lanjut mengenai bentuk visualisasi tersebut akan diuraikan di bawah ini. 3.4.1.
Visualisasi dalam bentuk chart Chart yang terbentuk ketika sejumlah iterasi dijalankan adalah chart untuk
memvisualisasikan perubahan energi kinetik, energi potensial, energi total, serta kecepatan dari setiap iterasi. Kode program untuk menampilkan chart, dapat dilihat pada prosedur dibawah ini : procedure UpdateChart(vEK, vEPot, vETot, vVel: Real); begin with MDSFrm do begin SCKinetic.AddXY(Clock,vEK); SCPotential.AddXY(Clock,vEPot); SCTotal.AddXY(Clock,vETot); SCVelocities.AddXY(Clock,vVel); MDSChart.Update; end; end;
Nilai variable vEK, vEPot, vETot, vVel didapat dari variable-variable nilai energi kinetik, energi potensial ,energi total dan kecepatan pada saat menjalankan program proses simulasi MD. Prosedur ini dipanggil pada setiap kali waktu iterasi.
32 3.4.2.
Visualisasi dalam bentuk kotak pengamatan virtual Sesuai dengan inisialisasi awal dan ketentuan dari simulasi MD ini, bahwa
penyebaran posisi-posisi atom dibatasi hanya dalam batasan tertentu. Menggunakan batasan tertentu agar perubahan-perubahan yang terjadi mudah untuk diamati. Batasan penyebaran posisi atom yang digunakan pada simulasi ini adalah, membuat kotak atau box khayalan. Di dalam box inilah atom-atom disebar dan dapat diamati perubahannya. Disini sistem yang digunakan untuk menentukan posisi atom adalah sistem 3 dimensi, dimana setiap posisi atomnya mempunyai 3 arah X, Y dan Z. Namun disini tidak dibahas untuk menampilkannya benar-benar terlihat seperti sistem 3 dimensi pada layar komputer yang hanya memiliki 2 dimensi. Karena permasalahan tersebutlah, digunakan suatu solusi. Di mana setiap atom tetap memiliki posisi dengan 3 arah X, Y dan Z, namun dipetakan ke layar komputer dengan gambar 2 dimensi. Diumpamakan melihat box, yang dibagi menjadi beberapa pengamatan. Pengamatan yang terlihat dari depan, atas dan samping kanan. Jika posisi atom sebenarnya digambarkan sebagai berikut : Y
Z
X Gambar 3.1 Kedudukan Atom Di dalam Box
Sedangkan untuk membuat kotak pengamatan pada aplikasi ini, di umpamakan dilihat dari 3 sisi, yaitu sisi depan, sisi atas dan sisi kanan seperti terlihat pada gambar dibawah ini :
33
Y
Y
Y
Z
X Tampak Depan
Z
Z
X Tampak Atas Gambar 3.2. Pengamatan Box Dua Dimensi
X Tampak Kanan
Pada gambar diatas, bagian yang diarsir adalah bagian yang akan diamati dimana partikel-partikel yang ada didalamnya akan ditampilkan pada kotak pengamatan virtual. Pada aplikasi bagian yang diarsir, disebut dengan slice, dan besar dari slice dapat ditentukan. Untuk membuat kotak pengamatan virtual pada aplikasi ini digunakan objek panel, sedangkan untuk menggambarkan partikel digunakan objek shape. Panjang dari kotak simulasi untuk atom Argon adalah 6,75284 sigma, tentukan diperlukan pemetaan skala dari ukuran sebenarnya kedalam ukuran yang memungkinkan untuk ditampilkan pada layar komputer. Dikarenakan keadaan tersebut maka ukuran panel harus memiliki skala perbandingan tetap terhadap ukuran kotak pembatas yang sebenarnya. Skala perbandingan tersebut adalah 1 : 25 pixel, sehingga ukuran panel setelah dibulatkan adalah 169 pixel. Pada layar komputer ujung kiri atas panel bernilai 0 semakin besar nilainya kearah kanan dan bawah, seperti yang akan digambarkan sebagai berikut :
34
Untuk mengubah koordinat layar menjadi koordinat pengamatan diperlukan pemetaan posisi cukup cermat. Untuk itu digunakan rumus berikut :
Xkp Round Xlk * 25 Ykp 169 Round Ylp * 25 Sedangkan untuk menggambarkan posisi partikel pada kotak pengamatan partikel, diperlukan panjang slice. Panjang slice menentukan tampak atau tidaknya suatu partikel pada kotak pengamatan virtual tersebut. Partikel akan tampak atau tidak jika posisinya memenuhi kondisi berikut : (posisi > slicemin) and (posisi < slicemax)
3.4.3.
Visualisasi data dalam bentuk tabel Data-data numerik yang dihasilkan dari proses simulasi MD, dapat
ditampilkan dalam bentuk tabular. Untuk menampilkan dalam bentuk tabular, Xmax
0
Ymax
Ymax
0
a
Xmax
b
Gambar 3.3. a. Koordinat layar komputer; b. Koordinat kotak pengamatan
diperlukan struktur tabel untuk menampung data-data tersebut. Struktur tabel tersebut adalah sebagai berikut:
35 Tabel 3.1. Struktur Tabel Utama Nama Field IdIter IterNo EK EP ET Press Vel Temp Rp
Tipe Data Number Integer String String String String String String String
Tabel 3.2. Struktur Tabel Rinci Nama Field IdDetail IterNo IdPart X Y Z VX VY VZ FX FY FZ
Tipe Data Number Integer Integer String String String String String String String String String
Dari pendefinisian diatas kemudian didapat bahwa nilai data dari field pada tabel 1 dan tabel 2 didapat dari nilai data numerik hasil proses simulasi MD pada setiap waktu iterasi. Energi kinetik, energi potensial, energi total, tekanan, kecepatan, temperatur dan nilai penururan potensial daidapat setelah menjalankan satu kali waktu iterasi. Sedangkan setiap iterasi, setiap partikelnya memiliki posisi, kecepatan dan gaya pada setiap arah X, Y dan Z. Karena hal tersebut, harus dibuat sedemikian hingga agar visualisasi dalam bentuk tabel ini dapat di sajikan dengan representatif dibuat query untuk menampilkan nilai data posisi, kecepatan dan gaya pada setiap arah X, Y dan z untuk setiap kali iterasi. Pebdefinisian querynya adalah sebagai berikut : SELECT Rinci.IdPart, Rinci.X, Rinci.Y, Rinci.Z, Rinci.VY, Rinci.VZ, Rinci.FX, Rinci.FY, Rinci.FZ FROM "Rinci.db" Rinci, "Utama.db" Utama WHERE Rinci.IterNo=:NoIter
Rinci.VX,
36 GROUP BY Rinci.IdPart, Rinci.X, Rinci.Y, Rinci.Z, Rinci.VX, Rinci.VY, Rinci.VZ, Rinci.FX, Rinci.FY, Rinci.FZ ORDER BY Rinci.IdPart
Pendefinisian query diatas maksudnya adalah tampilkan partikel ke berapa (IdPart), nilai data X, nilai data Y, nilai data Z, nilai data kecepatan pada arah X (VX), nilai data kecepatan pada arah Y (VY), nilai data kecepatan pada arah Z (VZ), nilai data gaya pada arah X (FX), nilai data gaya pada arah Y (FY), dan nilai data gaya pada arah Z (FX) dari tabel 2 yang disimpan pada file “Rinci.db”, dimana jika nilai iterasi tabel 1 sama dengan nilai iterasi pada tabel 1 yang disimpan pada file “Utama.db”. perintah group by digunakan untuk mengelompokkan data, sedangkan perintah order by adalah mengurutkan berdasarkan suatu field. Jadi ketika query dijalankan untuk menampilkan nilai data untuk setiap fieldnya sebanyak jumlah partikel yang ada pada iterasi waktu yang ditunjuk.
3.5. Perancangan Input Output Visualisasi
simulasi
MD,
ini
dibuat
dengan
menggunakan
bahasa
pemrograman Delphi. Untuk memudahkan pemasukkan data (entri data) atau melihat hasil dari perhitungan data, diperlukan perancangan form. Form disini digunakan sebagai tempat pemampungan komponen-komponen atau bahkan kumpulan form. Form juga sebagai interface langsung antara program dan pemakai, maka biasanya form ditekankan pada seni pengaturan dan penampilan layout. Yang bertujuan agar pemakai dapat lebih mengerti dan tidak bosan. Perancangan form tersebut dibagi menjadi beberapa bagian, seperti yang akan diuraikan dibahwa dibawah ini. 3.5.1.
Rancangan tampilan utama Form tampilan utama mempunyai beberapa komponen yaitu :
1. Komponen Button Start Simulation Dengan property name NmStart. Button ini adalah button awal untuk memulai perhitungan simulasi MD. Ketika diklik pada button ini, akan
37 menjalankan beberapa prosedur. Penulisannya pada program, untuk event on klik adalah : procedure TMDSFrm.ToolButton3Click(Sender: TObject); begin Refresh; MultiMDS; eAPStart.ReadOnly := False; eClock.ReadOnly := False; end;
Prosedur yang dijalankan adalah prosedur MultiMDS, didalam procedure ini dihitung simulasi MD sebanyak waktu iterasi yang ditentukan. 2. Komponen button Parameter Button ini mempunyai property name NmParameter. Jika button ini diklik maka akan membuat form Parameter, dan menampilkannya.
3. Komponen Button Tabel Ketika button table dijalankan akan membuka form MDTable yang akan dijelaskan perancangannya pada bagian rancangan MDTabel. 4. Komponen PageControl Pada Komponen yang mempunyai properti name PageControl, memiliki 2 page yaitu Chart sebagai page pertama dan Visualization sebagai page kedua. 5. Komponen memo OutLog Pada komponen memo ini berfungsi untuk menampilkan informasiinformasi perubahan-perubahan penurunan temperatur pada setiap waktu iterasi tertentu. 6. Komponen Status Bar Pada komponen sattus bar, juga berfungsi untuk menampilkan informasiinformasi singkat selama program dijalankan.
38 Rancangan form Tampilan utama seperti terlihat pada gambar berikut ini : TitleBar Parameter
Start Simulation
Chart
Visualization
Table
ToolBar
Client Area
OutLog
StatusBar Gambar 3.4. Rancangan Bagian Utama Program
3.5.2.
Rancangan Chart Bagian desain page Control yang pertama ini merupakan, bagian dari desain
form utama yaitu client area, yang berfungsi untuk membuat multiple page atau page yang lebih dari satu. Setiap page dapat diisi komponen-komponen yang diinginkan pada daerah klien setiap page. Page ini berfungsi untuk menampilkan perubahanperubahan energi kinetik, energi potensial, energi total dan kecepatan dalam bentuk grafik. Rancangan bagian page Chart adalah sebagai berikut :
39
LeftAxis
ChartTitle
ChartArea
MDStep Gambar 3.5. Rancangan MDChart
3.5.3.
Rancangan kotak pengamatan virtual Pada bagian ini merupakan page kedua dari page control. Pada page ini akan
dibuat visualisasi letak atom-atom suatu box dengan panjang sisi tertentu. Rancangan pagenya adalah sebagai berikut :
Page visualizations terdiri dari 3 buah panel untuk mevisualisasikan letak atom pada 3 sisi yaitu, sisi depan, sisi atas dan sisi kanan atau samping. Cara menvisualisasikannya kedalam panel tersebut akan dijelaskan kemudian. Pada page ini terdiri dari beberapa LabelEdit, yaitu : 1. Zmin, untuk memasukkan dan menampilkan nilai Zmin 2. Zmax, untuk memasukkan dan menampilkan nilai Zmax 3. Ymin, untuk memasukkan dan menampilkan nilai Ymin 4. Ymax, untuk memasukkan dan menampilkan nilai Ymax 5. Xmin, untuk memasukkan dan menampilkan nilai Xmin 6. Xmax, untuk memasukkan dan menampilkan nilai Xmax
40 7. Active Partikel, untuk menunjukkan partikel yang sedang diamati sebanyak 10 partikel. Dan untuk memasukkan nilai mulai dari partikel keberapa yang akan diamati. 8. Clock, untuk memasukkan dan menampilkan posisi-posisi atom pada waktu iterasi tertentu, pada ke 3 panel tersebut. Yang terakhir adalah navigation bar, yang berfungsi untuk melihat perubahan posisi-posisi atom selangkah demi selangkah. Front View
Zmin
Above View
Zmax
NavigationBar
Ymin
Ymax
Right View
Xmin
Active Particle
Gambar 3.6. Rancangan MDVisualization
Clock
Xmax
41 3.5.4.
Rancangan MDParameter Pada form ini berisi parameter-parameter yang mengidentifikasikan kesuatu
jenis atom tertentu yang diamati. Parameter-paremeter tersebut yang akan menentukan hasil dari simulasi MD. Rancangan form ini adalah sebagai berikut :
Particle Name : Number Of Particle : Density : Cube Sides Length : Reduced Temperature : Potential Cut-Off : Basic Time Steps : Velocities Scaling Step : Velocities Scaling Stop : Integrations Steps : Random Seed : Visual Boundary Default
Cancel
Apply
Gambar 3.7. Rancangan MDParameter
Pada form MDParameter ini terdapat banyak LabelEdit, yang berfungsi untuk memasukkan nilai yang nantinya akan berhubungan dengan program. LabelEdit yang ada pada form MDParameter yaitu, Particle Name, Number Of Particle, Density, Cube Sides Length, Reduced Temperature, Potential Cut-Off, Basic Time Steps, Velocities Scaling Step, Velocity Scaling Stop, Integrations Steps, Random Seed. Selain itu pada form ini terdapat beberapa komponen button yaitu : 1. Button Visual Boundary, yang jika dijalankan akan menampilkan form MDBoundary 2. Button Default, jika button ini dijalankan maka nilai-nilai pada LabelEdit akan kembali lagi pada nilai awal sebelum diubah. 3. Button Cancel, jka button ini dijalankan akan menutup form MDParameter tanpa merubah nilai yang ada pada LabelEdit. Jika button Apply dijalankan setelah
42 merubah parameter-parameter yang ada pada form, maka button Cancel akan berubah menjadi button Close. 4. Button Apply, berfungsi merubah nilai-nilai yang ada pada LabelEdit. Jika button ini dijalankan nilai pada LabelEdit yang telah diubah akan dikirim keprogram nilai yang telah berubah itulah yang dijadikan parameter untuk menjalankan simulasi. 3.5.5.
Rancangan MDBoundary Seperti telah dikemukan diatas form ini akan muncul jika menjalankan button
Visual Boundary pada form MDParameter. Rancangan form MDBoundary adalah sebagai berikut : Front [XY] Zmin
Zmax
Above [XZ] Ymin
Ymax
Right [YZ] Xmin
Max Side
Xmax
OK Cancel
Gambar 3.8. Rancangan MDBoundary
Sama halnya dengan form MDParameter, form MDBoundary juga terdiri dari beberapa LabelEdit. Namun LabelEdit yang ada dibagi menjadi 3 bagian dan setiap bagian diletakkan di dalam group box. Group box pertama dengan property caption Front [XY] berisi LabelEdit Zmin dan Zmax, untuk memasukkan dan menampilkan nilai Zmin dan Zmax. Group box kedua dengan property caption Above [Xz] berisi
43 LabelEdit Ymin dan Ymax, untuk memasukkan dan menampilkan nilai Ymin dan Ymax. Dan group box ketiga dengan property caption Right [YZ] berisi LabelEdit Xmin dan Xmax, untuk memasukkan dan menampilkan nilai Xmin dan Xmax. Sedangkan LabelEdit Max Side, hanya menampilkan nilai sisi box dengan property ReadOnly true, sehingga tidak dapat diubah nilainya disini . Pada form MDBoundary terrdiri dari 2 buah button, yaitu : 1. Button OK, jika button ini dijalankan maka jika ada LabelEdit ada yang diubah, akan dikirimkan langsung keprogram. 2. Button Cancel, sedangkan button ini berfungsi untuk membatalkan perubahan yang telah dibuat dan menutup form MDBoundary ini. 3.5.6.
Rancangan MDTable Form ini berfungsi untuk menampilkan seluruh nilai perubahan-perubahan
energi dan posisi setiap atom dari waktu awal iterasi sampai akhir wktu iterasi. Lokasi tabel utama digunakan untuk menampilkan nilai data yang ada pada tabel1 sedangkan lokasi tabel rinci untuk menampilkan nilai data dari query yang dijalankan. Query juga dijalankan urut satu persatu, ketika mengaktifkan atau mengoperasikan navigation bar. Untuk mendapatkan nilai data tersebut dijelaskan pada bagian visualisasi ke dalam bentuk tabel. Button save to file adalah untuk menyimpan hasil data-data yang telah disajikan pada lokasi tabel utama dan tabel rinci. Dan button close untuk menutup form dari MDTable ini.
44 Rancangan form MDTable adalah sebagai berikut : Save To File Close
Tabel Utama
Navigator Bar
Tabel Rinci
Gambar 3.9. Rancangan MDTable
Default Color 1
6
2
7
3
8
4
9
5
10
Others BackGround Update
Close
Gambar 3.10. Rancangan MDPartColor
45 3.5.7.
Rancangan MDColor Form MDcolor digunakan untuk mendefinisikan warna partikel yang diamati.
Pada aplikasi ini partikel yang diamati sebanyak 10 partikel dari seluruh jumlah partikel yang ada. Rancangan form MDColor dapat dilihat pada Gambar 3.7. Rancangan form diatas terdiri dari 12 kotak warna partikel, 10 untuk pendefinisian 10 warna partikel yang diamati, sedangkan 2 untuk warna partikel selain partikel yang diamati dan warna kotak virtual pengamatan partikel. 3.5.8.
Rancangan untuk penyimpanan Pada aplikasi ini, juga dirancang untuk menyimpan hasil perhitungan simulasi
MD pada file. Nilai data-data hasil perhitungan simulasi MD bisa didapat ketika telah melewati tahapan proses simulai MD. Setelah nilai data-data diperoleh kemudian ditampilkan dalam bentuk tabular yang dapat dilihat pada visualisasi dalam bentuk tabel, nilai data-data inilah yang disimpan kedalam file. Dikarenakan pada visualisasi dalam bentuk tabel, nilai data-data disajikan dalam 2 bentuk tabel maka ke dua tabel inilah yang disimpan kedalam file. Cara implementasinya adlah dengan menggunakan komponen save dialog,
3.6. Penggunaan Aplikasi MD Simulation untuk Atom Argon Pada bagian ini, yang merupakan bagian terakhir dari bab ini akan diperlihatkan penyolusian proses simulasi MD menggunakan karakteristik atom Argon degan aplikasi yang dibuat penulis. Tahapan-tahapan untuk mendapatkan nilai perubahan dari atom Argon tersebut sama dengan tahapan-tahapan yang sudah dijelaskan diatas. 3.6.1.
Inisialisasi untuk atom Argon Atom argon memiliki karakteristik yang nilainya tidak bisa diubah
sembarangan. Untuk dapat menghitung menggunakan simulasi MD maka diperlukan nilai-nilai dari atom Argon sebagai berikut :
46 NPart Den Side TRef RCOff H IRep IStop TimeMX ISeed
:= := := := := := := := := :=
256; 0.83134; 6.75284; 0.722; 2.5; 0.064; 50; 500; 100; 4711;
Banyaknya jumlah partikel Argon yang akan diamati sebanyak 256 partikel. Panjang dari sisi kotak pembatas yang digunakan untuk proses simulasi MD adalah sesuai untuk 256 partikel Argon. Nilai dari TimeMX dapat diubah-ubah sesuai jumlah waktu iterasi yang akan diamati tidak tergantung dari karakteristik atom tersebut. Nilai IStop juga dapat dibuah, yang merupakan nilai pada waktu iterasi keberapa perhitungan pembaharuan kecepatan akan berakhir. 3.6.2.
Proses simulasi MD Setelah mendapatkan nilai-nilai yang dibutuhkan sebagai inisialisasi awal
maka tahapan proses simulasi MD dapat dijalankan. Seperti yang telah diuraikan diatas sebelum memulai proses simulasi terlebih dahulu masuk pada tahapan inisialisasi yaitu menempatkan pada kotak pembatas dengan panjang sisi 6,75284 dan mendistribusikan kecepatan atom Argon menjadi normal menggunakan metode Maxwell-Boltzman. Selanjutnya dimulai proses simulasi MD seperti yang telah dideskripsikan diatas. 3.6.3.
Visualisasi atom Argon Selesai proses simulasi MD data-data yang didapat disajikan dalam bentuk
chart, tabel dan diamati pada kotak pengamatan virtual seperti yang telah dijelaskan diatas. Hasil perhitungan menggunakan aplikasi untuk simulasi MD ini didapat, bahwa perubahan energi kinetik mempunyai nilai positif sedangkan besarnya perubahannya sama dengan besarnya perubahan kecepatan. Untuk atom Argon perubahan nilai energi potensial menunjukkan selalu bernilai negatif yang cukup
47 besar bila dibandingkan dengan nilai pada energi kinetik, dan karena total energi merupakan penjumlahan dari nilai energi kinetik dan nilai energi total maka hasil yang diperoleh selalu menunjukkan nilai negatif. Sedangkan visualisasi perubahan posisi partikel atom Argom tersebut dalam kotak pengamatan virtual dibatasi dengan memotong sisi kotak pembatas seperempat bagian yaitu sebesar 1,68821. Pemotongan kotak pembatas ini berlaku sama untuk tampak bagian depan, atas dan bagian kanan sebanyak seperempat panjang kotak pembatas. 3.6.4.
Memulai Aplikasi Pada bagian ini akan menjelaskan bagaimana menjalankan MDS dengan
aplikasi yang dibuat penulis. 3.6.4.1.Tampilan Utama Ketika aplikasi pertama kali dimulai, yang akan tampil sebagai berikut :
Gambar 3.11. Tampilan Utama Aplikasi MDS (a)
48 Pada tampilan diatas default aplikasi pada page control Chart, sedangkan jika default aplikasi pada page control Visualization, yang akan tampil adalah sebagai berikut :
Gambar 3.12. Tampilan Utama Aplikasi MDS (b)
3.6.4.2. Tampilan Ketika Aplikasi dijalankan Untuk memulai MDS, diperlukan parameter-parameter awal, pada aplikasi ini parameter yang digunakan dapat dilihat ketika diklik tombol Parametrs. Isi dari parameter yang digunakan dapat dilihat pada gambar 3.13. Pada gambar tersebut tampak dua warna edit, bagian yang berwarna merah nilai parameternya tidak dapat diubah karena merupakan karakteristik spesifik atom Argon,
sedangkan yang
berwarna biru merupakan parameter yang dapat diubah. Pada tampilan tersebut, terdapat tombol Visual Boundary untuk menampilkan tampilan Visual Boundary, seperti dapat dilihat pada gambar 3.14 .
49
Gambar 3.13. Tampilan MDS Parameter
Pada tampilan Visual Boundary, bagian Front[XY] digunakan untuk menentukan besarnya kotak pengamatan pada bagian depan. Bagian Above[XZ] digunakan untuk menentukan besar kotak pengamatan pada bagian atas, sedangkan bagian Right[YZ] digunakan untuk menetukan kotak pengamatan pada bagian kanan. Penentuan besarnya kotak pengamatan virtual yang akan dibuat, untuk bagian depan memotong sumbu Z, pada bagian atas memotong sumbu Y dan pada bagian kanan memotong sumbu X. Kotak dialog Max side menunjukkan batas maximum dari panjang sisi kotak.
50
Gambar 3.14. Tampilan MDS Visual Boundary
3.6.4.3. Hasil MDS dalam Bentuk Chart
Gambar 3.15. Tampilan Aplikasi MDS dengan Page Control Chart
51 Setelah semua parameter ditentukan, simulasi MD dapat dijalankan. Simulasi MD akan berjalan sebanyak jumlah iterasi yang ditentukan pada parameter TimeMX. Hasil yang didapat setelah simulasi ini selesai, salah satunya dalam bentuk Chart yang dapat dilihat pada gambar 3.15. Hasil simulasi MD dalam bentuk Chart, tersedia untuk besaran- besaran energi kinetik, energi potensial, total energi dan kecepatan.
Gambar 3.16. Energi Kinetik yang Dihasilkan
Gambar 3.17. Energi Potensial yang Dihasilkan
52
Gambar 3.18. Total Energi yang Dihasilkan
Gambar 3.18. Kecepatan yang dihasilkan
3.6.4.4. Hasil MDS dalam Bentuk Tabel Selain dalan bentuk Chart, hasil dari simulasi MD tersebut dapat disajikan dalam bentuk tabel. Hasil dalam bentuk tabel tersebut dapat disimpan kedalam file berformat paradox. Pada gambar 3.19., terlihat ada dua tabel yaitu, pada bagian atas merupakan tabel utama, sedangkan pada bagian bawah merupakan tabel rinci. Tabel rinci selalu mengacu pada record yang ditunjuk pada tabel utama.
53
Gambar 3.19. Tampilan hasil simulasi MD dalam bentuk tabel
3.6.4.5. Hasil MDS dalam Bentuk Kotak Pengamatan Virtual
Gambar 3.20. Warna dari atom yang diamati
54
Hasil simuasi MD yang terakhir adalah hasil dalam bentuk kotak pengamatan virtual. Pada masing masing kotak pengamatan virtual tersebut, terlihat beberapa warna yang berbeda. Warna-warna tersebut dapat sesuai dengan warna-warna yang terdapat pada pada kotak dialog Legend, yang dapat dilihat pada gambar 3.20. warna default dari partikel-partikel yang terdapat pada kotak pengamatan virtual adalah Others, sedangkan warna-warna lainnya merupakan warna untuk partikel yang sedang diamati. Misalnya pada gambar 3.21., terlihat bahwa partikel 205 memiliki warna biru tua dan terlihat pada ketiga kotak pengamatan yang ada.
Gambar 3.21. Posisi atom yang dihasilkan selama proses simulasi
Bab IV Penutup Transformasi Teori Simulasi MD terhadap Algoritma Program Visualisasi
simulasi
Molecular
Dynamics
(MD)
dibutuhkan
untuk
penganalisaan suatu partikel atau molekul yang diteliti, yang perubahan pergerakannya tidak bisa dilihat dengan kasat mata. Simulasi MD merupakan simulasi untuk menghitung perubahan-perubahan besaran-besaran partikel atau molekul. Simulasi ini diawali dengan memberikan kondisi awal yaitu posisi awal dan kecepatan partikel atau atom tersebut. Proses simulasi MD tersebut dihitung untuk setiap partikel selama waktu iterasi tertentu, dari proses tersebut dihasilkan nilai datadata perubahan besaran. Hasil dari perubahan-perubahan besaran yang dihitung menggunakan simulasi MD dapat divisualisasikan dengan membuat aplikasi visulisasi simulasi MD. Aplikasi ini dapat memvisualisasikan perubahan-perubahan besaran dalam bentuk chart, tabel dan pembuatan kotak pengamatan virtual. Aplikasi visualisasi simulasi MD yang disajikan penulis kali ini menggunakan pemrograman Delphi. Dimana penyajian visualisasi dengan chart, data-data numerik yang dihasilkan dari proses simulasi MD
lebih mudah dipahami. Penyajian
visualisasi dalam kotak pengamatan virtual, memerlukan pemetaan dari data numerik yang didapat disajikan ke layar komputer dengan membuat pengsaklaan yang tepat. Dan untuk menyajikan perpindahan posisi partikel atau atom pada kotak pengamatan virtual dengan menentukan pemotongan kotak tersebut. Penyajian data numerik dalam bentuk tabular, dibuat dengan membuat dua buah tabel. Tabel pertama memuat nilai-nilai akhir untuk setiap kali waktu iterasi, sedangkan tabel kedua memuat nilainilai besaran seluruh jumlah partikel atau molekul yang diamati pada setiap kali iterasi. Untuk menyajikan dengan baik nilai data numerik pada tabel tersebut, dibuat suatu query. Dengan menjalankan query tersebut juga memungkinkan untuk memvisualisasikan posisi partikel atau molekul pada kotak pengamatan virtual pada iterasi sebelumnya. Kedua dua tabel yang terbentuk selama simulasi berlangsung dapat disimpan kedalam file database. 55
56
Saran Bagaimanapun juga aplikasi sederhana ini akan banyak mengalami kendala karena keterbatasan kemampuan penulis. Oleh karena itu ada beberapa hal yang penulis kemukakan yaitu, aplikasi ini hanya dapat mensimulasikan atom Argon sebanyak 256 partikel dengan memasukkan nilai variable-variable tertentu. Dapat dikembangkan untuk jenis partikel atau molekul lainnya atau dengan banyaknya jumlah partikel yang dikehendaki. Visualisasi posisi partikel atau molekul pada aplikasi ini belum dapat divisualisasikan dalam bentuk tiga dimensi. Dan pada aplikasi ini untuk menghasilkan perhitungan besaran untuk setiap iterasi dan setiap partikel harus menjalankan simulasi MD ini dari awal, tidak bisa berhenti ditengah iterasi atau melanjutkan iterasi yang sudah dijalankan. Banyaknya keterbatasan dalam membuat aplikasi ini dengan menggunakan pemrograman Delphi, dapat dikembangkan dengan menggunakan bahasa pemrograman visual yang lainnnya.
A. 1. Flowchart Proses Utama
Start
Inisialisasi Parameter
Distribusi Posisi awal menggunakan LATTICE
Distribusi Kecepatan awal menggunakan Maxwell-BoltzMann
Molecular Dynamics Simulation
Output to Chart, Table & Visualization
End 58
A. 2. Flowchart Inisialisasi Parameter Start
NPart = 256 Den = 0.83134 Side = 6.75284 TRef = 0.722 RCoff = 2.5 H = 0.064
IRep = 50 IStop = 500 TimeMX = 100 ISeed = 4711
A = Side / 4 SideH = Side / 2 HSQ = H2 HSQ2 =HSQ / 2 NPartM = NPart - 1 RCOffS = RCOff2 TScale = 16 / (NPart - 1) VAVER 1 .13 * Tref / 24
i=1
F=0
Inc(i)
i > NPart
End 59
A. 3. Flowchart Distribusi Posisi Awal Menggunakan LATTICE
Start A = Side / 4
Index = 0 LG = 0 i=0 1
j=0
k=0 Inc (index) X = i * A + LG * A * 0,5 Y = j * A + LG * A * 0,5 Z=K*A
T
T
Inc(k) T
k>3 Y
Inc(j)
j>3 Y
Inc(j)
j>3 Y
1 60
1 Inc(LG)
1
LG > 1
T
Y
LG = 0
i=0
j=0
2
k=0 Inc(Index) X = i * A + (2 - LG) * A * 0,5 Y = j * A + (LG - 1) * A * 0,5 Z = k * A + A * 0,5 Inc(k)
k>3 Y
Inc(j)
j>3
Y
2 61
T
T
2 Inc(i)
2
i>3
T
Y
Inc(LG)
LG > 2
Y
End
62
A. 4. Flowchart Distribusi Kecepatan Awal Menggunakan Maxwell-Boltzmann Start RandSeed = ISeed Counter = 1
Y
Counter < = NPart
T T
EKIN = 0 SP = 0
V1 = 2 * Random - 1 V2 = 2 * Random - 1 S = V12 + V22
S<1
i=0
Y
SP = SP + V Inc(i)
R 2 * Ln( S ) / S
T
V [Counter ] V 1 * R V [Counter 2] V 2 * R Inc(Counter ,2)
i = NPart Y
SP = SP + NPart i=1 V = V - SP EKIN = EKIN +V2 Inc(i)
T
i = NPart Y
"Linear Momentum = ", SP "Velocity Adjustment at ", Clock
3 63
3
TS = TScale * EKIN
"Temperature before scaling is ", TS
SC Tref / TS
"Scale factor is ", SC
SC = SC * H i=1 V[i] = V[i] * SC Inc(i)
i > NPart
Y
End
64
T
A. 5. Flowchart Molecular Dynamics Simulation Start Clock = 0
"Molecular Dynamics Simulation Program " "Number of Partiicle " , NPart "Side Length of The Box ", SIde "Cut Off i is ", RCoff "Reduced Temperature is ", TRef "Basic Time Step Is ", H
Inc(Clock) 2
i=1
Pos = Pos + V + F Inc(i)
T
i > NPart Y
i=1
Pos < 0 Y
Pos = Pos + Side
T T
Pos > Side Y
Pos = Pos - Side
i > NPart Y
4
65
T
4
i=1
V=V+F Inc(j)
T
i > NPart Y
CalcForce i=1 V=V+F Inc(j)
T
i > NPart Y
EKIN = 0 i =1 EKIN = EKIN + VX2 + VY2 + VZ2 Inc (i)
i > NPart Y
EKIN = EKIN / HSQ Vel = 0 Count = 0
5
66
T
5 i=1 VX' = VX2 VY' = VY2 VZ' = VZ2
SQ VX 'VY 'VZ '
SQT = SQ / H
SQT > VAVER
T
Y
Inc(Count)
T
Vel = Vel + SQ Inc(i)
i > NPart
Y
Vel = Vel / H
(Clock < + IStop) and (Clock mod IRep = 0)
T
1 Y
"Velocity Adjustment at Clock = ", Clock
TS = TScale * EKIN
6
67
6
"Temperature before Scalling is ", TS
SC
T Re f / TS
"Scale Factor is ", SC
i=1
V = V * SC Inc(i)
T
i > NPart Y
1
EKIN = TRef / TScale
EK = 24 * EKIN EPot = 4 * EPot Temp = TScale * Ekin Pres = Den * 16 * (EKIN - VIR) / NPart Vel = Vel ? NPart RP = (Count / NPart) * 100
Inc(Clock) 2 Clock > TimeMx
Y
End 68
T
A. 6. Flowchart CalcForce Start VIR = 0 EPot = 0 i=1 F=0 inc (i)
T
i > NPart Y
i=1 j=i+1 1 (i < NPart) and (j < = NPart) Y
Pos' = Pos[i] - Pos[j]
Pos' < (-SideH) Y
Pos' = Pos' + Side
T T
Pos' > SideH Y
Pos' = Pos' - Side
T
RD = Pos'X2 + Pos'Y2 + Pos'Z2
7
69
7
RD > RCoffS
Y
EPot = EPot + RD -6 - RD -3 R148 = RD -7 - RD -4 / 2 VIR = VIR - RD148 K = Pos' * R148 F[ i ] = F[ i ] + K F[ j ] = F[ j ] - K
T
Inc(j) Inc(i) 1 i > NPart
T
Y
i=1
F = F * HSQ2 Inc(i)
i > NPart Y
End
70
T
B. 1. Lampiran Listing Program MDS.dpr program MDS; uses Forms, FrmMDS in 'FrmMDS.pas' {MDSFrm}, FrmPar in 'FrmPar.pas' {ParFrm}, Codes in 'Codes.pas', FrmTbl in 'FrmTbl.pas' {MDTable}, MdlData in 'MdlData.pas' {DataMdl: TDataModule}, FrmVB in 'FrmVB.pas' {MDBoundary}, FrmLg in 'FrmLg.pas' {LgFrm}; {$R *.res} begin Application.Initialize; Application.Title := 'Molecular Dynamics Simulation'; Application.CreateForm(TMDSFrm, MDSFrm); Application.CreateForm(TDataMdl, DataMdl); Application.Run; end.
71
B. 2. Lampiran Listing program Unit Codes.pas unit Codes; interface uses SysUtils, ExtCtrls, Graphics; {Global Types} type TPos = record Pos : Real; Velo : Real; Force : Real; end; TPart X,Y,Z end;
= record : TPos;
TSlice = record Min, Max : Real; end; TPartColor = array[0..11] of TColor; const DefaultColor : TPartColor = (clDKGray,$00F25B85,$005CEB87,$00FF6C6C,$004242FF,$00DC2929, $00EADF0B,$0062F9F1,$00FF55FF,$00158AFF,$00207D00,$00EAEAEA); {Global Variables} var PartName : String; NPart : Integer; Den, Side, TRef, RCOff, H : Real; IRep, IStop, TimeMX, ISeed : Integer; A, SideH, HSQ, HSQ2 : Real; Clock, NPartM : Integer; RCOffS, TScale, Epot,VIR, VAVER : Real; Part : array of TPart; PartColor : TPartColor; XSlice, YSlice, ZSlice : TSlice; procedure procedure procedure procedure
DefaultVal; GetParameters; SingleMDS; MultiMDS;
72
function SL(vmin, vmax: Real): TSlice; function FF(var vFloat: Real): String; procedure UpdateVisual; procedure UpdateColor(var vShape: array of TShape); implementation uses FrmPar, FrmMDS, ComCtrls, Dialogs, FrmVB, Controls, MdlData; function FF(var vFloat: Real): String; begin Result := FormatFloat('0.00000',vFloat); end; function SL(vmin, vmax : Real): TSlice; var vSl : TSlice; begin vSl.Min := vmin; vSl.Max := vmax; Result := vSl; end; procedure UpdateColor(var vShape: array of TShape); var vColor : TColor; APStart, i : Integer; begin (vShape[1].Parent as TPanel).Color := PartColor[11]; APStart := StrToInt(MDSFrm.eAPStart.Text); for i := 1 to NPart do begin if (i=APStart+0) then vColor := PartColor[1] else if (i=APStart+1) then vColor := PartColor[2] else if (i=APStart+2) then vColor := PartColor[3] else if (i=APStart+3) then vColor := PartColor[4] else if (i=APStart+4) then vColor := PartColor[5] else if (i=APStart+5) then vColor := PartColor[6] else if (i=APStart+6) then vColor := PartColor[7] else if (i=APStart+7) then vColor := PartColor[8] else if (i=APStart+8) then vColor := PartColor[9] else if (i=APStart+9) then vColor := PartColor[10] else vColor := PartColor[0]; vShape[i].Brush.Color := vColor; vShape[i].Hide; vShape[i].ShowHint := True; end; end; procedure InitShape(var vShape: array of TShape; var vPanel: TPanel); var i: Integer; begin for i := 1 to NPart do begin vShape[i] := TShape.Create(vPanel); vShape[i].Parent := vPanel; vShape[i].Shape := stCircle; vShape[i].Height := 7; vShape[i].Width := 7; MDSFrm.ProgressBar1.StepIt; end; end;
73
procedure DefaultVal; begin PartName := 'Argon'; NPart := 256; Den := 0.83134; Side := 6.75284; TRef := 0.722; RCOff := 2.5; H := 0.064; IRep := 50; IStop := 500; TimeMX := 100; ISeed := 4711; XSlice := SL(5.06463,6.75284); YSlice := SL(5.06463,6.75284); ZSlice := SL(0,1.68821); end; procedure GetParameters; begin // ParFrm := TParFrm.Create(nil); with ParFrm do begin PartName := EPartName.Text; Npart := StrToInt(ENPart.Text); Den := StrToFloat(EDen.Text); Side := StrToFloat(ESide.Text); TRef := StrToFloat(ETRef.Text); RCOff := StrToFloat(ERCOff.Text); H := StrToFloat(EH.Text); IRep := StrToInt(EIRep.Text); IStop := StrToInt(EIStop.Text); TimeMX := StrToInt(ETimeMX.Text); ISeed := StrToInt(EISeed.Text); end; end; procedure Lattice; var Index, LG,i,j,k : Integer; begin Index := 0; for LG := 0 to 1 do for i := 0 to 3 do for j := 0 to 3 do for k := 0 to 3 do begin Inc(Index); Part[Index].X.Pos Part[Index].Y.Pos Part[Index].Z.Pos end; for LG := 1 to 2 do for i := 0 to 3 do for j := 0 to 3 do for k := 0 to 3 do begin Inc(Index); Part[Index].X.Pos Part[Index].Y.Pos Part[Index].Z.Pos end; end;
:= i*A+LG*A*0.5; := j*A+LG*A*0.5; := k*A;
:= i*A+(2-LG)*A*0.5; := j*A+(LG-1)*A*0.5; := k*A+A*0.5;
74
procedure Boltz(var Velo1: Real;var Velo2: Real); var S,R, v1,v2 : Real; begin repeat v1 := 2*Random-1; v2 := 2*Random-1; S := SQR(v1)+SQR(v2); until (S<1); R := -2*Ln(S)/S; Velo1 := v1*SQRT(R); Velo2 := v2*SQRT(R); end; procedure Maxwell; var i, Counter : Integer; EKIN,TS, SP,SC : Real; begin RandSeed := ISeed; Counter := 1; while (Counter<=NPart) do begin Boltz(Part[Counter].X.Velo,Part[Counter+1].X.Velo); Boltz(Part[Counter].Y.Velo,Part[Counter+1].Y.Velo); Boltz(Part[Counter].Z.Velo,Part[Counter+1].Z.Velo); Inc(Counter,2); end; EKIN := 0; SP := 0; for i := 1 to NPart do SP := SP+Part[i].X.Velo; SP := SP/NPart; for i := 1 to NPart do begin Part[i].X.Velo := Part[i].X.Velo-SP; EKIN := EKIN+SQR(Part[i].X.Velo); end; MDSFrm.OutLog.Lines.Add('Total Linear Momentum in X Direction is '+FF(SP)); SP := 0; for i := 1 to NPart do SP := SP+Part[i].Y.Velo; SP := SP/NPart; for i := 1 to NPart do begin Part[i].Y.Velo := Part[i].Y.Velo-SP; EKIN := EKIN+SQR(Part[i].Y.Velo); end; MDSFrm.OutLog.Lines.Add('Total Linear Momentum in Y Direction is '+FF(SP)); SP := 0; for i := 1 to NPart do SP := SP+Part[i].Z.Velo; SP := SP/NPart; for i := 1 to NPart do begin Part[i].Z.Velo := Part[i].Z.Velo-SP; EKIN := EKIN+SQR(Part[i].Z.Velo); end; MDSFrm.OutLog.Lines.Add('Total Linear Momentum in Z Direction is '+FF(SP));
75
MDSFrm.OutLog.Lines.Add(#13#10'-= Velocity Adjustment =- at Clock = '+IntToStr(Clock)); TS := TScale*EKIN; MDSFrm.OutLog.Lines.Add('Temperature before scaling is '+FF(TS)); SC := SQRT(TRef/TS); MDSFrm.OutLog.Lines.Add('Scale Factor is '+FF(SC)); SC := SC*H; for i := 1 to NPart do begin Part[i].X.Velo := Part[i].X.Velo*SC; Part[i].Y.Velo := Part[i].Y.Velo*SC; Part[i].Z.Velo := Part[i].Z.Velo*SC; end; end; procedure ClearShape(var vShape: array of TShape); var i : Integer; begin for i := Low(vShape) to High(vShape) do if not(vShape[i]=nil) then vShape[i].Destroy; end; procedure MDSInit; var i : Integer; begin // GetParameters; MDSFrm.StatusBar1.Panels[1].Text := 'Preparing Simulation...'; MDSFrm.StatusBar1.Update; with MDSFrm.ProgressBar1 do begin Parent := MDSFrm.StatusBar1; Align := alLeft; Min := 1; Max := 3*NPart; Show end; A := Side/4; SideH := Side/2; HSQ := SQR(H); HSQ2 := HSQ/2; NPartM := Npart-1; RCOffS := SQR(RCOff); TScale := 16/(NPart-1); VAVER := 1.13*SQRT(TRef/24); SetLength(Part,NPart+1); ClearShape(PartShape1); SetLength(PartShape1,NPart+1); InitShape(PartShape1,MDSFrm.Panel1); UpdateColor(PartShape1); ClearShape(PartShape2); SetLength(PartShape2,NPart+1); InitShape(PartShape2,MDSFrm.Panel2); UpdateColor(PartShape2); ClearShape(PartShape3); SetLength(PartShape3,NPart+1); InitShape(PartShape3,MDSFrm.Panel3); UpdateColor(PartShape3); Lattice; {Initializes Forces} for i := 1 to NPart do begin Part[i].X.Force := 0; Part[i].Y.Force := 0; Part[i].Z.Force := 0;
76
end; MDSFrm.ProgressBar1.Hide; MDSFrm.StatusBar1.Panels[1].Text := ''; MDSFrm.StatusBar1.Update; end; procedure BoundPos; var i : Integer; begin for i := 1 to NPart do with Part[0+i] do begin if (X.Pos<0) then X.Pos := if (X.Pos>Side) then X.Pos if (Y.Pos<0) then Y.Pos := if (Y.Pos>Side) then Y.Pos if (Z.Pos<0) then Z.Pos := if (Z.Pos>Side) then Z.Pos end; end;
X.Pos+Side; := X.Pos-Side; Y.Pos+Side; := Y.Pos-Side; Z.Pos+Side; := Z.Pos-Side;
function Power(Base, Exponent: Real): Real; begin Power := Exp(Exponent*Ln(Base)); end; procedure CalcForces; var RD,R148, KX,KY,KZ, XX,YY,ZZ : Extended; i,j : Integer; begin VIR := 0; EPot := 0; {Initializes Forces} for i := 1 to NPart do begin Part[i].X.Force := 0; Part[i].Y.Force := 0; Part[i].Z.Force := 0; end; for i := 1 to NPart do begin j := i+1; while (iSideH) then XX := XX-Side; if (YY<(-1*SideH)) then YY := YY+Side; if (YY>SideH) then YY := YY-Side; if (ZZ<(-1*SideH)) then ZZ := ZZ+Side; if (ZZ>SideH) then ZZ := ZZ-Side; RD := SQR(XX)+SQR(YY)+SQR(ZZ); if not (RD>RCOffS) then begin EPot := EPot+Power(RD,-6)-Power(RD,-3); R148 := Power(RD,-7)-Power(RD,-4)/2; VIR := VIR - RD*R148; KX := XX*R148; Part[i].X.Force := Part[i].X.Force+KX; Part[j].X.Force := Part[j].X.Force-KX; KY := YY*R148;
77
Part[i].Y.Force := Part[i].Y.Force+KY; Part[j].Y.Force := Part[j].Y.Force-KY; KZ := ZZ*R148; Part[i].Z.Force := Part[i].Z.Force+KZ; Part[j].Z.Force := Part[j].Z.Force-KZ; end; Inc(j); end; end; for i := 1 to NPart do with Part[i] do begin X.Force := X.Force*HSQ2; Y.Force := Y.Force*HSQ2; Z.Force := Z.Force*HSQ2; end; end; procedure UpdateChart(vEK, vEPot, vETot, vVel: Real); begin with MDSFrm do begin SCKinetic.AddXY(Clock,vEK); SCPotential.AddXY(Clock,vEPot); SCTotal.AddXY(Clock,vETot); SCVelocities.AddXY(Clock,vVel); MDSChart.Update; end; end; procedure UpdateVisual; var i : Integer; begin if (PartShape1=nil) or (PartShape2=nil) or (PartShape3=nil) then Exit; for i := 1 to NPart do begin PartShape1[i].Visible := (Part[i].Z.Pos>ZSlice.Min) and (Part[i].Z.PosYSlice.Min) and (Part[i].Y.PosXSlice.Min) and (Part[i].X.Pos<XSlice.Max); if PartShape1[i].Visible then with PartShape1[i] do begin Left := Round(Part[i].X.Pos*25)+3; Top := 169-Round(Part[i].Y.Pos*25)+3; Hint := 'PartNo:'+IntToStr(i)+' X:'+FF(Part[i].X.Pos)+' Y:'+FF(Part[i].Y.Pos)+' Z:'+FF(Part[i].Z.Pos); Repaint; end; if PartShape2[i].Visible then with PartShape2[i] do begin Left := Round(Part[i].X.Pos*25)+3; Top := 169-Round(Part[i].Z.Pos*25)+3; Hint := 'PartNo:'+IntToStr(i)+' X:'+FF(Part[i].X.Pos)+' Y:'+FF(Part[i].Y.Pos)+' Z:'+FF(Part[i].Z.Pos); Repaint; end; if PartShape3[i].Visible then with PartShape3[i] do begin Left := Round(Part[i].Z.Pos*25)+3; Top := 169-Round(Part[i].Y.Pos*25)+3; Hint := 'PartNo:'+IntToStr(i)+' X:'+FF(Part[i].X.Pos)+' Y:'+FF(Part[i].Y.Pos)+' Z:'+FF(Part[i].Z.Pos); Repaint; end; end;
78
with MDSFrm do begin StatusBar1.Panels[1].Text := ' Clock : '+IntToStr(DataMdl.Table1IterNo.Value); StatusBar1.Update; eClock.Text := DataMdl.Table1IterNo.AsString; eClock.Update; lClock.Caption := 'of '+IntToStr(DataMdl.Table1.RecordCount); lClock.Update; end; end; procedure SingleMDS; var Count, i : Integer; EK,ETot,Temp,Pres,Vel,RP, VX,VY,VZ,SQ,SQT,TS,SC, EKIN : Real; begin if (Clock=0) then with MDSFrm do begin SCKinetic.Clear; SCPotential.Clear; SCTotal.Clear; SCVelocities.Clear; MDSInit; MDSChart.Title.Text.Clear; MDSChart.Title.Text.Add('MD Simulation for '+PartName); OutLog.Clear; OutLog.Lines.Add('Molecular Dynamics Simulation Program'); OutLog.Lines.Add('-------------------------------------'); OutLog.Lines.Add(Format('%-30s : %d',['Number of Particles',NPart])); OutLog.Lines.Add(Format('%-30s : %0.5f',['Side Length of The Box',Side])); OutLog.Lines.Add(Format('%-30s : %0.5f',['Cut Off is',RCOff])); OutLog.Lines.Add(Format('%-30s : %0.5f',['Reduced Temperature is',TRef])); OutLog.Lines.Add(Format('%-30s : %0.5f',['Basic Time Step is',H])); OutLog.Lines.Add('-------------------------------------'); Maxwell; Inc(Clock); MDSBar.Show; end; {Start of the actual Molecular Dynamics Program} {Advance Positions One Basic Time} for i := 1 to NPart do with Part[i] do begin X.Pos := X.Pos+X.Velo+X.Force; Y.Pos := Y.Pos+Y.Velo+Y.Force; Z.Pos := Z.Pos+Z.Velo+Z.Force; end; BoundPos; {Compute Partial Velocities} for i := 1 to NPart do with Part[i] do begin X.Velo := X.Velo+X.Force; Y.Velo := Y.Velo+Y.Force; Z.Velo := Z.Velo+Z.Force; end; CalcForces; {Compute The Forces on The Particles} {Compute The Velocities} for i := 1 to NPart do with Part[i] do begin X.Velo := X.Velo+X.Force; Y.Velo := Y.Velo+Y.Force;
79
Z.Velo := Z.Velo+Z.Force; end; {Compute The Kinetic Energy} EKIN := 0; for i := 1 to NPart do with Part[i] do EKIN := EKIN+SQR(X.Velo)+SQR(Y.Velo)+SQR(Z.Velo); EKIN := EKIN/HSQ; {Compute The Average Velocities} Vel := 0; Count := 0; for i := 1 to NPart do with Part[i] do begin VX := SQR(X.Velo); VY := SQR(Y.Velo); VZ := SQR(Z.Velo); SQ := SQRT(VX+VY+VZ); SQT := SQ/H; if (SQT>VAVER) then Inc(Count); Vel := Vel+SQ; end; Vel := Vel/H; if (Clock<=IStop) and (Clock mod IRep = 0) then with MDSFrm.OutLog.Lines do begin Add('-= Velocity Adjustment =- at Clock = '+IntToStr(Clock)); TS := TScale*EKIN; Add('Temperature before Scaling is '+FF(TS)); SC := SQRT(TRef/TS); Add('Scale Factor is '+FloatToStr(SC)); for i := 1 to NPart do with Part[i] do begin X.Velo := X.Velo*SC; Y.Velo := Y.Velo*SC; Z.Velo := Z.Velo*SC; end; EKIN := TRef/TScale; end; { if (Clock mod 2 = 0) then begin} EK := 24*EKIN; EPot := 4*EPot; ETot := EK+EPot; Temp := TScale*EKIN; Pres := Den*16*(EKIN-VIR)/NPart; Vel := Vel/NPart; RP := (Count/NPart)*100; with DataMdl do try Table1.Append; Table1IdIter.Value := GetCode+Clock; Table1IterNo.Value := Clock; Table1EK.Value := FF(EK); Table1EP.Value := FF(EPot); Table1ET.Value := FF(ETot); Table1Press.Value := FF(Pres); Table1Vel.Value := FF(Vel); Table1Temp.Value := FF(Temp); Table1RP.Value := FF(RP); Table1.Post; except MessageDlg('Tablenya Rusak !',mtError,[mbOK],0); Exit end; for i := 1 to NPart do with DataMdl do try Table2.Append;
80
Table2IdDetail.Value := Clock*1000+i; Table2IterNo.Value := Clock; Table2IdPart.Value := i; Table2X.Value := FF(Part[i].X.Pos); Table2Y.Value := FF(Part[i].Y.Pos); Table2Z.Value := FF(Part[i].Z.Pos); Table2VX.Value := FF(Part[i].X.Velo); Table2VY.Value := FF(Part[i].Y.Velo); Table2VZ.Value := FF(Part[i].Z.Velo); Table2FX.Value := FF(Part[i].X.Force); Table2FY.Value := FF(Part[i].Y.Force); Table2FZ.Value := FF(Part[i].Z.Force); Table2.Post; except MessageDlg('Tablenya Rusak !',mtError,[mbOK],0); Exit end; UpdateVisual; UpdateChart(EK, EPot, ETot, Vel); Inc(Clock); end; procedure MultiMDS; begin Clock := 0; with MDSFrm.MDSBar do begin Parent := MDSFrm.StatusBar1; Align := alLeft; Min := 1; Max := TimeMX; end; with DataMdl do begin Table1.Close; Table1.EmptyTable; Table1.Open; Table2.Close; Table2.EmptyTable; Table2.Open; end; while (Clock<=TimeMX) do begin SingleMDS; MDSFrm.MDSBar.StepIt; end; Dec(Clock); MDSFrm.MDSBar.Hide; end; end.
81
B. 3. Lampiran Listing program Unit FrmMDS.pas unit FrmMDS; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, TeEngine, Series, jpeg, ExtCtrls, TeeProcs, Chart, ToolWin, StdCtrls, Menus, DBCtrls, dxfLabel, ExtDlgs, Db; type TMDSFrm = class(TForm) {bagian deklarasi sengaja dihilangkan} end; var MDSFrm: TMDSFrm; PartShape1, PartShape2, PartShape3 : array of TShape; implementation uses FrmPar, Codes, FrmLg, FrmTbl, MdlData; {$R *.dfm} procedure TMDSFrm.SliceRespons; begin XSlice := SL(StrToFloat(edXmin.Text),StrToFloat(edXmax.Text)); YSlice := SL(StrToFloat(edYmin.Text),StrToFloat(edYmax.Text)); ZSlice := SL(StrToFloat(edZmin.Text),StrToFloat(edZmax.Text)); UpdateVisual; end; procedure TMDSFrm.NmParameterClick(Sender: TObject); begin ParFrm := TParFrm.Create(Self); ParFrm.ShowModal; ParFrm.Free; end; procedure TMDSFrm.NmStartClick(Sender: TObject); begin Refresh; MultiMDS; eAPStart.ReadOnly := False; eClock.ReadOnly := False; end; procedure TMDSFrm.PMKineticClick(Sender: TObject); begin SCKinetic.Active := PMKinetic.Checked; SCPotential.Active := PMPotential.Checked; SCTotal.Active := PMTotal.Checked;
82
SCVelocities.Active := PMVelocities.Checked; Repaint; end; procedure TMDSFrm.FormPaint(Sender: TObject); begin if not(MDSChart.GetASeries=nil) then begin MDSChart.Update; MDSChart.UndoZoom; MDSChart.LeftAxis.Title.Caption := MDSChart.GetASeries.Title; end; end; procedure TMDSFrm.FormCreate(Sender: TObject); begin DefaultVal; PartColor := DefaultColor; end; procedure TMDSFrm.NmTabelClick(Sender: TObject); var IDPart : Integer; begin if not(Clock=TimeMX) then begin MessageDlg('Start the simulation first !',mtWarning,[mbOK],0); Exit; end; MDTable := TMDTable.Create(self); MDTable.ShowModal; MDTable.Free; MDTable := nil; if DataMdl.Query1.Active then DataMdl.Query1.First; while not(DataMdl.Query1.Eof) do with DataMdl do begin IDPart := Query1IdPart.Value; Part[IDPart].X.Pos := Query1X.AsFloat; Part[IDPart].Y.Pos := Query1Y.AsFloat; Part[IDPart].Z.Pos := Query1Z.AsFloat; DataMdl.Query1.Next; end; UpdateVisual; end; procedure TMDSFrm.FormClose(Sender: TObject; var Action: TCloseAction); begin with DataMdl do begin Table1.Close; // Table1.EmptyTable; Table2.Close; // Table2.EmptyTable; Ngumpul.Close; end; end;
83
procedure TMDSFrm.TabSheet2Show(Sender: TObject); begin edZmin.Text := FF(ZSlice.min); edZmax.Text := FF(ZSlice.max); edYmin.Text edYmax.Text edXmin.Text edXmax.Text end;
:= := := :=
FF(YSlice.min); FF(YSlice.max); FF(XSlice.min); FF(XSlice.max);
procedure TMDSFrm.CopytoClipboard1Click(Sender: TObject); begin MDSChart.CopyToClipboardBitmap; end; procedure TMDSFrm.SavetoClipboard1Click(Sender: TObject); begin if SavePictureDialog1.Execute then MDSChart.SaveToBitmapFile(SavePictureDialog1.FileName); end; procedure TMDSFrm.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); var IDPart : Integer; begin with DataMdl do begin StatusBar1.Panels[1].Text := 'Querying data...'; StatusBar1.Update; Query1.Close; Query1.Params[0].AsInteger := Table1IterNo.Value; Query1.ExecSQL; Query1.Open; StatusBar1.Panels[1].Text := ''; StatusBar1.Update; end; if DataMdl.Query1.Active then DataMdl.Query1.First; while not(DataMdl.Query1.Eof) do with DataMdl do begin IDPart := Query1IdPart.Value; Part[IDPart].X.Pos := Query1X.AsFloat; Part[IDPart].Y.Pos := Query1Y.AsFloat; Part[IDPart].Z.Pos := Query1Z.AsFloat; DataMdl.Query1.Next; end; UpdateVisual; end; procedure TMDSFrm.eClockKeyPress(Sender: TObject; var Key: Char); var IDPart : Integer; begin if (Key=#13) then begin
84
DataMdl.Table1.Locate('IterNo',StrToInt(eClock.Text),[loCaseIns ensitive]); with DataMdl do begin StatusBar1.Panels[1].Text := 'Querying data...'; StatusBar1.Update; Query1.Close; Query1.Params[0].AsInteger := Table1IterNo.Value; Query1.ExecSQL; Query1.Open; StatusBar1.Panels[1].Text := ''; StatusBar1.Update; end; if DataMdl.Query1.Active then DataMdl.Query1.First; while not(DataMdl.Query1.Eof) do with DataMdl do begin IDPart := Query1IdPart.Value; Part[IDPart].X.Pos := Query1X.AsFloat; Part[IDPart].Y.Pos := Query1Y.AsFloat; Part[IDPart].Z.Pos := Query1Z.AsFloat; DataMdl.Query1.Next; end; UpdateVisual; DBNavigator1.Update; end; end; procedure TMDSFrm.edZminKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) then begin if StrToFloat(edZmin.Text)>StrToFloat(edZmax.Text) then begin MessageDlg('Zmin may not be larger than Zmax',mtWarning,[mbOK],0); Exit; end; SliceRespons; end; end; procedure TMDSFrm.edYminKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) then begin if StrToFloat(edYmin.Text)>StrToFloat(edYmax.Text) then begin MessageDlg('Ymin may not be larger than Ymax',mtWarning,[mbOK],0); Exit; end; SliceRespons; end; end;
85
procedure TMDSFrm.edXminKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) then begin if StrToFloat(edXmin.Text)>StrToFloat(edXmax.Text) then begin MessageDlg('Xmin may not be larger than Xmax',mtWarning,[mbOK],0); Exit; end; SliceRespons; end; end; procedure TMDSFrm.edZmaxKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) then begin if StrToFloat(edZmax.Text)<StrToFloat(edZmin.Text) then begin MessageDlg('Zmax may not be smaller than Zmin',mtWarning,[mbOK],0); Exit; end; SliceRespons; end; end; procedure TMDSFrm.edYmaxKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) then begin if StrToFloat(edYmax.Text)<StrToFloat(edYmin.Text) then begin MessageDlg('Ymax may not be smaller than Ymin',mtWarning,[mbOK],0); Exit; end; SliceRespons; end; end; procedure TMDSFrm.edXmaxKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) then begin if StrToFloat(edXmax.Text)<StrToFloat(edXmin.Text) then begin MessageDlg('Xmax may not be smaller than Xmin',mtWarning,[mbOK],0); Exit; end; SliceRespons; end; end; procedure TMDSFrm.eAPStartKeyPress(Sender: TObject; var Key: Char); begin
86
if (Key=#13) then begin if StrToInt(eAPStart.Text)>NPart-9 then begin MessageDlg('Active Particles should be multiply of 10',mtWarning,[mbOK],0); Exit; end; Label4.Caption := 'to '+IntToStr(StrToInt(eAPStart.Text)+9); UpdateColor(PartShape1); UpdateColor(PartShape2); UpdateColor(PartShape3); UpdateVisual; end; end; procedure TMDSFrm.Legend1Click(Sender: TObject); begin if not(Clock=TimeMX) then begin MessageDlg('Start the simulation first!',mtWarning,[mbOK],0); Exit; end; LgFrm := TLgFrm.Create(Self); LgFrm.ShowModal; LgFrm.Free; LgFrm := nil; end; end.
87
B. 4. Lampiran Listing Program Unit FrmPar.pas Unit FrmPar; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons; type TParFrm = class(TForm) {bagian deklarasi sengaja dihilangkan} end; var ParFrm: TParFrm; implementation uses Codes, FrmVB, FrmMDS; {$R *.dfm} procedure TParFrm.DefaultBtnClick(Sender: TObject); begin EPartName.Text := 'Argon'; ENPart.Text := '256'; EDen.Text := '0.83134'; ESide.Text := '6.75284'; ETRef.Text := '0.722'; ERCOff.Text := '2.5'; EH.Text := '0.064'; EIRep.Text := '50'; EIStop.Text := '500'; ETimeMX.Text := '100'; EISeed.Text := '4711'; XSlice := SL(5.06463,6.75284); YSlice := SL(5.06463,6.75284); ZSlice := SL(0,1.68821); CancelBtn.Caption := '&Close'; end; procedure TParFrm.FormShow(Sender: TObject); begin EPartName.Text := PartName; ENPart.Text := IntToStr(NPart); EDen.Text := FloatToStr(Den); ESide.Text := FloatToStr(Side); ETRef.Text := FloatToStr(TRef); ERCOff.Text := FloatToStr(RCOff); EH.Text := FloatToStr(H); EIRep.Text := IntToStr(IRep); EIStop.Text := IntToStr(IStop); ETimeMX.Text := IntToStr(TimeMX); EISeed.Text := IntToStr(ISeed); end; procedure TParFrm.ApplyBtnClick(Sender: TObject); begin GetParameters; CancelBtn.Caption := '&Close'; end;
88
procedure TParFrm.FormCreate(Sender: TObject); begin CancelBtn.Caption := '&Cancel'; end; procedure TParFrm.SpeedButton1Click(Sender: TObject); begin MDBoundary := TMDBoundary.Create(Self); if MDBoundary.ShowModal=mrOK then with MDBoundary do begin XSlice := SL(StrToFloat(Xmin.Text),StrToFloat(Xmax.Text)); YSlice := SL(StrToFloat(Ymin.Text),StrToFloat(Ymax.Text)); ZSlice := SL(StrToFloat(Zmin.Text),StrToFloat(Zmax.Text)); end; MDBoundary.Free; UpdateVisual; with MDSFrm do begin edZmin.Text := FF(ZSlice.min); edZmax.Text := FF(ZSlice.max); edYmin.Text := FF(YSlice.min); edYmax.Text := FF(YSlice.max); edXmin.Text := FF(XSlice.min); edXmax.Text := FF(XSlice.max); end; end; end.
89
B. 5. Lampiran Listing Program Unit FrmVB unit FrmVB; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons; type TMDBoundary = class(TForm) {bagin deklarasi sengaja dihilangkan} end; var MDBoundary: TMDBoundary; implementation uses Codes; {$R *.dfm} procedure TMDBoundary.SliceRespons; begin XSlice := SL(StrToFloat(Xmin.Text),StrToFloat(Xmax.Text)); YSlice := SL(StrToFloat(Ymin.Text),StrToFloat(Ymax.Text)); ZSlice := SL(StrToFloat(Zmin.Text),StrToFloat(Zmax.Text)); UpdateVisual; end; procedure TMDBoundary.FormShow(Sender: TObject); begin Xmin.Text := FloatToStr(XSlice.Min); Xmax.Text := FloatToStr(XSlice.Max); Ymin.Text := FloatToStr(YSlice.Min); Ymax.Text := FloatToStr(YSlice.Max); Zmin.Text := FloatToStr(ZSlice.Min); Zmax.Text := FloatToStr(ZSlice.Max); end; procedure TMDBoundary.ZminKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) then begin if StrToFloat(Zmin.Text)>StrToFloat(Zmax.Text) then begin MessageDlg('Zmin may not be larger than Zmax',mtWarning,[mbOK],0); Exit; end; SliceRespons; end; end; procedure TMDBoundary.YminKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) then begin if StrToFloat(Ymin.Text)>StrToFloat(Ymax.Text) then begin MessageDlg('Ymin may not be larger than Ymax',mtWarning,[mbOK],0);
90
Exit; end; SliceRespons; end; end; procedure TMDBoundary.XminKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) then begin if StrToFloat(Xmin.Text)>StrToFloat(Xmax.Text) then begin MessageDlg('Xmin may not be larger than Xmax',mtWarning,[mbOK],0); Exit; end; SliceRespons; end; end; procedure TMDBoundary.ZmaxKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) then begin if StrToFloat(Zmax.Text)<StrToFloat(Zmin.Text) then begin MessageDlg('Zmax may not be smaller than Zmin',mtWarning,[mbOK],0); Exit; end; SliceRespons; end; end; procedure TMDBoundary.YmaxKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) then begin if StrToFloat(Ymax.Text)<StrToFloat(Ymin.Text) then begin MessageDlg('Ymax may not be smaller than Ymin',mtWarning,[mbOK],0); Exit; end; SliceRespons; end; end; procedure TMDBoundary.XmaxKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) then begin if StrToFloat(Xmax.Text)<StrToFloat(Xmin.Text) then begin MessageDlg('Xmax may not be smaller than Xmin',mtWarning,[mbOK],0); Exit; end; SliceRespons; end; end; end.
91
B. 6. Lampiran Listing Program Unit FrmTbl.pas unit FrmTbl; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, DBTables, Grids, DBGrids, ToolWin, ComCtrls, ExtCtrls, DBCtrls, Buttons; type TMDTable = class(TForm) {bagian deklaasi sengaja dihilangkan} end; var MDTable: TMDTable; implementation uses Codes, idGlobal, MdlData; {$R *.dfm} procedure TMDTable.FormShow(Sender: TObject); begin if not(Clock=TimeMX) then Exit; DataMdl.Table1.First; DataMdl.Table1AfterScroll(DataMdl.Table1); end; procedure TMDTable.ToolButton2Click(Sender: TObject); begin Close; end; procedure TMDTable.ToolButton1Click(Sender: TObject); const CurDir : TFileName = 'C:\MDSData\'; begin SaveDialog1.Title := 'Save Master File'; if SaveDialog1.Execute then CopyFileTo(CurDir+'Utama.db',SaveDialog1.FileName); SaveDialog1.Title := 'Save Detail File'; if SaveDialog1.Execute then CopyFileTo(CurDir+'Rinci.db',SaveDialog1.FileName) end; end.
92
B. 7. Lampiran Listing Program Unit MdlData.pas unit MdlData; interface uses SysUtils, Classes, DBTables, DB, Controls; type TDataMdl = class(TDataModule) {bagian deklarasi sengaja dihilangkan} end; function GetCode: Int64; var DataMdl: TDataMdl; implementation uses Codes, FrmMDS, FrmTbl; {$R *.dfm} function GetCode: Int64; var vYear, vMonth, vDay, vHour, vMin, vSec, vMSec : Word; sDate, sTime : String; begin DecodeDate(now,vYear,vMonth,vDay); sDate := IntToStr(vYear)+IntToStr(vMonth)+IntToStr(vDay); DecodeTime(now,vHour,vMin,vSec,vMSec); sTime := IntToStr(vHour)+IntToStr(vMin)+IntToStr(vSec)+IntToStr(vMSec); Result := StrToInt64(sDate+sTime); end; procedure TDataMdl.Table1AfterScroll(DataSet: TDataSet); begin if not(Clock=TimeMX) then Exit; if not(MDTable=nil) then with MDSFrm do begin StatusBar1.Panels[1].Text := 'Querying data...'; StatusBar1.Update; Query1.Close; Query1.Params[0].AsInteger := Table1IterNo.Value; Query1.ExecSQL; Query1.Open; StatusBar1.Panels[1].Text := ''; StatusBar1.Update; end; with MDSFrm do begin StatusBar1.Panels[1].Text := ' Clock : '+IntToStr(DataMdl.Table1IterNo.Value); StatusBar1.Update; eClock.Text := DataMdl.Table1IterNo.AsString; eClock.Update; end; end; procedure TDataMdl.Query1BeforeOpen(DataSet: TDataSet); begin MDSFrm.Cursor := crHourGlass;
93
end;
end.
B. 8. Lampiran Listing Program unit FrmLg.pas unit FrmLg; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls; type TLgFrm = class(TForm) {bagian deklarasi sengaja dihilangkan} end; var LgFrm: TLgFrm; implementation uses Codes, FrmMDS, FrmPar; {$R *.dfm} procedure TLgFrm.RefreshColor; begin plOthers.Color := PartColor[0]; pl1.Color := PartColor[1]; pl2.Color := PartColor[2]; pl3.Color := PartColor[3]; pl4.Color := PartColor[4]; pl5.Color := PartColor[5]; pl6.Color := PartColor[6]; pl7.Color := PartColor[7]; pl8.Color := PartColor[8]; pl9.Color := PartColor[9]; pl10.Color := PartColor[10]; plBG.Color := PartColor[11]; end; procedure TLgFrm.FormShow(Sender: TObject); var AP : Integer; begin if not(Clock=TimeMX) then Exit; BitBtn1.Kind := bkClose; AP := StrToInt(MDSFrm.eAPStart.Text); pl1.EditLabel.Caption := ' : '+IntToStr(AP+0); pl2.EditLabel.Caption := ' : '+IntToStr(AP+1); pl3.EditLabel.Caption := ' : '+IntToStr(AP+2); pl4.EditLabel.Caption := ' : '+IntToStr(AP+3); pl5.EditLabel.Caption := ' : '+IntToStr(AP+4); pl6.EditLabel.Caption := ' : '+IntToStr(AP+5); pl7.EditLabel.Caption := ' : '+IntToStr(AP+6);
94
pl8.EditLabel.Caption := ' : '+IntToStr(AP+7); pl9.EditLabel.Caption := ' : '+IntToStr(AP+8); pl10.EditLabel.Caption := ' : '+IntToStr(AP+9); RefreshColor; end; procedure TLgFrm.pl1DblClick(Sender: TObject); begin if ColorDialog1.Execute then (Sender as TLabeledEdit).Color := ColorDialog1.Color; if not((Sender as TLabeledEdit).Color=PartColor[(Sender as TLabeledEdit).Tag]) then BitBtn1.Kind := bkCancel; end; procedure TLgFrm.BitBtn2Click(Sender: TObject); begin PartColor[0] := plOthers.Color; PartColor[1] := pl1.Color; PartColor[2] := pl2.Color; PartColor[3] := pl3.Color; PartColor[4] := pl4.Color; PartColor[5] := pl5.Color; PartColor[6] := pl6.Color; PartColor[7] := pl7.Color; PartColor[8] := pl8.Color; PartColor[9] := pl9.Color; PartColor[10] := pl10.Color; PartColor[11] := plBG.Color; UpdateColor(PartShape1); UpdateColor(PartShape2); UpdateColor(PartShape3); UpdateVisual; BitBtn1.Kind := bkClose; end; procedure TLgFrm.SpeedButton1Click(Sender: TObject); begin PartColor := DefaultColor; RefreshColor; UpdateColor(PartShape1); UpdateColor(PartShape2); UpdateColor(PartShape3); UpdateVisual; end; end.
95
C. 1. Lampiran Tabel Utama IterNo
EK
EP
ET
PRESS
VEL
TEMP
RP
1 274.90667 -1703.43359 -1428.52692 -5.62551 0.19729 0.71871
48.04688
2 271.04411 -1699.59577 -1428.55166 -5.53018 0.19591 0.70861
46.48438
3 264.31176 -1692.90307 -1428.59131 -5.36906 0.19348 0.69101
46.09375
4 254.30537 -1682.89482 -1428.58945 -5.13903 0.18984 0.66485
44.14063
5 240.61041
-1669.0095 -1428.39909 -4.83753 0.18475 0.62905
6 223.03441 -1650.82097 -1427.78656 -4.46585 0.17799
0.5831
42.1875 39.84375
7 201.94732 -1629.30325 -1427.35593 -4.03967 0.16946 0.52797
33.20313
8
0.4671
27.73438
-1426.8906 -3.13895 0.14855 0.40671
19.53125
10 135.54998 -1562.22707 -1426.67708 -2.74892 0.13831 0.35438
15.625
178.6673 -1605.60907 -1426.94177 -3.58338 0.15938
9 155.56763 -1582.45822
11 120.94769 -1547.75727 -1426.80958 -2.45286 0.13013
0.3162
12.5
12 112.56877 -1539.28817
-1426.7194 -2.26042 0.12525
0.2943
10.9375
13 109.62388 -1536.58604 -1426.96215 -2.16451 0.12364
0.2866
9.375
14 110.40644 -1537.61303 -1427.20659 -2.13793 0.12405 0.28864
9.375
15 113.08907 -1540.49389 -1427.40482 -2.15246 0.12526 0.29566
8.98438
16 116.24316 -1544.00165 -1427.75849 -2.18636 0.12661
0.3039
10.54688
17 119.03526 -1546.75176 -1427.71651 -2.22122 0.12779
0.3112
12.10938
18 121.18071 -1549.01438 -1427.83367 -2.25383 0.12878 0.31681
12.10938
19
12.89063
122.7643 -1550.75702 -1427.99272 -2.28247 0.12989 0.32095
20 124.03178
-1552.101 -1428.06922 -2.30827 0.13095 0.32427
12.89063
21 125.26303 -1553.40899 -1428.14596 -2.33484 0.13184 0.32749
12.10938
22 126.74055 -1555.01546 -1428.27491 -2.36595
12.89063
0.1326 0.33135
23 128.68335 -1557.21497 -1428.53162 -2.40481 0.13343 0.33643 24 131.11165 -1559.70795
-1428.5963 -2.44937 0.13455 0.34278
14.0625 14.45313
25 133.77961 -1562.41787 -1428.63826 -2.49705 0.13597 0.34975
14.84375
26 136.29074 -1565.01403
-1428.7233 -2.54254 0.13746 0.35632
14.45313
27 138.32092 -1567.29248 -1428.97156 -2.58181 0.13878 0.36162
14.45313
28 139.76358
-1568.6752 -1428.91162 -2.60995
0.1398 0.36539
15.625
29 140.73359 -1569.57774 -1428.84415 -2.63008 0.14045 0.36793
14.45313
30 141.45974 -1570.22267 -1428.76294
-2.645 0.14083 0.36983
14.0625
31 142.14099 -1570.88324 -1428.74225 -2.65765
0.1412 0.37161
14.45313
32 142.83022 -1571.61245 -1428.78223 -2.66861
0.1417 0.37341
16.01563
-1428.8784 -2.67623 0.14212 0.37494
17.1875
33 143.41306 -1572.29146
34 143.68277 -1572.52736 -1428.84459 -2.67642 0.14226 0.37564
18.75
35 143.42764 -1572.31402 -1428.88638 -2.66773 0.14231 0.37497
19.92188
36 142.51149 -1571.28793 -1428.77645 -2.64712
0.1421 0.37258
21.09375
37 140.93449 -1569.72095 -1428.78646 -2.61687 0.14144 0.36846
19.14063
38 138.86769 -1567.58688 -1428.71919 -2.57882 0.14046 0.36305
16.40625
39 136.64853
16.01563
-1565.3428 -1428.69427
-2.5393 0.13932 0.35725
40 134.69603 -1563.38426 -1428.68822 -2.50495 0.13828 0.35215
15.625
41 133.35288 -1562.06588 -1428.71299 -2.48154 0.13737 0.34863
13.28125
42 132.77193 -1561.53681 -1428.76488 -2.47189 0.13664 0.34712
15.23438
43 132.93263 -1561.67162 -1428.73899
14.84375
-2.4754 0.13619 0.34754
44 133.73224 -1562.55985 -1428.82761 -2.49182 0.13612 0.34963
17.1875
45 135.04589 -1563.91423 -1428.86834 -2.51785 0.13637 0.35306
16.79688
46
17.57813
136.7086 -1565.55753 -1428.84893 -2.55027
0.1369 0.35741
47 138.49849 -1567.57874 -1429.08025 -2.58692 0.13771 0.36209 48 140.14934
-1569.3781 -1429.22877 -2.62087 0.13858
49 141.40663 -1570.79313
17.1875
0.3664
17.96875
-1429.3865 -2.64829 0.13933 0.36969
19.53125
96
51 274.55147 -1569.79827
-1295.2468 -2.35327 0.19425 0.71778
52 268.81568 -1563.96564 -1295.14996
-2.2605
0.1922 0.70279
53 259.69876 -1554.70428 -1295.00551 -2.10891
47.26563 44.92188
0.189 0.67895
43.75
54 248.51603 -1543.63488 -1295.11884 -1.92211 0.18502 0.64972
41.40625
55 237.17868 -1532.06356 -1294.88488
39.84375
-1.7264 0.18064 0.62007
56 227.78988 -1522.60119 -1294.81131 -1.55782 0.17691 0.59553
39.84375
57 221.69178 -1516.57518 -1294.88341
-1.4379 0.17473 0.57959
37.10938
58 218.83394
-1513.8422 -1295.00827 -1.36747 0.17393 0.57211
33.20313
59 218.18826
-1513.2628 -1295.07454 -1.33289 0.17357 0.57043
33.20313
60 218.44959 -1513.63115 -1295.18156 -1.31725 0.17326 0.57111
36.32813
61 218.43555 -1513.65936 -1295.22381
0.1728 0.57107
38.28125
62 217.48596 -1512.82823 -1295.34226 -1.28164 0.17209 0.56859
36.32813
63 215.75073 -1510.99076 -1295.24003 -1.25158 0.17129 0.56405
33.20313
64 213.97021 -1508.96718 -1294.99697
-1.3032
0.5594
32.8125
65 212.86671 -1507.80481
-1294.9381 -1.20568 0.16969 0.55651
30.46875
66 212.63239 -1507.55809
-1294.9257 -1.20189 0.16945
0.5559
30.07813
-1507.8018 -1295.00533 -1.20492 0.16965 0.55633
30.07813
67 212.79647
68 212.50867 -1507.58952 -1295.08085 69 211.23935 -1506.56951 -1295.33016
-1.2226 0.17043
-1.2028
0.1698 0.55558
31.25
-1.19 0.16994 0.55226
30.85938
70 209.41304 -1504.64859 -1295.23555 -1.16964 0.17012 0.54749
30.07813
71 208.12743 -1503.40758 -1295.28014 -1.16037
0.1707 0.54412
31.64063
72
0.1714 0.54428
32.03125
208.1872 -1503.27644 -1295.08924 -1.17102
73 209.64521 -1504.80809 -1295.16288 -1.20529 0.17195 0.54809 74 212.20817 -1507.39546 -1295.18728 -1.25628
34.375
0.1726 0.55479
36.32813
75 215.66539 -1510.82754 -1295.16215 -1.31959 0.17379 0.56383
36.32813
76 219.71794 -1514.86141 -1295.14348 -1.38977 0.17541 0.57443
37.89063
77 223.61102 -1518.76628 -1295.15526 -1.45515 0.17719
0.5846
39.45313
78 226.40699 -1521.48447 -1295.07747 -1.50132 0.17863 0.59191
38.28125
79 227.66105 -1522.53208 -1294.87102 -1.52184 0.17929 0.59519
40.23438
80 227.59314
-1522.3245 -1294.73136 -1.52134 0.17911 0.59501
40.23438
81 226.68757 -1521.40769 -1294.72013 -1.50757 0.17849 0.59265
41.01563
82 225.32684 -1519.81255
0.1774 0.58909
40.625
83 223.83562 -1518.40704 -1294.57142 -1.46089 0.17614 0.58519
40.23438
84 222.62563 -1517.07835 -1294.45273 -1.44009 0.17518 0.58203
37.10938
85 222.02048
-1294.4857 -1.48443
-1516.5759 -1294.55542 -1.42995 0.17474 0.58045
86 222.01073 -1516.55057 -1294.53985 -1.42867
0.1744 0.58042
37.10938 36.32813
87 222.43817 -1516.86261 -1294.42444 -1.43443 0.17394 0.58154
37.5
88 223.32426 -1517.78797 -1294.46371 -1.44916 0.17417 0.58385
36.32813
89
224.7121 -1519.06322 -1294.35111 -1.47131 0.17527 0.58748
37.5
90 226.29668 -1520.68595 -1294.38927 -1.49839 0.17656 0.59163
37.5
91 227.55419 -1522.02424 -1294.47005 -1.52232
0.1774 0.59491
36.71875
92 228.26924 -1522.64827 -1294.37903 -1.53864 0.17764 0.59678
37.10938
93
-1294.3993 -1.55334 0.17766 0.59808
38.28125
94 229.60536 -1523.84928 -1294.24392 -1.57197 0.17824 0.60028
35.9375
228.7656 -1523.16491
95 231.04879 -1525.31704 -1294.26825 -1.60001 0.17914 0.60405
39.0625
96 232.74419 -1527.15788 -1294.41369 -1.63175 0.17997 0.60848
39.45313
97 234.01181 -1528.60344 -1294.59163
39.84375
-1.6566 0.18042
0.6118
98 234.35523 -1529.16694 -1294.81171 -1.66713 0.18034 0.61269
40.23438
99 233.66807 -1528.63349 -1294.96542 -1.66072 0.17994
0.6109
39.84375
0.722
39.84375
100
276.165 -1527.24748 -1251.08248 -1.54526 0.17941
97
C. 2. Lampiran Tabel Rinci pada Iterasi ke-100 IdPart
X
Y
Z
VX
VY
VZ
FX
FY
FZ
1
0.09724
0.2542
0.05171
0.0139
0.01238
-0.00104
-0.00037
-0.00079
-0.0013
2
6.64587
6.72399
1.67482
0.00145
-0.00112
-0.01012
0
0.00037
-0.00055
3
6.66053
6.72471
3.35055
-0.00532
0.00186
0.00765
0.0008
0.00078
0.00014
4
6.71264
0.07544
5.09254
-0.0011
0.00392
0.00435
0.00018
0.00006
-0.00032
5
0.00678
1.59583
6.7225
0.00253
-0.01608
0.00109
-0.00002
0.00006
0.00024
6
6.53251
1.78435
1.54414
0.01315
0.00255
0.00554
0.00077
-0.00032
0.00032
7
0.16052
1.5382
3.26628
0.00425
-0.00958
-0.00223
0.00004
-0.00001
0.00018
8
6.74868
1.71076
5.227
-0.00515
-0.00689
0.00378
-0.00035
0.00008
0.00008 -0.00018
9
6.5861
3.46969
0.12027
0.00994
-0.00345
-0.00935
-0.00013
-0.00018
10
6.49711
3.14484
1.52193
0.00719
0.01149
-0.00672
0.0009
-0.00102
0.00001
11
6.71856
3.35799
3.15412
0.00633
0.00808
0.00044
-0.00034
-0.0003
0.00026
12
6.66194
3.43804
5.08023
0.00139
-0.00636
0.00047
0.00099
0.00017
0.00102
13
0.07291
5.1904
6.54626
-0.0052
-0.00422
-0.00356
0.00009
0.00031
0.0003
14
6.72486
5.13342
1.35584
0.00507
-0.00248
0.00047
0.00013
-0.00009
0.00049
15
0.14366
4.98201
3.39472
0.00182
-0.00261
-0.00043
0.0004
0.00073
0.00021
16
0.06246
5.25899
5.20817
0.0055
0.00401
-0.0111
-0.00004
-0.00005
-0.00021
17
1.78715
0.21738
6.61047
0.00577
-0.01287
0.01187
-0.00003
0.00008
0.0001
18
1.77669
6.73576
1.77508
0.00499
0.00118
-0.0122
-0.00028
-0.00011
-0.0001
19
1.68034
6.73383
3.24482
0.01254
0.00335
0.00372
0.00008
-0.00031
0.00012
20
1.60528
0.10316
5.15135
0.01281
-0.00483
-0.005
0.00034
-0.0002
-0.00025
21
1.8303
1.64171
6.62046
0.00101
0.01838
0.00156
-0.00035
0.00043
0.00045
22
1.59076
1.84416
1.63587
-0.00626
-0.01072
0.00738
0.00056
-0.00019
-0.00046
23
1.41546
1.54017
3.5613
0.00251
0.00188
0.0039
0.00028
0.00035
0
24
1.49999
1.7689
5.02804
0.00458
0.0015
0.01032
0.00014
0.00045
-0.00027
25
1.47903
3.60277
6.6007
0.01573
0.00838
0.00251
-0.00015
-0.00031
-0.00014
26
1.76087
3.28932
1.96924
0.00699
-0.00498
-0.01341
-0.00008
-0.00006
-0.00026
27
1.72989
3.3914
3.33651
0.01448
-0.00856
0.00883
-0.00029
0.00002
0.00009
28
1.46663
3.53998
5.24397
0.01033
-0.00471
0.00266
0.00081
0.00082
0.00002
29
1.57833
5.01286
6.7079
-0.00893
-0.00012
0.00037
0.00013
0.0001
0.00004
30
1.97715
5.17059
1.66392
-0.0079
-0.00912
0.00674
0.00025
-0.00094
-0.00085
31
1.57948
5.05789
3.14052
-0.00366
-0.00568
-0.00014
0.00001
0.00039
0.00062
32
1.69189
5.2607
4.94859
0.00639
-0.00562
0.00144
0.00007
-0.00019
0.0002
33
3.27833
0.00209
6.53427
-0.00211
0.0086
0.00183
0.00009
-0.00012
0.00039
34
3.58275
6.63094
1.84688
-0.00114
-0.00019
0.00751
-0.00009
0.00016
0.00047
35
3.35446
0.12366
3.4255
0.0068
-0.00674
0.00234
-0.00012
-0.00007
0.00023
36
3.35508
6.74064
5.07485
-0.00674
-0.00184
0.00829
0.00034
-0.00006
-0.00011
37
3.40485
1.715
6.63871
-0.00424
0.00496
0.01057
0.00006
-0.00004
-0.00037
38
3.49196
1.61192
1.65258
0.00673
0.00116
-0.00701
0.00062
-0.00003
0.00117
39
3.28554
1.64914
3.29173
-0.00072
0.00917
-0.00211
0.00026
-0.00024
0.0008
40
3.29596
1.60542
5.03601
-0.01278
-0.00819
-0.0096
0.00028
0.00016
0.00014
41
3.33216
3.38968
6.71076
0.0047
-0.0066
-0.00556
0.00025
0.0002
-0.00017
42
3.64824
3.44396
1.91339
-0.01127
-0.00538
-0.01087
-0.00018
-0.0003
-0.00002
43
3.48469
3.37402
3.25707
0.01752
-0.00134
0.00258
0.00011
0.00016
0.00008
44
3.27941
3.25516
5.09396
-0.01732
0.00481
0.00043
-0.00015
0.00011
-0.00026
45
3.31902
5.11225
6.71569
0.00451
-0.00588
-0.01856
0.00024
0.00007
-0.00025
46
3.51698
5.30317
2.00069
0.00715
-0.00006
-0.00294
0.00039
-0.00015
-0.00066
47
3.61502
4.98571
3.45017
0.00674
0.00375
-0.00702
-0.00058
0.00008
-0.0008
48
2.99698
4.9972
5.11937
-0.00573
-0.00476
-0.0133
0.00021
-0.00004
-0.00024
49
5.04941
6.7397
0.02377
-0.00413
-0.00463
0.00931
-0.00046
-0.00067
-0.00022
50
5.13312
6.69255
1.64944
0.00301
0.00104
0.0054
-0.00006
0.00007
0.00012
98
51 5.13674 6.74679 3.36885 -0.00129
0.00484 -0.01489 -0.00011
0.00017
52 4.98337 6.69062 5.19285 -0.00002
0.00713
0.00031 -0.00065
53 4.96031 1.61723 6.56339
0.00749
0.01432 -0.01168 -0.00623
54 4.85751 1.68284 1.64614 -0.01054 -0.00084 -0.00333 55 5.30779 1.65893 3.40839 56 5.08861 1.65822
-0.0103
0.00006
5.0491 -0.00745 -0.00382
57 4.99544 3.36658 6.70858
-0.0024
58 4.89274 3.05841 1.74134
0.00036
0.00004 -0.00005
0.00066
0.00014
0.00015
0.00041
0.00066 -0.00085
0.00089 -0.00004
0.00505
0.00008 -0.00034
0.00035
0.00192 -0.00078 -0.00034
0.00026
0.00279 -0.01391
0.00597
0.00002
0.00006
59 5.17501
3.4475 3.56843 -0.01621 -0.00359
0.0024
0.00008 -0.00015
-0.0001
60 4.92317
3.2624 5.01058 -0.00091
61 4.87086 5.03151
6.6582
0.01076
0.00318
0.00013
0.00039
0.00461 -0.00096
0.00023
0.00299
0.00065 -0.00008
-0.011
0.0001 -0.00018 0.00045
62 5.35908 4.95637 1.60312 -0.00036 -0.01048 -0.00906 -0.00059 -0.00037 -0.00046 63 5.17936 5.12587 3.40612 -0.00325 64 4.99657
5.0589
4.9645
0.00017
0.00029
0.00554 -0.01146 -0.00309
0.003 -0.01076 -0.00029 0.00035
0.00023
0.00057
0.00291
0.00021
0.00034 -0.00053
65
0.9332 0.92329 0.15628
0.01179 -0.02033
66
0.8373 0.54867 1.66024
-0.0076
0.00418
0.00219
0.00009
0.00032 -0.00015
67 0.89965 0.64293 3.39297 -0.00472
0.00868
0.00814 -0.00082
0.00022 -0.00031
68
0.8404 0.85508 5.02308 -0.00981 -0.00258 -0.00684
69 0.99546 2.39063 0.17864
0.01329
-0.0002
0.0004 -0.00007
-0.0032 -0.00335 -0.00016
0.00006 -0.00014
70 0.85271 2.61437 1.47998 -0.00274 -0.00355 71 0.79288 2.42427 3.45361 72 0.92555 2.73821 5.09952 73 0.64201
4.223 0.15203
-0.0097 -0.00094 0.0036 -0.01177 0.00302
0.00912
0.00086 -0.00039 0.0016 -0.00019
-0.0002
0.00375 -0.00094 -0.00148 -0.0025 -0.00002
74 1.02004 4.12458 1.58851
0.00827 -0.00361
75 0.72665 4.07001 3.15194
0.01076
0.00294
0.00378 0.0114
76 0.70253 4.36197 5.10627
0.00056
0.00055
0.00128
0.00003
0.00039 -0.00017
0.00019 -0.00013 0.00056
0.00038
0.00037 -0.00024
0.00021
0.00026 -0.00015
0.00026 -0.00007 -0.00025
77 0.86789 6.01568 0.02105 -0.00262 -0.00146 -0.00138 -0.00066 -0.00059 -0.00016 78 0.75806 5.99885 1.63527
0.01102 -0.00513
0.01382
79 0.82385 5.93007 3.19301 -0.01344 -0.00365
0.00282
80 0.85117 5.99686 5.03203
0.0099 -0.00458 -0.00428
0.0001 -0.00005 -0.00012 0.00012 -0.00011
0.00054
0.00032
0.00004
81 2.63854 0.95782 6.63227 -0.00959 -0.01556 -0.00457 -0.00007 -0.00034
0.00008
82 2.55595 0.69397 1.75547 -0.00663
0.00296
0.01039
83 2.43989 0.94878 3.37714 -0.00748 -0.01247 -0.00893
0.00004 0.00044
0.00006 -0.00009
0.00009 -0.00017 -0.00001
84 2.53696 0.77474 5.03121
0.00431
0.00137
85
0.00074
0.00154 -0.00386 -0.00026 -0.00035 -0.00005
86
2.564 2.65983 0.04831
2.5038 2.37616 1.71119 -0.00668 -0.00129
0.00502 -0.00005 -0.0016
0.00033
0.00051 0.00018
0.00107 0.00014
87 2.50195 2.47588 3.51255 -0.00616
0.00012 -0.00201
0.00153 -0.00018 -0.00061
88 2.22657 2.69661 4.91717
0.00229
0.02123
0.00021
89 2.55847 4.34363 0.06697
0.00267 -0.00817 -0.00307 -0.00008 -0.00016 -0.00013
90 2.71029
0.00202
4.2852 2.06287 -0.00469 -0.00244 -0.00034
91 2.47819 4.19384 3.26533 -0.00133
0.00072
0.00005 -0.00034 -0.00013
0.00761
0.00017
0.00025
0.00011
92 2.41969 4.02085 4.96658
-0.0014 -0.01213 -0.01379
0.00013
0.00021
0.00034
93 2.43391
0.00022
0.00393
0.00005 -0.00019 -0.00019
94 2.64834 6.03936 1.83521 -0.00257
0.01043 -0.00274
0.00027 -0.00005 -0.00016
95 2.36552 5.86846 3.30715
0.00491 -0.00791 -0.00013
6.0093 6.74728
0.01065
96 2.51903 5.98408 4.91047 -0.00173 97 4.22814
0.6272 6.55955
-0.0112
0
0.01787
0.01384
0.00597 -0.00099 -0.00472 -0.00083
98 4.33355 0.79273 1.86442 -0.00342
0.01426
99 4.21625 0.75024 3.54147 -0.02194 -0.00407 100 4.26914 0.76058 5.02514 -0.00727
0.0004
0.00046
0.00207 -0.00002 -0.00038 -0.00049 0.00065
0.00095
0.01183 -0.00031 -0.00039 -0.00006 0.00527
0.00014
0.00019 -0.00041
-0.0103 -0.01149 -0.00022 -0.00027 -0.00015
101 4.24863 2.38965 6.59776 -0.00615 -0.00409 -0.00701 -0.00015
0.00043
102 4.20243 2.36918 2.21357
0.01326
0.00332
0.00549 -0.00033
0.00016 -0.00035
103 4.35362 2.64706 3.39371
0.00476
0.00144
0.00143 -0.00224 -0.00005
104 4.07017 2.44901 4.97106
0.01204 -0.00873
0.00646
0.00034 -0.00002
0.00009
105 4.11701 4.23325 6.56375
0.00836 -0.00669 -0.01825
0.00008 -0.00004
0.00022
99
0.00003 0.00181
51
5.13674
6.74679
3.36885
-0.00129
0.00484
-0.01489
-0.00011
0.00017
0.00036
52
4.98337
6.69062
5.19285
-0.00002
0.00713
0.00749
0.00013
0.00031
-0.00065
53
4.96031
1.61723
6.56339
0.01432
-0.01168
-0.00623
0.00004
-0.00005
0.00066
54
4.85751
1.68284
1.64614
-0.01054
-0.00084
-0.00333
0.00014
0.00041
0.00015
55
5.30779
1.65893
3.40839
-0.0103
0.00006
0.00066
-0.00085
0.00089
-0.00004
56
5.08861
1.65822
5.0491
-0.00745
-0.00382
0.00505
0.00035
0.00008
-0.00034
57
4.99544
3.36658
6.70858
-0.0024
0.00318
0.00192
-0.00078
-0.00034
0.00026
58
4.89274
3.05841
1.74134
0.00279
-0.01391
0.00597
0.00039
0.00002
0.00006
59
5.17501
3.4475
3.56843
-0.01621
-0.00359
0.0024
0.00008
-0.00015
-0.0001
60
4.92317
3.2624
5.01058
-0.00091
0.00461
-0.00096
0.00023
0.0001
-0.00018
61
4.87086
5.03151
6.6582
0.01076
0.00299
-0.011
0.00065
-0.00008
0.00045
62
5.35908
4.95637
1.60312
-0.00036
-0.01048
-0.00906
-0.00059
-0.00037
-0.00046
63
5.17936
5.12587
3.40612
-0.00325
0.003
-0.01076
-0.00029
0.00017
0.00029
64
4.99657
5.0589
4.9645
0.00554
-0.01146
-0.00309
0.00035
0.00023
0.00057
65
0.9332
0.92329
0.15628
0.01179
-0.02033
0.00291
0.00021
0.00034
-0.00053
66
0.8373
0.54867
1.66024
-0.0076
0.00418
0.00219
0.00009
0.00032
-0.00015
67
0.89965
0.64293
3.39297
-0.00472
0.00868
0.00814
-0.00082
0.00022
-0.00031
68
0.8404
0.85508
5.02308
-0.00981
-0.00258
-0.00684
-0.0002
0.0004
-0.00007 -0.00014
69
0.99546
2.39063
0.17864
0.01329
-0.0032
-0.00335
-0.00016
0.00006
70
0.85271
2.61437
1.47998
-0.00274
-0.00355
0.00086
-0.00039
-0.0002
0.00038
71
0.79288
2.42427
3.45361
-0.0097
-0.00094
0.0016
-0.00019
0.00037
-0.00024
72
0.92555
2.73821
5.09952
0.0036
-0.01177
0.00375
-0.00094
-0.00148
0.00003
73
0.64201
4.223
0.15203
0.00302
0.00912
-0.0025
-0.00002
0.00039
-0.00017
74
1.02004
4.12458
1.58851
0.00827
-0.00361
0.00378
0.00019
-0.00013
0.00021
75
0.72665
4.07001
3.15194
0.01076
0.00294
0.0114
0.00056
0.00026
-0.00015
76
0.70253
4.36197
5.10627
0.00056
0.00055
0.00128
0.00026
-0.00007
-0.00025
77
0.86789
6.01568
0.02105
-0.00262
-0.00146
-0.00138
-0.00066
-0.00059
-0.00016
78
0.75806
5.99885
1.63527
0.01102
-0.00513
0.01382
0.0001
-0.00005
-0.00012
79
0.82385
5.93007
3.19301
-0.01344
-0.00365
0.00282
0.00012
-0.00011
0.00054
80
0.85117
5.99686
5.03203
0.0099
-0.00458
-0.00428
0.00004
0.00032
0.00004
81
2.63854
0.95782
6.63227
-0.00959
-0.01556
-0.00457
-0.00007
-0.00034
0.00008
82
2.55595
0.69397
1.75547
-0.00663
0.00296
0.01039
0.00044
0.00006
-0.00009
83
2.43989
0.94878
3.37714
-0.00748
-0.01247
-0.00893
0.00009
-0.00017
-0.00001
84
2.53696
0.77474
5.03121
0.00431
0.00137
0.00502
-0.00005
0.00051
0.00107 -0.00005
85
2.564
2.65983
0.04831
0.00074
0.00154
-0.00386
-0.00026
-0.00035
86
2.5038
2.37616
1.71119
-0.00668
-0.00129
-0.0016
0.00033
0.00018
0.00014
87
2.50195
2.47588
3.51255
-0.00616
0.00012
-0.00201
0.00153
-0.00018
-0.00061
88
2.22657
2.69661
4.91717
0.00229
0.02123
0.00202
0.00021
0
0.00072
89
2.55847
4.34363
0.06697
0.00267
-0.00817
-0.00307
-0.00008
-0.00016
-0.00013
90
2.71029
4.2852
2.06287
-0.00469
-0.00244
-0.00034
0.00005
-0.00034
-0.00013
91
2.47819
4.19384
3.26533
-0.00133
-0.0112
0.00761
0.00017
0.00025
0.00011
92
2.41969
4.02085
4.96658
-0.0014
-0.01213
-0.01379
0.00013
0.00021
0.00034
93
2.43391
6.0093
6.74728
0.00022
0.01787
0.00393
0.00005
-0.00019
-0.00019
94
2.64834
6.03936
1.83521
-0.00257
0.01043
-0.00274
0.00027
-0.00005
-0.00016
95
2.36552
5.86846
3.30715
0.01065
0.00491
-0.00791
-0.00013
0.0004
0.00046
96
2.51903
5.98408
4.91047
-0.00173
0.01384
0.00207
-0.00002
-0.00038
-0.00049
97
4.22814
0.6272
6.55955
0.00597
-0.00099
-0.00472
-0.00083
0.00065
0.00095
98
4.33355
0.79273
1.86442
-0.00342
0.01426
0.01183
-0.00031
-0.00039
-0.00006
99
4.21625
0.75024
3.54147
-0.02194
-0.00407
0.00527
0.00014
0.00019
-0.00041
100
4.26914
0.76058
5.02514
-0.00727
-0.0103
-0.01149
-0.00022
-0.00027
-0.00015
101
4.24863
2.38965
6.59776
-0.00615
-0.00409
-0.00701
-0.00015
0.00043
0.00003
102
4.20243
2.36918
2.21357
0.01326
0.00332
0.00549
-0.00033
0.00016
-0.00035 0.00181
103
4.35362
2.64706
3.39371
0.00476
0.00144
0.00143
-0.00224
-0.00005
104
4.07017
2.44901
4.97106
0.01204
-0.00873
0.00646
0.00034
-0.00002
0.00009
105
4.11701
4.23325
6.56375
0.00836
-0.00669
-0.01825
0.00008
-0.00004
0.00022
100
161
4.31966
6.7478
0.82438
-0.01115
-0.00817
0.00157
0.00061
-0.00032
-0.00003
162
4.27304
6.64845
2.69123
-0.00349
0.00832
-0.00738
-0.00001
0.00031
-0.00003
163
4.17014
0.00239
4.24528
0.00707
-0.01376
-0.00437
0.00017
-0.00059
0.0002
164
4.18727
6.61316
5.89476
-0.00086
-0.00015
0.02014
-0.00051
0.00026
-0.00102
165
4.13266
1.35351
0.60699
0.00959
0.00135
-0.00448
0.00044
0.00034
-0.00005
166
4.28006
1.47181
2.78481
0.00236
-0.00637
0.00706
-0.00003
0.00031
-0.00011
167
4.35808
1.676
4.13666
-0.0125
0.01468
-0.00895
-0.00046
0.00049
-0.00002
168
4.32925
1.50666
5.72981
-0.00294
-0.01827
-0.00344
-0.00113
0.00082
0.00048
169
4.35618
3.37595
0.91679
-0.01343
-0.00701
0.00279
-0.00049
-0.00038
-0.00056
170
4.52218
3.43869
2.65618
0.00608
0.00133
0.00505
-0.00031
0.00028
0.00017
171
4.03431
3.3021
4.19299
-0.0067
-0.00211
0.00136
0.00039
0.00007
0.00034
172
4.10141
3.42603
5.79081
-0.01277
-0.00429
-0.00316
0.00023
-0.00034
0.00025
173
4.19991
5.11454
1.09325
-0.00192
-0.00338
0.00424
-0.00016
-0.00022
-0.00002
174
4.49245
5.06392
2.55638
0.00662
0.00665
0.00232
0.00034
0.0006
-0.00004
175
4.27376
5.03207
4.21846
-0.01185
0.00695
0.0185
0.00025
0.00023
0.00036
176
4.13405
5.23529
5.9647
-0.00949
0.00373
0.0002
-0.00039
-0.00138
-0.00141
177
5.8036
0.07856
0.78379
-0.00108
-0.00919
0.0117
0.0003
-0.00014
0.00013
178
5.88952
0.0125
2.58248
-0.00599
-0.00897
0.00628
0.00005
0.00005
-0.00014
179
5.91677
6.71729
4.29365
-0.01114
-0.00284
0.0041
0.00002
0.00087
-0.00056
180
5.99386
0.05452
5.9123
0.00428
0.00397
0.00252
-0.00058
0.00027
0.00018
181
5.89333
1.6489
0.74111
0.00113
0.00747
-0.00694
-0.00043
-0.00027
-0.00043
182
6.05019
1.58944
2.58085
-0.00034
0.00573
0.01983
-0.00079
0.00053
0.0001
183
6.18721
1.86346
4.11295
-0.00189
-0.00137
0.00168
-0.00004
-0.00027
0.00009
184
5.83186
1.65255
5.98044
0.00218
0.0031
-0.01659
0.00036
0.00007
-0.00034
185
5.65423
3.32209
0.84056
0.00266
0.01227
-0.00522
-0.00007
-0.00027
-0.00024
186
5.73671
3.30308
2.59292
0.00319
0.01386
0.00602
0.00045
0.00039
-0.00034
187
5.93921
3.32591
4.40238
-0.01019
0.01094
0.00356
-0.00184
0.00054
-0.00057
188
5.63012
3.25025
5.89487
0.00164
0.00223
0.00389
0.00089
0.00052
-0.0004
189
5.98107
4.95453
0.55813
-0.00532
0.00569
-0.00409
-0.00015
0.00014
0.00004
190
5.96216
5.16593
2.40476
-0.0052
0.00664
0.00889
0.00023
-0.00032
0.00062
191
6.03851
5.15322
4.43297
0.00905
0.00564
-0.00104
-0.00014
-0.00003
-0.00019
192
5.96138
5.23575
5.86008
-0.02216
0.01098
-0.00817
-0.00033
-0.00002
0.00004
193
6.71344
0.73167
0.9114
0.00562
0.0094
-0.00996
-0.00009
0.00086
0.0009
194
0.03302
0.93882
2.33781
0.00052
-0.00221
0.00255
0.00069
-0.00063
-0.00017
195
6.67899
0.89019
4.35201
0.00451
0.00876
0.00381
0.00007
0.00002
-0.00009
196
0.0086
0.91568
5.89474
0.0134
0.01801
0.00614
0.00001
-0.00032
0.00025
197
6.55702
2.4803
0.64183
0.01679
-0.0105
-0.01186
0.00054
0.0002
0.00021
198
6.69364
2.49529
2.40552
0.00623
0.0065
-0.00004
-0.00033
-0.00027
0.00009
199
0.00382
2.79187
4.2327
-0.00311
0.00667
-0.00287
0.00104
-0.00063
-0.00046
200
0.07056
2.53063
6.09248
0.00514
0.00312
-0.00762
-0.00074
-0.00009
0.00012
201
0.05759
4.08941
1.16031
0.00087
-0.00722
-0.00886
-0.00031
0.00021
-0.00036
202
6.61275
4.09218
2.33583
0.01615
-0.00242
0.00951
0.00104
0.00037
0.00086
203
0.06609
4.12503
4.02227
0.00492
0.00165
-0.00458
-0.00012
-0.00032
0.00044
204
0.01657
4.3335
5.92674
-0.0044
-0.00226
-0.00123
-0.00007
-0.00029
0.00014
205
6.65504
6.03032
0.81856
-0.00136
0.00425
0.00173
0.00038
0.00044
-0.00075
206
6.62368
5.98414
2.36347
0.00824
-0.003
-0.00897
-0.00024
-0.0011
0.00068
207
0.10626
5.93681
4.20235
0.0081
0.00059
-0.00642
-0.00022
0.00016
-0.00001
208
0.01435
6.1208
5.89009
0.01265
-0.00081
-0.00345
0.0004
-0.00055
0.00028
209
1.81755
1.01094
0.97695
0.0128
-0.00921
0.00185
-0.00007
-0.00022
-0.00025
210
1.60169
0.89766
2.62061
-0.00452
-0.00292
0.00696
0.00018
0.00009
-0.00036
211
1.75831
0.69854
4.17678
0.00894
0.00464
-0.00706
-0.00144
0.00088
0.00009
212
1.71395
1.06482
5.75124
-0.00444
0.001
-0.0011
0.00003
-0.00066
0.00018
213
1.7625
2.73804
0.92493
0.00319
-0.00185
-0.00113
-0.00003
0
-0.00019
214
1.84733
2.46802
2.71294
0.00818
-0.00026
0.00086
-0.00045
-0.00027
-0.00041
215
1.69079
2.52744
4.05141
0.00357
-0.01052
-0.0014
-0.00149
-0.00012
0.00064
101
216
1.63024
2.60353
6.0007
-0.01083
-0.00046
-0.00949
-0.00019
-0.00016
-0.00008
217
1.7227
4.0042
0.72933
-0.00876
-0.01376
-0.01099
0.00011
0.0004
0.00093
218
1.64844
4.26353
2.4946
-0.00556
-0.00365
-0.00822
0.0001
-0.00043
-0.00029
219
1.73725
4.28842
4.14126
0.01232
-0.00186
-0.00486
-0.00016
-0.00005
-0.00008
220
1.67924
4.4003
5.79803
-0.00444
-0.01029
0.00538
0.00012
0.00025
0.00011
221
1.63011
5.92141
0.78764
0.00276
0.00345
-0.00018
0.00016
-0.00002
0.00021
222
1.72969
5.82959
2.36109
-0.00213
0.00802
-0.00222
-0.00055
0.00076
0.00113
223
1.58873
6.05843
4.13755
-0.00951
-0.00012
-0.00775
0.00032
0.00004
0.00004
224
1.51455
6.12821
5.98977
-0.00502
0.0027
-0.0037
0.00075
0.00006
-0.00055
225
3.56943
0.63444
1.09084
0.01108
-0.00599
-0.00336
-0.00094
0.00009
0.00017
226
3.37363
0.80509
2.63217
-0.0132
0.0161
-0.00363
0.00037
-0.00021
-0.0005
227
3.41146
0.79161
4.3179
-0.00512
0.01372
0.01436
-0.0001
0.00022
-0.00018
228
3.35555
0.82518
5.83946
0.00804
0.00517
0.01292
0.00024
0.0001
-0.0003
229
3.7077
2.30973
0.83715
-0.02288
0.00474
0.00647
0.00009
0.00044
-0.00004
230
3.24317
2.46459
2.66699
-0.00454
-0.01472
0.00009
0.00006
0.0001
-0.00036
231
3.40657
2.49922
4.10596
0.0036
-0.00766
0.00246
-0.00038
-0.00052
-0.00009
232
3.37438
2.43188
5.83597
-0.00717
0.0001
0.00883
0.0009
0.0007
0.00004
233
3.47662
4.08847
0.84185
-0.00332
-0.0043
0.00296
0.00003
0.00013
0.00002
234
3.86978
4.27157
2.58919
0.00768
0.01586
0.01402
-0.00089
-0.0003
0.00024
235
3.27865
4.16463
4.12858
0.00379
-0.00391
-0.00171
0.00024
0.00024
0.00009
236
3.30983
4.21071
5.82697
0.01306
0.00292
-0.00714
-0.00019
-0.00005
0.00001
237
3.48198
6.06971
0.96042
-0.00304
0.00823
0.00492
0.00038
0.00043
-0.00025
238
3.39519
5.92745
2.85087
0.00122
0.00656
-0.00242
0.00042
0.00062
0.00013
239
3.37342
5.97019
3.96439
0.00359
-0.0062
-0.00126
-0.00006
-0.00028
0.00036
240
3.29873
5.8559
5.88295
-0.00081
0.00557
0.00706
0.00019
0.00004
-0.00013
241
5.09372
0.93064
0.93305
0.00369
0.01437
-0.01616
-0.00004
-0.00043
-0.0002
242
5.12825
0.84005
2.58567
-0.01502
0.01414
-0.00464
0.00031
-0.00011
0.00016
243
5.03052
0.89786
4.24938
-0.01108
0.0115
0.00242
0.0005
-0.00057
0.0001
244
4.99106
0.73316
5.91164
0.00953
-0.00416
0.00051
0.00053
-0.00027
-0.00116
245
4.98367
2.34691
0.73569
-0.00702
-0.0005
0.01032
-0.00005
0.00007
0.00002
246
5.05953
2.56
2.77621
-0.0127
0.00443
0.0043
0.00218
-0.00116
-0.00169
247
5.1074
2.53118
4.22092
-0.00454
0.00421
-0.00143
0.00011
-0.00019
-0.00007
248
4.94683
2.50522
5.75612
-0.00961
-0.00165
0.00047
-0.00039
-0.00074
0.00014
249
4.96528
4.2139
0.74055
0.00935
0.00672
-0.01165
0.00031
0.00045
-0.00023
250
5.23745
4.25884
2.69395
0.00203
0.00401
-0.00821
-0.00051
-0.00002
-0.00054
251
5.31551
4.25858
4.31247
-0.01006
0.019
0.00228
-0.00013
-0.00003
-0.00019
252
4.96347
4.27142
5.75932
0.02157
0.00576
0.01625
-0.00011
-0.00013
0.00019
253
5.03742
5.76199
0.88446
0.01185
0.0192
-0.00449
0.00014
0.00029
-0.00023
254
5.18219
5.9173
2.6263
-0.00191
0.01672
-0.00312
0.00018
0.00013
-0.00002
255
5.09665
5.89336
4.22054
0.00201
-0.01537
-0.0106
0.00042
0.00013
0.00058
256
4.95437
5.8893
5.87253
-0.0067
0.0054
-0.01207
0.00083
-0.0003
0
102