Page 1
Laporan Tugas Akhir
PERANCANGAN DAN ANALISA SIMULASI DINAMIKA
MOLEKUL ENSEMBLE MIKROKANONIKAL DAN KANONIKAL
DENGAN POTENSIAL LENNARD JONES
Diajukan untuk memenuhi syarat kelulusan
tahap sarjana di departemen Teknik Fisika
Institut Teknologi Bandung
Oleh:
AREE WITOELAR 13396018
Pembimbing:
Hermawan K. Dipojono, Dr., Ir.
Nugraha, Dr., Ir.
DEPARTEMEN TEKNIK FISIKA
FAKULTAS TEKNOLOGI INDUSTRI
INSTITUT TEKNOLOGI BANDUNG
2002
i
Page 2
PERANCANGAN DAN ANALISA SIMULASI DINAMIKA
MOLEKUL ENSEMBLE MIKROKANONIKAL DAN KANONIKAL
DENGAN POTENSIAL LENNARD JONES
Oleh:
AREE WITOELAR 13396018
Disahkan oleh:
Pembimbing I Pembimbing II
Hermawan K. Dipojono, Dr., Ir. Nugraha, Dr., Ir.
DEPARTEMEN TEKNIK FISIKA
FAKULTAS TEKNOLOGI INDUSTRI
INSTITUT TEKNOLOGI BANDUNG
2002
ii
Page 3
1.1 ABSTRAK
Perancangan material baru dengan sifat-sifat tertentu sangat berguna untuk
berbagai bidang. Namun perancangan material dengan eksperimen membutuhkan biaya
mahal. Salah satu solusi adalah dengan melakukan eksperimen komputer dengan teknik
dinamika molekul.
Dinamika Molekul adalah teknik simulasi komputer yang mengamati pergerakan
molekul-molekul yang saling berinteraksi. Dari molekul-molekul ini, dapat diperoleh
sifat material yang diamati. Dinamika molekul banyak digunakan dalam berbagai
bidang ilmu untuk mempelajari material.
Berdasarkan itu, maka dirancang suatu simulasi dinamika molekul untuk sistem
terisolasi (ensemble mikrokanonikal) dan sistem dengan pengendalian temperatur
(ensemble kanonikal). Untuk menguji kebenaran simulasi, maka digunakan model
potensial Lennard-Jones dan dilakukan analisa hasil simulasi dengan berbagai
parameter. Perangkat lunak simulasi dikembangkan dengan bahasa pemrograman C++
dengan berorientasi obyek.
Data yang diperoleh menunjukkan bahwa simulasi dinamika molekul untuk
ensemble mikrokanonikal dan kanonikal memenuhi spesifikasi ketelitian yang
dibutuhkan. Simulasi dinamika molekul dapat digunakan atau dikembangkan dalam
penelitian selanjutnya.
iii
Page 4
DAFTAR ISI DAFTAR ISI ......................................................................................................... i
DAFTAR GAMBAR........................................................................................... iv
DAFTAR NOTASI ............................................................................................. vi
BAB 1 PENDAHULUAN.....................................................................................1
1.1 Latar Belakang Masalah ........................................................................1
1.2 Perumusan Masalah...............................................................................2
1.3 Tujuan Penelitian...................................................................................2
1.4 Pembatasan Masalah .............................................................................2
1.5 Sistematika Pembahasan .......................................................................3
BAB 2 DASAR TEORI........................................................................................5
2.1 Dinamika Molekul.................................................................................5
2.1.1 Ensemble ...........................................................................................6
2.1.1.1 Ensemble Mikrokanonikal (E, V, N)..........................................6
2.1.1.2 Ensemble Kanonikal (T, V, N)...................................................7
2.1.1.3 Ensemble Isobarik-Isotermal (P, T, N).......................................7
2.1.2 Langkah-Langkah Simulasi Dinamika Molekul................................7
2.1.3 Syarat Batas Periodik ........................................................................8
2.2 Mekanika Klasik..................................................................................10
2.3 Mekanika Statistik ...............................................................................11
2.3.1 Energi Total .....................................................................................11
2.3.2 Temperatur ......................................................................................12
2.3.3 Distribusi Kecepatan........................................................................12
2.3.4 Tekanan ...........................................................................................13
2.3.5 Entalpi..............................................................................................14
2.4 Model Interaksi Antar Molekul ...........................................................14
2.4.1 Potensial Lennard-Jones ..................................................................15
2.4.2 Gaya.................................................................................................16
2.4.3 Pemotongan Potensial .....................................................................17
2.5 Pengendalian Temperatur ....................................................................17
i
Page 5
2.5.1 Velocity Scaling ..............................................................................18
2.5.2 Termostat Nose-Hoover ..................................................................18
2.5.3 Termostat Berendsen .......................................................................20
2.6 Pengendalian Tekanan.........................................................................21
2.7 Pengembangan Persamaan Gerak Diskrit............................................21
2.7.1 Algoritma Verlet..............................................................................22
2.7.2 Algoritma Leap-Frog.......................................................................23
2.7.3 Algoritma Verlet dengan Pengendalian Temperatur .......................24
2.7.4 Pendiskritan ζ untuk Termostat Nose-Hoover dan Berendsen ......25
BAB 3 PERANCANGAN SIMULASI DINAMIKA MOLEKUL.....................26
3.1 Garis Besar ..........................................................................................26
3.1.1 Prosedur Simulasi ............................................................................26
3.1.2 Parameter Simulasi ..........................................................................29
3.1.2.1 Kotak Simulasi dan Syarat Batas Periodik...............................29
3.1.2.2 Pemotongan Potensial ..............................................................30
3.1.2.3 Posisi Awal ...............................................................................30
3.1.3 Paralelisasi .......................................................................................31
3.1.3.1 Dinamika molekul paralel dengan dekomposisi atom..............32
3.1.3.2 Dinamika molekul paralel dengan dekomposisi geometrik .....32
3.2 Perangkat Lunak..................................................................................33
3.2.1 Kandidat Kelas ................................................................................33
3.2.2 Atribut Kelas ...................................................................................33
3.2.2.1 Simulation.................................................................................34
3.2.2.2 Molekul.....................................................................................34
3.2.2.3 Parameter ..................................................................................35
3.2.2.4 Property ....................................................................................36
3.2.2.5 Initialize ....................................................................................37
3.2.2.6 Verlet ........................................................................................37
3.2.2.7 LennardJones ............................................................................37
3.2.3 Operasi Kelas...................................................................................37
3.2.3.1 Simulation.................................................................................37
ii
Page 6
3.2.3.2 Molecule ...................................................................................38
3.2.3.3 Parameter ..................................................................................38
3.2.3.4 Property ....................................................................................38
3.2.3.5 Initialize ....................................................................................38
3.2.3.6 Verlet ........................................................................................40
3.2.3.7 LennardJones ............................................................................40
3.2.4 Hubungan Antar Kelas ....................................................................41
3.2.5 Interface (Antar Muka)....................................................................42
BAB 4 ANALISA ...............................................................................................43
4.1 Simulasi Sistem Mikrokanonikal ........................................................43
4.1.1 Uji Kesalahan Energi Simulasi........................................................43
4.1.2 Momentum ......................................................................................46
4.1.3 Uji Simulasi Terhadap Temperatur Awal........................................48
4.2 Simulasi Ensemble Kanonikal.............................................................50
4.2.1 Termostat Nose Hoover...................................................................50
4.2.1.1 Pengujian Terhadap Parameter Nose Hoover Q.......................50
4.2.1.2 Uji Hamiltonian ........................................................................52
4.2.1.3 Error Temperatur pada Perubahan Tset .....................................53
4.2.1.4 Penurunan Matematis ...............................................................54
4.2.2 Termostat Berendsen .......................................................................57
4.2.2.1 Pengujian Terhadap Parameter Berendsen Q ...........................57
4.2.2.2 Error Temperatur pada Perubahan Tset .....................................58
4.2.2.3 Penurunan Matematis ...............................................................59
4.3 Tekanan terhadap Temperatur .............................................................61
4.4 Entalpi..................................................................................................63
4.5 Posisi....................................................................................................64
BAB 5 KESIMPULAN DAN SARAN...............................................................66
5.1 Kesimpulan..........................................................................................66
5.2 Saran ....................................................................................................66
DAFTAR PUSTAKA..........................................................................................68
LAMPIRAN A LISTING PROGRAM ...............................................................70
iii
Page 7
DAFTAR GAMBAR
Gambar 2.1 Sistem yang diamati dalam simulasi dinamika molekul................................5
Gambar 2.2 Langkah-langkah simulasi dinamika molekul. [2] ........................................8
Gambar 2.3 Pembagian materi menjadi sel primer dan sel citra. ......................................9
Gambar 2.4 Distribusi kecepatan molekul pada berbagai temperatur [2] .......................13
Gambar 2.5 Potensial Lennard-Jones ..............................................................................16
Gambar 2.6 Pemasangan reservoir kalor pada sistem .....................................................19
Gambar 2.7 Pemasangan reservoir kalor dan reservoir tekanan pada sistem..................21
Gambar 3.1 Penghasilan trajektori molekul. [1]..............................................................26
Gambar 3.2 Prosedur simulasi dinamika molekul...........................................................28
Gambar 3.3 Syarat batas periodik untuk molekul yang keluar dari kotak simulasi. .......29
Gambar 3.4 Syarat batas periodik untuk jarak antar molekul .........................................30
Gambar 3.5 Penggunaan linked-list untuk molekul ........................................................35
Gambar 3.6 Penambahan molekul dalam linked-list [11] ...............................................39
Gambar 3.7 Hubungan antar kelas ..................................................................................42
Gambar 3.8 Contoh tampilan Simulasi Dinamika Molekul ............................................42
Gambar 4.1 Grafik perbandingan energi kinetik dan energi potensial............................44
Gambar 4.2 Grafik error energi total pada t∆ = 0,005 ....................................................44
Gambar 4.3 Grafik error energi total pada t∆ = 0,01 ......................................................45
Gambar 4.4 Grafik error energi total pada t∆ = 0,02 ......................................................45
Gambar 4.5 Grafik error energi total pada t∆ = 0,05 ......................................................46
Gambar 4.6 Grafik momentum total pada sumbu x, y dan z...........................................47
Gambar 4.7 Grafik temperatur terhadap waktu ...............................................................48
Gambar 4.8 Error energi total besar pada temperatur tinggi ...........................................49
Gambar 4.9 Lompatan energi potensial...........................................................................49
Gambar 4.10 Grafik temperatur dengan termostat Nose-Hoover Q = 1 .........................50
Gambar 4.11 Grafik temperatur dengan termostat Nose-Hoover Q = 5 .........................51
Gambar 4.12 Grafik temperatur dengan termostat Nose-Hoover Q = 15 .......................51
Gambar 4.13 Grafik Error Hamiltonian terhadap waktu.................................................52
iv
Page 8
Gambar 4.14 Temperatur pada perubahan Tset dengan termostat Nose-Hoover..............53
Gambar 4.15 Perubahan ζ dan ζ& terhadap waktu.........................................................54
Gambar 4.16 Grafik temperatur dengan termostat Berendsen Q = 0,1 ...........................57
Gambar 4.17 Grafik temperatur dengan termostat Berendsen Q = 1 ..............................58
Gambar 4.18 Grafik temperatur dengan termostat Berendsen Q = 10 ............................58
Gambar 4.19 Temperatur pada perubahan Tset dengan termostat Berendsen ..................59
Gambar 4.20 Perbandingan tekanan dan temperatur sistem............................................61
Gambar 4.21 Perbandingan komponen Pm dan Pf dari tekanan sistem ...........................62
Gambar 4.22 Perbandingan entalpi dan tekanan sistem..................................................63
v
Page 9
DAFTAR NOTASI
A Luas
ia Percepatan molekul i
E Energi total
F Gaya
H Hamiltonian
H Entalpi
K Energi kinetik
Bk Konstanta Boltzmann
P Tekanan
p Momentum
L Rusuk kotak simulasi
m Massa
N Jumlah molekul
Q Parameter pengendalian temperatur
cR Radius cutoff
iR Posisi molekul i
ijR Jarak antar molekul
T Temperatur
setT Temperatur set
U Energi potensial
V Volume
iv Kecepatan molekul i
t∆ Time step
ε Parameter kekuatan interaksi
σ Parameter panjang interaksi
ζ Variabel pengendali temperatur
vi
Page 10
β t∆≡ ..21 ζβ
s Variabel Nose
vii
Page 11
BAB 2
PENDAHULUAN
2.1 LATAR BELAKANG MASALAH
Teori-teori baru mengenai material pada skala atomik mempermudah
peneliti untuk memprediksi perilaku material pada skala makroskopik dan
memberikan kemampuan untuk merancang material-material baru dengan sifat-
sifat tertentu yang diinginkan. Namun analisa dan rancangan material dahulu
hanya dapat dilakukan dengan eksperimen berkali-kali yang memerlukan biaya
yang sangat mahal dan waktu yang lama. Selain itu, ada berbagai kondisi yang
sulit atau tidak bisa diimplementasikan, antara lain eksperimen pada suhu yang
sangat tinggi atau tekanan yang sangat besar.
Dengan adanya kemajuan dalam ilmu komputer dan kemampuan
komputasi yang jauh lebih kuat daripada dahulu, terbuka kemungkinan baru yaitu
eksperimen komputer. Eksperimen komputer adalah jembatan antara teori dan
eksperimen yang telah diterima sebagai salah satu metoda penelitian dan
pengembangan material. Suatu eksperimen material secara fisik dapat didahului
oleh eksperimen komputer untuk menentukan kondisi yang dibutuhkan atau
memprediksi hasilnya. Eksperimen komputer dapat berfungsi untuk
mengkomplemen eksperimen [1].
Keuntungan eksperimen komputer adalah harga yang relatif lebih murah
dan mudah meskipun untuk sistem yang kompleks. Selain itu, kemampuan
eksperimen komputer meningkat sejalan dengan kemajuan komputer.
Dinamika Molekul adalah teknik simulasi komputer yang mengamati
pergerakan molekul-molekul yang saling berinteraksi. Teknik ini mensimulasikan
molekul-molekul yang saling menarik dan mendorong dan menabrak satu sama
lain. Simulasi dinamika molekul memberikan informasi statik dan dinamik pada
skala atomik, seperti posisi dan kecepatan. Informasi ini lalu dapat diolah menjadi
informasi pada skala makroskopis seperti tekanan, temperatur dan lain-lain.
1
Page 12
Berbeda dengan beberapa teknik simulasi lainnya (lihat di [2]), dinamika
molekul bersifat deterministik. Jika keadaan suatu materi diketahui pada waktu
tertentu, maka keadaan materi tersebut pada waktu berbeda dapat ditentukan
dengan sempurna.
2.2 PERUMUSAN MASALAH
Terdapat dua masalah utama saat merancang simulasi dinamika molekul.
Pertama adalah pemodelan sistem yang terdiri dari model interaksi antar molekul
dan interaksi antara sistem dengan lingkungan. Kedua adalah pemilihan algoritma
dan metoda numerik.
Pemodelan sistem akan menentukan kebenaran hasil simulasi dari segi
fisis. Namun hasil yang lebih akurat memerlukan model yang lebih kompleks dan
sulit dipecahkan dan membutuhkan waktu komputasi lebih lama. Pemodelan dan
metoda numerik yang semakin akurat memerlukan komputasi yang lebih mahal.
Karena salah satu hambatan terbesar adalah keterbatasan kemampuan komputasi,
maka suatu kompromi dibutuhkan antara ketelitian simulasi dengan kecepatan
simulasi.
2.3 TUJUAN PENELITIAN
Penelitian ini memiliki tujuan:
1. Memahami prinsip dinamika molekul
2. Mengembangkan simulasi dinamika molekul dengan algoritma yang tepat
dan efisien
3. Melakukan uji coba simulasi dinamika molekul dengan berbagai
parameter dan kondisi yang berbeda
2.4 PEMBATASAN MASALAH
Penelitian dengan simulasi dinamika molekul di laporan ini dibatasi:
1. Materi yang diamati berada dalam fasa padat sepanjang simulasi dengan
formasi kristal kubus.
2
Page 13
2. Simulasi dilakukan dibatasi pada energi total sistem konstan dan
temperatur sistem konstan.
3. Model potensial intermolekuler yang digunakan adalah potensial Lennard-
Jones [2].
4. Algoritma persamaan gerak yang digunakan adalah algoritma Verlet [2].
5. Model interaksi sistem dengan lingkungan dibatasi pada metoda Velocity
Scaling [1], thermostat Nose-Hoover [8] dan termostat Berendsen [9].
2.5 SISTEMATIKA PEMBAHASAN
Penelitian dilakukan dengan langkah-langkah sebagai berikut:
1. Studi literatur mengenai termodinamika statistik dan simulasi dinamika
molekul.
2. Studi literatur mengenai teknik dan bahasa pemrograman C++.
3. Perancangan perangkat lunak simulasi dinamika molekul.
4. Menjalankan simulasi dengan berbagai parameter.
5. Analisa hasil simulasi.
6. Penulisan laporan.
Laporan tugas akhir ini disusun dalam lima bab.
Bab I Pendahuluan
Bab ini menjelaskan latar belakang, perumusan masalah, tujuan penelitian,
pembatasan masalah penelitian, dan sistematika pembahasan.
Bab II Dasar teori
Bab ini menjelaskan landasan teori yang digunakan dalam penelitian ini,
yaitu dasar dinamika molekul, model interaksi antar molekul, model
interaksi sistem dengan lingkungan dan dasar mekanika statistik yang
digunakan untuk mengolah informasi.
Bab III Perancangan
Bab ini membahas implementasi teori yang dijelaskan pada bab II ke
dalam perangkat lunak. Perancangan perangkat lunak menggunakan
bahasa pemrograman C++ dengan pemrograman berorientasi obyek.
Bab IV Analisa
3
Page 14
Bab ini memberikan hasil uji coba simulasi dinamika molekul untuk
melihat kesesuaian dengan spesifikasi yang diinginkan dan analisa hasil
yang diperoleh.
Bab V Kesimpulan dan Saran
Bab ini memberikan kesimpulan penelitian dan saran-saran untuk
penelitian selanjutnya.
4
Page 15
BAB 3
DASAR TEORI
3.1 DINAMIKA MOLEKUL
Dinamika molekul mengamati molekul-molekul dalam suatu sistem
tertutup, di mana jumlah materi (molekul) dalam sistem tidak berubah. Energi
dapat keluar atau masuk sistem, tergantung dari jenis simulasi yang dilakukan.
Suatu sistem adalah suatu kuantitas materi atau volume yang dipilih untuk
diamati, sedangkan materi dan volume di luar sistem disebut lingkungan [3].
Pemisah antara sistem dan lingkungan disebut batas, yang secara teoritis tidak
memiliki massa ataupun volume tersendiri. Sistem terbagi atas sistem tertutup,
jika materi tidak dapat menembus batas, dan sistem terbuka, jika materi dapat
menembus batas.
SISTEM
MOLEKULBATAS
LINGKUNGAN
Gambar 3.1 Sistem yang diamati dalam simulasi dinamika molekul
Materi pada skala makroskopis terdiri dari molekul-molekul berjumlah
sangat besar (bilangan Avogadro berorde 1023). Karena keterbatasan komputasi,
maka simulasi dinamika molekul hanya dapat melakukan perhitungan untuk
ratusan atau ribuan molekul. Semakin banyak molekul dalam simulasi, semakin
realistis hasil yang diperoleh, tetapi biaya komputasi semakin mahal.
5
Page 16
Tujuan pertama simulasi dinamika molekul adalah menghasilkan trajektori
molekul-molekul sepanjang suatu jangka waktu terhingga. Pada setiap waktu,
molekul-molekul dalam simulasi memiliki suatu posisi dan momentum tertentu
untuk masing-masing sumbu. Untuk N molekul dalam ruang 3 dimensi, terdapat
ruang posisi berdimensi 3N dan ruang momentum berdimensi 3N, sehingga
terbentuk ruang fasa berdimensi 6N. Suatu konfigurasi posisi dan momentum
molekul-molekul dapat diartikan sebagai koordinat dalam ruang fasa tersebut.
Menurut Boltzmann [2], dengan jangka waktu yang cukup, suatu sistem
akan pernah memiliki semua konfigurasi yang mungkin terjadi. Dengan kata lain,
sistem tersebut akan pernah berada pada setiap koordinat dalam ruang fasa.
Ruang fasa ini merupakan informasi keadaan mikroskopis sistem.
Informasi ini lalu digunakan untuk memperoleh keadaan makroskopis sistem dan
memprediksi ruang fasa pada waktu selanjutnya. Ruang fasa yang berbeda dapat
menghasilkan keadaan makroskopis yang sama. Dengan kata lain, suatu keadaan
makroskopis belum pasti berasal dari satu keadaan mikroskopis yang unik.
3.1.1 Ensemble
Suatu ensemble adalah koleksi dari keadaan sistem yang mungkin yang
memiliki keadaan mikroskopis berbeda tetapi memiliki keadaan makroskopis
sama [4]. Contohnya adalah sistem dengan konfigurasi posisi atau momentum
yang berbeda namun memiliki temperatur yang sama.
Beberapa ensemble yang sering digunakan dalam dinamika molekul
adalah ensemble mikrokanonikal, ensemble kanonikal dan ensemble isobarik-
isotermal.
3.1.1.1 Ensemble Mikrokanonikal (E, V, N)
Ensemble mikrokanonikal adalah ensemble yang memiliki karakteristik
jumlah molekul N dan volume yang tidak berubah serta energi total yang konstan.
Ensemble ini diperoleh dari sistem yang terisolasi sehingga tidak ada interaksi
sistem dengan lingkungan. Dengan demikian energi tidak dapat keluar dan masuk
ke sistem dan energi total memiliki harga konstan. Ensemble ini biasa dinamakan
6
Page 17
ensemble (E, V, N). Ensemble mikrokanonikal adalah ensemble yang paling
sederhana untuk simulasi dinamika molekul, namun kurang praktis mensimulasi
keadaan eksperimen dalam laboratorium. Ini disebabkan energi total sistem sulit
dipertahankan konstan dalam eksperimen.
3.1.1.2 Ensemble Kanonikal (T, V, N)
Ensemble kanonikal adalah ensemble dengan keadaan makroskopis suhu
yang tetap. Selain itu jumlah molekul N dan volume tidak berubah, maka
dinamakan ensemble (T, V, N). Dalam laboratorium, temperatur sistem lebih
mudah dikendalikan daripada energi total sistem, maka eksperimen sering
dilakukan pada temperatur konstan. Ensemble kanonikal mendekati keadaan
eksperimen pada temperatur konstan.
3.1.1.3 Ensemble Isobarik-Isotermal (P, T, N)
Dinamika molekul juga dapat dilakukan dengan mempertahankan tekanan
dan temperatur sistem pada harga yang konstan. Tekanan dan temperatur adalah
sifat makroskopis yang mudah dikendalikan dalam eksperimen. Dalam ensemble
isobarik-isotermal, volume sistem dapat berubah atau menjadi suatu variabel.
Jumlah molekul tidak berubah, maka ensemble ini juga dinamakan ensemble (P,
T, N).
3.1.2 Langkah-Langkah Simulasi Dinamika Molekul
7
Page 18
PengembanganModel
SimulasiDinamika Molekul
PemodelanInteraksi Antar
Molekul
PemodelanInteraksi Sistem-
Lingkungan
PengembanganPersamaan
Gerak
GenerasiTrajektori Analisa Trajektori
Inisialisasi Ekuilibrasi Produksi
PemodelanDinamika Molekul
Gambar 3.2 Langkah-langkah simulasi dinamika molekul. [2]
Dinamika molekul dilakukan dengan langkah-langkah berikut:
1. Pengembangan Model
Pengembangan model harus dilakukan sebagai persiapan simulasi
dinamika molekul. Model dapat diperoleh dari teori atau eksperimen.
Model interaksi antar molekul dibutuhkan jika molekul berinteraksi satu
sama lain. Model interaksi antara sistem dan lingkungan dibutuhkan jika
sistem tidak terisolasi. Interaksi antara sistem dan lingkungan
dipergunakan untuk pengendalian temperatur sistem dan pengendalian
tekananc sistem.
2. Simulasi Dinamika Molekul
Tahap simulasi dilakukan dengan penghasilan trajektori molekul-molekul
dalam simulasi, lalu analisa yang dapat dilakukan bersamaan atau setelah
simulasi. Generasi trajektori dibagi menjadi 3 tahap, yang akan dibahas
lebih mendalam pada bab 4.1.
3.1.3 Syarat Batas Periodik
Molekul-molekul dekat batas sistem atau permukaan akan menimbulkan
masalah karena memiliki molekul tetangga yang lebih sedikit daripada molekul
yang berada di tengah sistem. Pada materi berskala makroskopis, molekul dekat
8
Page 19
permukaan jauh lebih sedikit daripada molekul total sistem sehingga efek
permukaan sangat kecil. Simulasi dinamika molekul sangat terpengaruh oleh efek
permukaan. Ini menyebabkan informasi yang didapatkan adalah sifat materi dekat
permukaan, padahal yang lebih penting diamati adalah sifat materi itu sendiri.
Untuk menghindari ini, maka interaksi molekul dengan batas dihilangkan dengan
menggunakan syarat batas periodik. [5]
Material yang diamati akan dibagi menjadi sel-sel yang identik satu sama
lain. Sel yang diamati disebut sebagai sel primer atau sel komputasi, sedangkan
sel lain yang tidak diamati disebut sebagai sel citra. Di dalam sel citra terdapat
citra-citra dari molekul-molekul dalam sel utama. Sel citra memiliki semua
informasi (misal jumlah, posisi relatif dan kecepatan molekul) sama dengan sel
primer. Sel citra adalah hasil replika dari sel primer secara periodik ke segala arah.
Sel Primer Sel Citra
Sel Citra Sel Citra Sel Citra
Sel Citra
Sel Citra Sel Citra Sel Citra
Gambar 3.3 Pembagian materi menjadi sel primer dan sel citra.
Ada dua implikasi dari syarat batas periodik. Pertama, jika sebuah molekul
meninggalkan sel primer, molekul tersebut akan digantikan oleh citranya yang
masuk ke dalam sel primer secara bersamaan. Posisi molekul yang keluar dari sel
primer tersebut diganti dengan posisi baru yaitu posisi citranya yang masuk ke
dalam sel primer. Kondisi ini akan menyebabkan jumlah atom N yang berada
dalam sel primer akan konstan.
9
Page 20
Implikasi kedua syarat batas periodik adalah konvensi citra minimum
(minimum-image convention). Molekul-molekul dalam sel utama dapat
berinteraksi baik dengan molekul-molekul lain dalam sel utama maupun dengan
citra-citranya dalam sel-sel citra. Interaksi antara dua molekul hanya
diperhitungkan satu kali, dengan memilih interaksi molekul pertama dengan
molekul kedua yang terdekat, baik dalam sel utama atau citranya dalam sel citra
[6].
3.2 MEKANIKA KLASIK
Dalam dinamika molekul digunakan ketiga Hukum Newton:
1. Suatu partikel akan tetap diam atau bergerak dengan kecepatan tetap
kecuali jika menerima gaya-gaya eksternal dengan resultan tidak sama
dengan nol.
2. Jika partikel dengan massa m menerima gaya Fr
, maka partikel itu akan
mengalami percepatan sebesar
mFar
r= (3.1)
3. Jika partikel i memberikan gaya pada partikel j sebesar ijFr
, maka partikel j
memberikan gaya pada partikel i sebesar ijFr
− .
jiij FFrr
−= (3.2)
Hukum Newton ini memberikan konsekuensi hukum kekekalan
momentum. Dalam suatu sistem terisolasi, momentum masing-masing molekul
dapat berubah-ubah akibat interaksi satu sama lain, namun momentum total tidak
akan berubah. Momentum total sistem dapat diamati untuk memeriksa kebenaran
simulasi ensemble mikrokanonikal.
0)()( == ∑∑i
iii
i vmdtdp
dtd (3.3)
di mana m adalah massa molekul dan p adalah momentum molekul.
10
Page 21
3.3 MEKANIKA STATISTIK
Mekanika statistik atau termodinamika statistik dibutuhkan untuk
mengkonversikan informasi pada skala atomik menjadi informasi pada skala
makroskopik [5]. Konfigurasi posisi dan momentum molekul-molekul
menentukan sifat-sifat yang dimiliki materi tersebut. Sifat-sifat itu antara lain
adalah energi, temperatur, tekanan dan entalpi. Menurut mekanika statistik,
kuantitas fisis diperoleh sebagai rata-rata konfigurasi tersebut terhadap waktu.
3.3.1 Energi Total
Energi total suatu sistem tersusun dari energi potensial sistem dan energi
kinetik sistem. Energi potensial adalah jumlah dari semua energi potensial
molekul-molekul dalam sistem.
)( N
ii RUU ∑= (3.4)
RN adalah set posisi titik pusat massa atom atau molekul, RN = {R1, R2, R3, … ,
RN}.
Energi kinetik sistem adalah jumlah dari energi kinetik setiap molekul.
∑=i
ii vKK )( (3.5)
dengan i
iiii m
pvmK2
)(21 2
2 == .
Untuk sistem terisolasi di mana tidak ada energi yang menembus batas,
sistem bersifat konservatif atau energi sistem konstan. Konservasi energi ini
adalah salah satu cara untuk memperiksa kebenaran simulasi ensemble
mikrokanonikal.
11
Page 22
3.3.2 Temperatur
Menurut termodinamika statistik, temperatur tidak lain adalah suatu skala
dari energi kinetik molekul-molekul penyusunnya. Untuk tiga dimensi, hubungan
antara energi kinetik dengan temperatur dinyatakan oleh
TNkK B23
= (3.6)
Atau,
BNkKT
32
= (3.7)
di mana K adalah energi kinetik total sistem, N adalah jumlah molekul sistem, kB
adalah konstanta Boltzmann dan T adalah temperatur.
3.3.3 Distribusi Kecepatan
Molekul-molekul dalam materi dapat memiliki kecepatan yang berbeda-
beda, sehingga terbentuk suatu distribusi kecepatan. Secara statistik dapat
diperoleh bahwa molekul-molekul akan paling banyak berada pada suatu
kecepatan tertentu, dan semakin berkurang jumlah molekulnya dengan semakin
jauh kecepatan dari kecepatan tersebut.
Salah satu penyebabnya adalah karena molekul-molekul dalam materi
akan saling bertabrakan dan berinteraksi. Interaksi ini menyebabkan adanya
pemerataan energi kinetik, karena molekul yang bergerak lebih cepat memberikan
tambahan momentum pada molekul yang bergerak lebih lambat dan sebaliknya.
Distribusi kecepatan yang terjadi berbentuk distribusi normal, dan dinamakan
Distribusi Maxwell-Boltzmann [7]. Distribusi Maxwell-Boltzmann bergantung
dari temperatur, dirumuskan:
dvkT
mvC
dvvf
−=
2exp1)(
2
(3.8)
12
Page 23
Gambar 3.4 Distribusi kecepatan molekul pada berbagai temperatur [2]
3.3.4 Tekanan
Tekanan didefinisikan sebagai gaya yang bekerja tegak lurus pada suatu
satuan luas.
AFP x
x = (3.9)
Dengan menggunakan hukum Newton kedua,
dtmvd
AP x
x)(1
= (3.10)
13
Page 24
Maka tekanan adalah suatu fluks momentum atau momentum yang
menembus suatu satuan luas dalam suatu satuan waktu [2]. Menurut
termodinamika statistik, ini terdiri dari dua bagian yaitu:
1. Pm, adalah fluks momentum akibat molekul yang menembus suatu
permukaan luas selama dt.
KVNPm 3
2= (3.11)
2. Pf, adalah fluks momentum akibat gaya yang bekerja antara dua molekul
yang berada pada sisi yang berbeda dari permukaan luas.
∑∑ ⋅=i j
ijijf RFV
Prr
31 (3.12)
Maka tekanan total menurut termodinamika statistik adalah
∑∑ ⋅+=i j
ijij RFV
KVNP
rr
31
32 (3.13)
3.3.5 Entalpi
Entalpi didefinisikan sebagai gabungan dari energi total sistem dengan
energi aliran [3]:
PVEH += (3.14)
3.4 MODEL INTERAKSI ANTAR MOLEKUL
Model interaksi antar molekul yang diperlukan adalah hukum gaya antar
molekul, yang ekivalen dengan fungsi energi potensial antar molekul. Pemilihan
fungsi energi potensial harus dilakukan sebelum simulasi apa pun dapat
dikerjakan.
Pemilihan model interaksi antar molekul sangat menentukan kebenaran
simulasi dari sudut pandang fisika. Karena berada dalam skala atomik, interaksi
secara prinsip harus diturunkan secara kuantum, di mana berlaku prinsip
ketidakpastian Heisenberg. Namun kita dapat melakukan pendekatan mekanika
klasik di mana atom atau molekul dianggap sebagai suatu titik massa.
14
Page 25
Model interaksi itu harus memenuhi dua buah kriteria. Pertama, molekul-
molekul harus mampu menahan tekanan pasangan molekul yang saling
berinteraksi. Ini dapat diartikan bahwa ada gaya tolak-menolak antar molekul.
Kedua, molekul-molekul itu harus saling mengikat, atau ada gaya tarik-menarik
antara molekul. Jika molekul-molekul terlalu dekat, gaya resultan adalah gaya
tolak-menolak. Sebaliknya, jika terlalu jauh, maka gaya resultan adalah gaya
tarik-menarik. Pada suatu jarak tertentu, kedua gaya tersebut saling meniadakan
sehingga gaya resultannya sama dengan nol.
Untuk N jumlah atom dalam suatu simulasi maka fungsi energi potensial
adalah U(RN) di mana RN adalah set posisi titik pusat massa atom atau molekul,
RN = {R1, R2, R3, … , RN}. Model energi potensial yang sederhana dan umum
digunakan adalah pair-wise, di mana potensial adalah jumlah dari interaksi antara
dua molekul yang diisolasikan.
∑∑=i j
ijRUU )( ; i < j (3.15)
3.4.1 Potensial Lennard-Jones
Salah satu model energi potensial antara dua molekul yang dikembangkan
adalah Potensial Lennard-Jones. Model ini dianggap paling sederhana, namun
memiliki ketelitian yang baik untuk simulasi. Model Potensial ini dirumuskan:
−
=
m
ij
n
ijij RR
kRU σσε)( (3.16)
n dan m adalah bilangan bulat positif yang dipilih di mana n > m. )/( mnm
mn
mnnk
−
−= dan mn >
Dan i dan j adalah indeks dari molekul, jiij RRR −≡ atau jarak antara molekul i
dan j. Sedangkan σ adalah parameter jarak, dan ε adalah parameter yang
menyatakan kekuatan interaksi. Pilihan yang umum untuk m dan n adalah m=6
dan n=12, sehingga persamaan (2.16) menjadi:
15
Page 26
−
=
612
4)(ijij
ij RRRU σσε (3.17)
3.4.2 Gaya
Gaya adalah negatif dari gradien potensial. Untuk potensial Lennard-
Jones, besar gaya adalah:
−
=−=
713
224)()(ijij
ijij RRRU
drdRF σσ
σε (3.18)
Menurut konvensi, gaya positif adalah gaya tolak-menolak, dan gaya
negatif adalah gaya tarik-menarik. Model ini menggambarkan adanya gaya tolak-
menolak dengan suku 13
rσ yang mendominasi pada jarak dekat dan gaya tarik-
menarik dengan suku 7
rσ yang mendominasi pada jarak jauh.
-3
-2
-1
0
1
2
3
4
0.6 0.8 1
σ
ε
G
Dapat diturunka
)( ijRUF ⋅−∇=
Potensial
1.
am
n un
Gaya
2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8
bar 3.5 Potensial Lennard-Jones
tuk masing-masing sumbu:
16
Page 27
−
=
∂∂
−=
−
=
∂∂
−=
−
=
∂∂
−=
612
612
612
224)(
224)(
224)(
ijijij
zijz
ijijij
yijy
ijijij
xijx
RRRrRU
zF
RRRr
RUy
F
RRRr
RUx
F
σσε
σσε
σσε
(3.19)
3.4.3 Pemotongan Potensial
Penghitungan gaya-gaya yang terjadi antar molekul adalah proses yang
paling lama dalam simulasi dinamika molekul. Dalam prakteknya, sering kali
potensial diberikan jarak cutoff Rc dan interaksi antar atom yang berjarak lebih
besar dari Rc diabaikan. Cutoff ini dipasang pada jarak di mana interaksi seperti
potensial dan gaya sudah kecil dan dapat diabaikan.
>
≤
−
=
cij
cijijijij
RR
RRRRRU
0
4)(
612σσε (3.20)
3.5 PENGENDALIAN TEMPERATUR
Metoda dinamika molekul dengan ensemble mikrokanonikal tidak selalu
adalah cara terbaik untuk mendapatkan rata-rata statistik tertentu. Eksperimen
laboratorium lebih sering dilakukan pada temperatur konstan (ensemble kanonikal
T,V,N) daripada energi konstan (ensemble kanonikal E,V,N), karena temperatur
lebih mudah dikendalikan pada skala makroskopis.
Namun, untuk ensemble kanonikal diperlukan adanya fungsi tambahan
untuk menjaga temperatur. Fungsi tambahan ini merupakan interaksi sistem
dengan lingkungan di sekitarnya.
Beberapa model interaksi sistem-lingkungan yang dikembangkan
melibatkan adanya heat bath atau reservoir kalor yang berinteraksi dengan sistem.
Reservoir adalah sesuatu di luar sistem yang memiliki temperatur tertentu yang
17
Page 28
tidak akan berubah meskipun menerima dari atau memberikan kalor pada sistem.
Kalor berpindah dari temperatur tinggi ke temperatur rendah, maka jika reservoir
lebih panas daripada sistem, kalor berpindah dari reservoir menuju sistem, dan
sebaliknya.
3.5.1 Velocity Scaling
Pengendalian temperatur dapat dilakukan dengan menyesuaikan harga
kecepatan masing-masing molekul terus menerus atau pada periode tertentu.
iset
i vT
Tv =′ (3.21)
Dengan metoda ini dapat dipastikan bahwa temperatur sistem sesaat akan
tepat berada pada temperatur set point. Namun teknik ini tidak menjelaskan
bagaimana interaksi sistem-lingkungan bekerja. Kelemahan lain teknik ini adalah
sifat-sifat materi tidak dapat diturunkan dengan benar, karena pengambilan
informasi harus dilakukan pada saat sistem bebas dan tanpa paksaan.
Velocity scaling berguna dalam kecepatan awal atau jika simulasi suatu
saat perlu menaikkan atau menurunkan temperatur. Cara lain adalah dengan
secara periodik, namun tidak setiap saat, melakukan velocity scaling sehingga
sistem lambat laun akan berkisar pada temperatur yang diinginkan. Teknik ini
disebut quench method [1].
3.5.2 Termostat Nose-Hoover
Shuichi Nose [8] melakukan pengendalian temperatur dengan
memasangkan reservoir kalor pada sistem. Reservoir kalor dapat memberi atau
menerima energi kalor dari sistem. Perpindahan energi dari lingkungan ke sistem
bersifat non-lokal, atau terjadi di semua lokasi dalam sistem secara bersamaan.
Molekul-molekul dalam sistem lalu akan dipercepat jika menerima kalor atau
diperlambat jika memberi kalor sehingga distribusi kecepatannya mendekati
bentuk distribusi kecepatan Maxwell-Boltzmann pada temperatur yang
diinginkan.
18
Page 29
SISTEM SISTEM
RESERVOIR KALOR
ENERGI
ISOLASI
Gambar 3.6 Pemasangan reservoir kalor pada sistem
Dengan termostat Nose, molekul-molekul dalam sistem menerima gaya
tambahan yang merupakan fungsi dari kecepatannya. Gaya ini dapat
diumpamakan sebagai gaya gesek. Nose membuat suatu variabel baru s yang
mengatur pertukaran kalor sistem dengan lingkungan. Hoover menyederhanakan
ini dengan mendefinisikan variabel dinamis ζ :
ss&
≡ζ (3.22)
Pengendalian temperatur ini lalu dinamakan termostat Nose-Hoover
dengan persamaan gerak baru dan penentuan harga ζ sebagai berikut:
)()(})({1)( trtRRU
Mtr i
ii &&& ζ−
∂∂
−= (3.23)
( ) setBi
ii TNktrmtQ 3)()( 2 −= ∑ &&ζ (3.24)
Dengan definisi temperatur dalam persamaan (2.7), persamaan dapat dituliskan
( )sBB TkTkQ −= 3ζ& (3.25)
di mana Q adalah parameter termostat yang menunjukkan kekuatan pengendalian
temperatur dan Ts adalah temperatur set-point.
19
Page 30
Termostat Nose-Hoover mengendalikan temperatur sistem dengan
mengatur (perubahan ζ& ζ terhadap waktu). Jika temperatur sistem melebihi Tset,
akan menjadi positif dan ζ& ζ bertambah. Karena ζ berkisar di sekitar nol, maka
setelah beberapa waktu ζ akan menjadi positif. Jika ζ positif maka umpan balik
negatif bekerja dengan memperlambat molekul-molekul, sehingga temperatur
sistem turun. Jika temperatur sistem lebih rendah daripada Tset, akan menjadi
negatif dan
ζ&
ζ berkurang. Setelah beberapa waktu, ζ menjadi bernilai negatif dan
molekul-molekul dipercepat, sehingga temperatur sistem naik.
Termostat Nose-Hoover mengumpamakan perpindahan kalor memiliki
‘inersia termal’, dan seluruh sistem dengan reservoir kalor mengkonservasi nilai
Hamiltonian H. Hamiltonian tidak memiliki nilai fisis namun dapat dipergunakan
untuk memerika kebenaran simulasi. Hamiltonian ini dirumuskan
H { }( ) sTgksQRURsM Bi
ii ln21)(
21 22 +++= ∑ && (3.26)
3.5.3 Termostat Berendsen
Metoda pengendalian temperatur lain yang memiliki banyak kesamaan
dengan termostat Nose-Hoover dirumuskan oleh Berendsen et al. [9]. Termostat
Berendsen menggunakan persamaan gerak yang sama dengan termostat Nose-
Hoover,
)()(})({1)( trtRRU
Mtr i
ii &&& ζ−
∂∂
−=
Perbedaannya adalah termostat Berendsen bukan mengatur harga
melainkan harga
ζ&
ζ dengan persamaan:
)(2
1sBB
B
TkTkTQk
−=ζ (3.27)
di mana Q di sini adalah parameter termostat yang berupa konstanta waktu.
Metoda ini mengarahkan temperatur sistem lebih langsung daripada
metoda Nose-Hoover, sehingga kurva temperatur akan lebih tajam.
20
Page 31
3.6 PENGENDALIAN TEKANAN
Tekanan merupakan fungsi dari temperatur dan volume sistem.
Pengendalian tekanan dilakukan untuk simulasi ensemble isobarik-isotermal (P,
V, N) dengan mengatur perubahan volume sistem sehingga tekanan tidak berubah.
Sistem dijadikan piston yang dapat bergerak sehingga volume membesar atau
mengecil. Sebuah reservoir tekanan lalu ditambahkan di luar sistem yang
menggerakkan piston jika terdapat perbedaan tekanan.
SISTEM SISTEM
RESERVOIR KALOR
ENERGI
ISOLASI
RESERVOIRTEKANAN
VOLUME
Gambar 3.7 Pemasangan reservoir kalor dan reservoir tekanan pada sistem
3.7 PENGEMBANGAN PERSAMAAN GERAK DISKRIT
Dinamika molekul mengamati posisi dan derivasinya, antara lain
kecepatan dan percepatan. Maka persamaan gerak dapat dituliskan:
)()(
)()(
tadt
tdv
tvdt
tdr
ii
ii
=
= (3.28)
Persamaan gerak ini harus dijadikan diskrit agar dapat dipecahkan secara
numerik. Pendiskritan ini dilakukan dengan metoda beda hingga (finite-
difference). Waktu yang diskrit memiliki langkah waktu (time step) yang
merupakan selisih antara dua waktu berturutan.
t∆
Metoda beda hingga dilakukan dengan melakukan ekspansi Taylor. Suatu
metoda beda hingga yang mengaproksimasi solusi sebuah persamaan diferensial,
21
Page 32
akan selalu menimbulkan truncation error (error pemotongan). Truncation error
dihitung dari suku bukan nol pertama yang dihilangkan dari suatu ekspansi.
Metoda yang dipilih harus memberikan error kecil namun tidak terlalu
kompleks sehingga memerlukan waktu komputasi yang lama. Beberapa metoda
integrasi persamaan gerak antara lain adalah algoritma Verlet, algoritma Leap-
Frog dan algoritma Velocity Form [9].
3.7.1 Algoritma Verlet
Algoritma Verlet sering digunakan karena algoritmanya yang sederhana
namun memiliki ketelitian yang baik. Caranya adalah dengan menggunakan
ekspansi Taylor untuk t dan tt∆+ t∆− sebagai berikut:
))(()()(
61)(
)(21)(
)()( 433
32
2
2
tOtdt
trdt
dttrd
tdt
tdrtrttr iii
ii ∆+∆+∆+∆+=∆+ (3.29)
))(()()(
61)(
)(21)(
)()( 433
32
2
2
tOtdt
trdt
dttrd
tdt
tdrtrttr iii
ii ∆+∆−∆+∆−=∆− (3.30)
Penjumlahan persamaan (2.28) dan (2.29) menghasilkan:
))(()()(
)(2)()( 422
2
tOtdt
trdtrttrttr i
iii ∆+∆+=∆−+∆+
))(()()(
)()(2)( 422
2
tOtdt
trdttrtrttr i
iii ∆+∆+∆−+=∆+
atau
))(()).(()()(2)( 42 tOttattrtrttr iiii ∆+∆+∆−+=∆+ (3.31)
))(().()(
)()(2)( 42 tOtm
tFttrtrttr
i
iiii ∆+∆+∆−+=∆+ (3.32)
Maka diperoleh posisi molekul pada t+dt dengan truncation error berorde .)( 4t∆
Sedangkan kecepatan pada t diperoleh dengan mengurangkan persamaan
(2.29) dengan persamaan (2.30), menjadi
))(()(
2)()( 3tOtdt
tdrttrttr i
ii ∆+∆=∆−−∆+ (3.33)
yang dapat dituliskan
ttOttrttr
dttdrtv iii
i ∆∆+∆−−∆+
==2
))(()()()()(3
(3.34)
22
Page 33
Kelemahan dari algoritma Verlet adalah penanganan kecepatan yang
kurang praktis, karena harus memprediksi posisi berikut sebelum dapat
menghitung kecepatan sesaat. Selain itu, posisi sama sekali tidak ditentukan oleh
kecepatan pada saat t, maka algoritma ini tidak mudah mempergunakan velocity
scaling untuk simulasi pada T konstan.
3.7.2 Algoritma Leap-Frog
Algoritma Leap-Frog adalah metoda di mana kecepatan melompati
percepatan, dan posisi melompati kecepatan. Menggunakan ekspansi Taylor
sampai orde kedua untuk tt ∆+ 21 dan tt ∆− 2
1 :
))(()()(
21)(
)()( 3221
2
2
21
21 tOt
dttrd
tdt
tdrtrttr ii
ii ∆+∆+∆+=∆+ (3.35)
))(()()(
21)(
)()( 3221
2
2
21
21 tOt
dttrd
tdt
tdrtrttr ii
ii ∆+∆+∆−=∆− (3.36)
Dengan cara yang sama dengan penghitungan kecepatan Verlet yaitu
pengurangan (2.35) dengan (2.36) diperoleh
))(()()(
2)()( 321
21
21 tOt
dttdr
ttrttr iii ∆+∆=∆−−∆+
))(()(
)()( 321
21 tOt
dttdr
ttrttr iii ∆+∆+∆−=∆+ (3.37)
Dengan mentranslasi seluruh persamaan sebesar t∆21 , diperoleh:
))(()(
)()( 321
tOtdt
ttdrtrttr i
ii ∆+∆∆+
+=∆+
atau
))(()()()( 321 tOtttvtrttr iii ∆+∆∆++=∆+ (3.38)
Dengan cara yang sama diperoleh persamaan untuk kecepatan:
))(()()(
2)()( 321
21
21 tOt
dttdv
ttvttv iii ∆+∆=∆−−∆+
))(()(
)()( 321
21 tOt
dttdv
ttvttv iii ∆+∆+∆−=∆+ (3.39)
23
Page 34
atau
))((.)(
)()( 321
21 tOt
mtF
ttvttvi
iii ∆+∆+∆−=∆+ (3.40)
3.7.3 Algoritma Verlet dengan Pengendalian Temperatur
Algoritma Verlet dapat digunakan dengan pengendalian temperatur
dengan modifikasi dengan menggabungkan persamaan (2.23), persamaan (2.32)
dan persamaan (2.34):
)()(})({1)( trtRRU
Mtr i
ii &&& ζ−
∂∂
−=
))(()).(()()(2)( 42 tOttattrtrttr iiii ∆+∆+∆−+=∆+
ttOttrttr
dttdr
tv iiii ∆
∆+∆−−∆+==
2))(()()()(
)(3
maka persamaan gerak menjadi
))(().()()(})({1)()(2)( 42 tOttrtRRU
Mttrtrttr i
iiii ∆+∆
−
∂∂
−∆−+=∆+ &ζ (3.41)
))(()(
.2
))(()()()(})({1)()(2)(
42
3
tOt
ttOttrttr
tRRU
Mttrtrttr ii
iiii
∆+∆
∆
∆+∆−−∆+−
∂∂
−∆−+=∆+ ζ
))((
).(})({1).(2
)()()()()(2)(
3
22
tO
tRRU
Mt
tttrttr
tttrtrttri
iiiii
∆+
∆∂
∂−∆
∆∆−−∆+
−∆−+=∆+ ζ
Didefinisikan
ttt ∆≡ )(21)( ζβ (3.42)
sehingga persamaan (2.41) menjadi
))(().(})({1))()(()()()(2)(
32 tOtRRU
M
ttrttrtttrtrttr
i
iiiii
∆+∆∂
∂−
∆−−∆+−∆−+=∆+ β (3.43)
24
Page 35
))(().(})({1)1)(()(2)1)(( 32 tOtRRU
Mttrtrttr
iiii ∆+∆
∂∂
−−∆−+=+∆+ ββ
∆+∆
∂∂
−−∆−++
=∆+ ))(().(})({1)1)(()(21
1)( 32 tOtRRU
Mttrtrttr
iiii β
β(3.44)
3.7.4 Pendiskritan ζ untuk Termostat Nose-Hoover dan Berendsen
Dengan melakukan ekspansi Taylor untuk ζ pada t t∆+ dan t , maka
diperoleh persamaan-persamaan:
t∆−
))(()).((21).()()( 32 tOttttttt ∆+∆+∆+=∆+ ζζζζ &&& (3.45)
))(()).((21).()()( 32 tOttttttt ∆+∆−∆−=∆− ζζζζ &&& (3.46)
Persamaan (2.41) dikurangi persamaan (2.42) menjadi
))(().(2)()( 3tOtttttt ∆+∆=∆−−∆+ ζζζ & (3.47)
Dengan definisi ς& :
( ) sBi
ii TNktrmtQ 3)()( 2 −= ∑ &&ζ
maka diperoleh
( ) ))((3)(2)()( 32 tOTNktrmQ
ttttt sBi
ii ∆+
−
∆+∆−=∆+ ∑ &ζζ (3.48)
25
Page 36
BAB 4
PERANCANGAN SIMULASI DINAMIKA
MOLEKUL
4.1 GARIS BESAR
4.1.1 Prosedur Simulasi
Simulasi dinamika molekul terdiri atas tiga tahap: inisialisasi, ekuilibrium,
dan produksi. Dalam penelitian ini bagian ekuilibrium tidak dilakukan secara
spesifik.
Gambar 4.1 Penghasilan trajektori molekul. [1]
26
Page 37
1. Tahap inisialisasi terdiri dari penentuan sistem unit, algoritma dan
parameter simulasi dan inisialisasi molekul-molekul. Inisialisasi molekul
melibatkan penentuan posisi awal dan kecepatan awal molekul-molekul.
2. Tahap ekuilibrium diperlukan agar keadaan awal simulasi tidak dominan
mempengaruhi analisa dari simulasi. Dalam penelitian ini bagian
ekuilibrium sudah termasuk ke dalam tahap produksi.
3. Tahap produksi adalah tahap utama dalam simulasi dinamika molekul, saat
memperoleh informasi dalam simulasi. Algoritma finite-difference
digunakan berulang kali sambil mengumpulkan trajektori ruang fasa.
Tahap produksi harus dilakukan dengan jangka waktu yang cukup untuk
mengurangi ketidakpastian statistik sampai memenuhi spesifikasi.
27
Page 38
InisialisasiParameter dan
Molekul
Maju Satu Iterasi
Hitung InteraksiAntar Molekul
Kalkulasi Posisidan Kecepatan
Peroleh SifatMateri
Tidak
Iterasi Selesai?
Ya
Ulangi Simulasi
Tidak
Ya
PengendalianTemperatur
Gambar 4.2 Prosedur simulasi dinamika molekul.
28
Page 39
4.1.2 Parameter Simulasi
4.1.2.1 Kotak Simulasi dan Syarat Batas Periodik
Simulasi dinamika dilakukan dalam kubus dengan dimensi L x L x L,
karena bentuk ini paling memudahkan syarat batas periodik. Maka syarat batas
periodik diimplementasikan sebagai berikut:
1. Jika sebuah molekul melebihi batas kotak simulasi, maka Lxx ii α+=
dengan memilih α = …,-1,0,1,… sehingga molekul masih berada dalam
kotak simulasi.
Gambar 4.3 Syarat bata
keluar dari ko
2. Jarak suatu molekul ke molekul k
dalam sel utama atau dengan citra
sumbu adalah LRR ijxijx α+= de
mendapatkan Rijx terkecil.
s p
ta
ed
ny
ng
eri
k si
ua d
a. M
an
odik u
mulas
itentu
aka
mem
ntuk molekul yang
i.
kan sebagai jarak terdekat di
jarak dua molekul pada suatu
ilih α = …,-1,0,1,… untuk
29
Page 40
Sel Citra Sel Citra
Sel Citra Sel Primer
Gambar 4.4 Syarat batas periodik untuk jarak antar molekul
4.1.2.2 Pemotongan Potensial
Penghitungan interaksi antar molekul memakan waktu paling lama dalam
simulasi dinamika molekul. Agar komputasi tidak mahal, maka interaksi molekul
hanya dihitung dengan tetangga terdekat saja. Teknik ini banyak digunakan dalam
dinamika molekul materi dalam fasa padat. Pemotongan potensial dilakukan
dengan memasang jarak cutoff di antara tetangga pertama dan tetangga kedua
molekul.
Jarak cutoff dipasang di antara jarak molekul ke tetangga pertama dan
tetangga keduanya. Jarak cutoff dipasang di antara tetangga pertama yang berjarak
L dan tetangga kedua yang berjarak 2L , yaitu sebesar 1,2L.
4.1.2.3 Posisi Awal
Penempatan molekul-molekul secara acak dapat menyebabkan adanya
molekul-molekul yang saling menumpuk atau berjarak terlalu dekat sehingga
terjadi gaya tolak-menolak yang terlalu besar. Untuk mencegah hal ini, maka
30
Page 41
molekul-molekul disusun dalam bentuk kubus sebagai posisi awal. Struktur ini
sesuai dengan struktur materi dalam fasa padat.
Panjang rusuk kubus adalah jarak di mana molekul-molekul berada pada
potensial terendah. Untuk model potensial Lennard-Jones, maka jarak tersebut
kalau hanya memperhitungkan tetangga terdekatnya adalah
0)()(224)( 612 =
−=
∂∂
−=ijijij
xijx RRR
rRUx
F σσε (4.1)
612 )()(20ijij RRσσ
−=
612 )()(2ijij RRσσ
=
2)( 6 =σ
ijR
6 2σ=ijR (4.2)
4.1.3 Paralelisasi
Simulasi dinamika molekul memerlukan kemampuan komputasi yang
besar untuk jumlah molekul banyak dan algoritma yang kompleks. Salah satu cara
meningkatkan kemampuan komputasi adalah dengan menggunakan paralelisasi
komputer [10].
Paralelisasi simulasi dinamika molekul dengan P prosesor terdiri dari
mengambil sistem N partikel yang berinteraksi dan mendekomposisi menjadi P
sistem yang lebih kecil yang dapat diproses secara paralel. Dengan P proses
bekerja simultan maka kecepatan komputasi secara ideal akan berlipat P kali dari
kecepatan satu prosesor. Dalam praktek, komunikasi antar komputer dan beban
yang berbeda pada masing-masing prosesor akan menambah waktu simulasi.
Dua teknik utama adalah dekomposisi molekular dan dekomposisi
geometrik.
31
Page 42
4.1.3.1 Dinamika molekul paralel dengan dekomposisi atom
Teknik ini adalah cara paling mudah untuk membagi-bagi suatu sistem.
Untuk P prosesor, masing-masing prosesor menangani N/P molekul. Alokasi
molekul pada satu prosesor tidak berdasar pada kondisi tertentu, seperti lokasi
yang dekat. Molekul itu akan ditangani oleh prosesor tersebut sepanjang simulasi.
Untuk mengetahui suatu molekul berinteraksi dengan molekul lain yang
mana, setiap prosesor memiliki daftar tetangga dari molekul yang ditanganinya.
Daftar tetangga adalah daftar molekul-molekul lain yang berada dalam bola
dengan radius Rc dan berpusat pada molekul. Daftar tetangga perlu disusun
kembali setiap periode tertentu.
Teknik ini mempunyai kelemahan yaitu komunikasi antar prosesor untuk
mempertukarkan informasi molekulnya dapat memakan waktu banyak.
4.1.3.2 Dinamika molekul paralel dengan dekomposisi geometrik
Pada teknik ini, ruang dipartisi menjadi banyak kotak yang disusun
sehingga seluruh ruang kotak simulasi terpenuhi. Kotak partisi lalu didistribusikan
pada banyak prosesor sehingga kotak partisi yang berdekatan secara fisik akan
berada pada prosesor yang berdekatan. Pertukaran data jarak jauh akan
diminimisasikan.
Kelemahan teknik ini adalah jika molekul-molekul berpindah kotak partisi
sehingga beban yang ditangani prosesor menjadi tidak seimbang. Prosesor dengan
beban lebih kecil akan selesai lebih dahulu dan harus menunggu prosesor dengan
beban terbesar selesai. Alternatif lain adalah dengan menyesuaikan distribusi
ruang agar distribusi beban prosesor merata, namun ini menambah kompleksitas
simulasi.
Dekomposisi geometrik baik untuk digunakan dalam simulasi molekul
dengan perpindahan kecil sehingga molekul-molekul kurang lebih berada tetap
dalam kotak partisinya.
32
Page 43
4.2 PERANGKAT LUNAK
Simulasi dinamika molekul dirancang dengan bahasa pemrograman C++
berorientasi objek dengan Borland C++ Builder Version 4.0. Simulasi dibentuk
dengan berbagai kelas yang masing-masing memiliki tugas tertentu dalam
simulasi. Penggunaan kelas dalam program ini mempermudah modifikasi program
andaikata perlu mempergunakan model atau algoritma lain.
4.2.1 Kandidat Kelas
Nama Kelas Type Tanggung Jawab
Simulation Process Mengatur langkah-
langkah simulasi
dinamika molekul
Molekul Actor -
Parameter Process Menginisialisasi
parameter simulasi
Property Process Memperoleh sifat materi
dari simulasi
Initialize Process Mengatur jalan inisialisasi
simulasi dinamika
molekul
Verlet Process Menjalankan tahap
produksi dengan
algoritma Verlet
LennardJones Process Menghitung interaksi
antar molekul dengan
potensial LennardJones
4.2.2 Atribut Kelas
33
Page 44
4.2.2.1 Simulation
Atribut Data Type Keterangan
t integer Nomor time step simulasi
4.2.2.2 Molekul
Atribut Data Type Keterangan
index integer Nomor indeks molekul
dalam kotak simulasi
m double Massa molekul
R array[3] of double Posisi molekul pada
sumbu x, y dan z pada t
Rnext array[3] of double Posisi molekul pada
sumbu x, y dan z pada
tt ∆+
Rprev array[3] of double Posisi molekul pada
sumbu x, y dan z pada
tt ∆−
v array[3] of double Kecepatan molekul pada
sumbu x, y dan z pada t
F array[3] of double Gaya total yang diterima
molekul pada sumbu x, y
dan z
next Molecule* Pointer ke molekul
berikut dalam kotak
simulasi
Atribut kelas molekul bersifat public dan akan dimanipulasi oleh kelas-
kelas lain. Algoritma Verlet membutuhkan posisi pada waktu tt ∆− , t, dan t t∆+ ,
kecepatan dan percepatan, namun percepatan diggantikan dengan gaya yang
dialami molekul agar lebih fleksibel untuk simulasi ensemble mikrokanonikal dan
ensemble kanonikal.
34
Page 45
Molekul-molekul dalam simulasi disusun dalam bentuk linked list (daftar
terkait) di mana suatu molekul memiliki pointer (penunjuk) untuk molekul
berikutnya. Pointer ini diberi nama next.
Gambar 4.5 Penggunaan linked-list untuk molekul
4.2.2.3 Parameter
Atribut Data Type Keterangan
N integer Jumlah molekul dalam
simulasi
Naxis integer Jumlah molekul
sepanjang rusuk kubus
SIG double Parameter panjang dalam
interaksi
EPS double Parameter kekuatan
interaksi
L0 double Panjang rusuk satu kubus
molekul
L double Panjang kubus simulasi
RC double Jarak cutoff
DT double Besar satu time step
T0 double Temperatur awal sistem
Kb double Konstanta Boltzmann
TMAX integer Nomor iterasi maksimum
35
Page 46
Q double Parameter kekuatan untuk
pengendalian temperatur
Tset double Temperatur sistem yang
diinginkan
4.2.2.4 Property
Atribut Data Type Keterangan
U double Energi potensial sistem
K double Energi kinetik sistem
E double Energi total sistem
E0 double Energi total awal sistem
error double )0(
)0()(E
EtEerror −=
momentum array[3] of double Momentum total sistem
pada masing-masing
sumbu
zeta double ζ
zetadot double ζ&
beta double t∆≡ ζβ
21
s double s
sdot double s&
T double Temperatur sistem
P double Tekanan
Pf double Komponen tekanan yang
bergantung pada gaya
Pm double Komponen tekanan yang
bergantung pada
momentum
H double Entalpi
Ham double Hamiltonian
36
Page 47
Ham0 double Hamiltonian awal sistem
HamError double )0(
)0()(H
HtHHamError −=
4.2.2.5 Initialize
Kelas Initialize tidak memiliki atribut.
4.2.2.6 Verlet
Atribut Data Type Keterangan
zetaprev double )( tt ∆−ζ
zetanext double )( tt ∆+ζ
sprev double )( tts ∆−
snext double )( tts ∆+
4.2.2.7 LennardJones
Atribut Data Type Keterangan
Raxis array[3] of double Jarak dua molekul pada
sumbu x, y dan z
Rij double Jarak dua molekul
force array[3] of double Gaya yang terjadi antar
molekul i dan j atau ijF
4.2.3 Operasi Kelas
4.2.3.1 Simulation
Operasi Return Type Keterangan
Simulation() - Konstruktor kelas
Run() void Menjalankan simulasi
37
Page 48
dinamika molekul
Reset() void Menghapus hasil simulasi
NextStep() void Memindahkan variabel-
variabel t menjadi t t∆+
4.2.3.2 Molecule
Operasi Return Type Keterangan
Molecule() - Konstruktor kelas
4.2.3.3 Parameter
Operasi Return Type Keterangan
Parameter() - Konstruktor kelas
Set() void Memasang harga
parameter sesuai dengan
harga input
4.2.3.4 Property
Operasi Return Type Keterangan
Property() - Konstruktor kelas
Run() void Menghitung sifat-sifat
materi dari simulasi
Kinetic() void Menghitung energi
kinetik sistem
Energy() void Menghitung energi total
sistem dan besar error
4.2.3.5 Initialize
Operasi Return Type Keterangan
Initialize() - Konstruktor kelas
38
Page 49
Run() void Menjalankan inisialisasi
simulasi dinamika
molekul
CreateMolecule() void Menambahkan molekul-
molekul baru ke dalam
simulasi
InitialPosition() void Memasang molekul-
molekul pada posisi awal
InitialVelocity() void Memberikan kecepatan
awal pada molekul-
molekul
head NULL
head NULL
Molekul N
head Molekul N
Molekul N-1
NULL
head ...
Molekul 1
Molekul N NULL
Gambar 4.6 Penambahan molekul dalam linked-list [11]
39
Page 50
4.2.3.6 Verlet
Operasi Return Type Keterangan
Verlet() - Konstruktor kelas
Run() void Mengatur jalan algoritma
Verlet pada setiap iterasi
RunOne() void Mengatur jalan algoritma
Verlet untuk iterasi
pertama
PredictPosition() void Memprediksi posisi
molekul-molekul pada
iterasi berikut
PredictPositionOne() void Memprediksi posisi
molekul-molekul setelah
iterasi pertama
Velocity() void Menghitung kecepatan
molekul-molekul
PredictZeta() void Memprediksi )( tt ∆+ζ
PredictS() void Memprediksi )( tts ∆+
VelocityScale() void Melakukan velocity
scaling jika diperlukan
4.2.3.7 LennardJones
Operasi Return Type Keterangan
LennardJones() - Konstruktor kelas
Run() void Mengatur interaksi antar
molekul
ClearValues() void Mengosongkan harga
potenial dan gaya yang
dialami molekul
Distance(p1: Molecule*, void Menghitung jarak dua
40
Page 51
p2: Molecule*) molekul pada
Force(p1: Molecule*, p2:
Molecule*)
void Menghitung gaya yang
terjadi antar dua molekul
Potential(p1: Molecule*,
p2: Molecule*)
void Menghitung potensial
yang terjadi antar dua
molekul
PressureByForce(p1:
Molecule*, p2:
Molecule*)
void Menghitung komponen
tekanan yang berupa
fungsi gaya antar dua
molekul
4.2.4 Hubungan Antar Kelas
+Simulation()+Run() : void+Reset() : void-NextStep() : void
+t : intSimulation
+LennardJones()+Run() : void-ClearValues() : void-Distance(in p1 : Molecule*, in p2 : Molecule*) : void-Force(in p1 : Molecule*, in p2 : Molecule*) : void-Potential(in p1 : Molecule*, in p2 : Molecule*) : void-PressureByForce(in p1 : Molecule*, in p2 : Molecule*) : void
-RAxis[3] : double-Rij : double-force : double
LennardJones
+Molecule()
+index : int+m : double+R[3] : double+Rnext[3] : double+Rprev[3] : double+v[3] : double+F[3] : double+next : Molecule*
Molecule
+Parameter()+Set() : void
+N : int+NAxis : int+SIG : double+EPS : double+L0 : double+L : double+RC : double+DT : double+T0 : double+Kb : double+TMAX : int+Q : double+Tset : double
Parameter
+Property()+Run() : void-Kinetic() : void-Energy() : void
+U : double+K : double+E : double+E0 : double+error : double+momentum[3] : double+zeta : double+zetadot : double+beta : double+s : double+sdot : double+T : double+P : double+Pf : double+Pm : double+H : double+Ham : double+Ham0 : double+HamError : double
Property
+Verlet()+Run() : void+RunOne() : void-NextStep() : void-PredictPosition() : void-PredictPositionOne() : void-Velocity() : void-PredictZeta() : void-PredictS() : void-VelocityScale() : void
-zetaprev : double-zetanext : double-snext : double-sprev : double
Verlet
+Initialize()+Run() : void-CreateMolecules() : void-InitialPosition() : void-InitialVelocity() : void
Initialize
*
*
* *
*
*
*
* *
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
41
Page 52
Gambar 4.7 Hubungan antar kelas
4.2.5 Interface (Antar Muka)
Tampilan perangkat lunak simulasi dinamika molekul dalam penelitian ini:
Gambar 4.8 Contoh tampilan Simulasi Dinamika Molekul
42
Page 53
BAB 5
ANALISA
5.1 SIMULASI SISTEM MIKROKANONIKAL
5.1.1 Uji Kesalahan Energi Simulasi
Energi diamati untuk melihat kebenaran simulasi, karena dalam sistem
terisolasi atau ensemble mikrokanonikal, energi tidak berubah sepanjang simulasi.
Namun karena simulasi dinamika molekul menggunakan persamaan diskrit atau
metode beda hingga, maka tidak terhindarkan timbulnya error.
Perubahan energi potensial akan diimbangi oleh perubahan energi kinetik
sehingga energi total tidak berubah.
43
Page 54
Gambar 5.1 Grafik perbandingan energi kinetik dan energi potensial
Kesalahan energi total dihitung dengan
)0()0()(
EEtEerror −
= (5.1)
Hasil perhitungan error dalam beberapa simulasi 512 molekul dengan
berbagai besar time step : t∆
1. = 0,005, 100000 time step t∆
Gambar 5.2 Grafik error energi total pada t∆ = 0,005
2. = 0,01, 50000 time step t∆
44
Page 55
Gambar 5.3 Grafik error energi total pada t∆ = 0,01
3. = 0,02, 25000 time step t∆
Gambar 5.4 Grafik error energi total pada t∆ = 0,02
4. = 0,05, 10000 time step t∆
45
Page 56
Gambar 5.5 Grafik error energi total pada t∆ = 0,05
Time step (∆ ) t Orde Error
0,005 10-9
0,01 10-8
0,02 10-8
0,05 10-7
Tabel 5.1 Orde error terhadap besar time step t∆
Dapat terlihat bahwa simulasi memiliki error lebih besar dengan yang
lebih besar. Namun simulasi dengan
t∆
t∆ lebih kecil memerlukan lebih banyak
time step untuk menjalankan simulasi dengan waktu yang sama. Dari analisa ini
kita pilih t∆ =0,02 untuk simulasi lain dalam penelitian agar dapat
mensimulasikan waktu lebih lama namun error masih berorde 10-8.
5.1.2 Momentum
Dalam simulasi ensemble mikrokanonikal, perubahan kecepatan dan
momentum molekul hanya terjadi akibat gaya antar molekul. Karena Fij = -Fji,
maka perubahan momentum molekul i akan diimbangi molekul j, sehingga
momentum total tidak berubah.
46
Page 57
Gambar 5.6 Grafik momentum total pada sumbu x, y dan z
Terlihat momentum total pada ketiga sumbu hanya mengalami perubahan
kecil (berorde 10-10) dan dapat diabaikan. Simulasi berjalan dengan baik dari
sudut pandang momentum.
47
Page 58
5.1.3 Uji Simulasi Terhadap Temperatur Awal
Uji simulasi ini mengamati perkembangan temperatur sejalan waktu dan
kemudian menghitung temperatur rata-rata. Hasil simulasi 512 molekul dengan
temperatur awal 0,05 selama 2500 langkah:
Gambar 5.7 Grafik temperatur terhadap waktu
T = 0,02563
Terlihat bahwa temperatur rata-rata berbeda dengan temperatur awal.
Dalam simulasi ensemble mikrokanonikal, temperatur rata-rata tidak dapat
diprediksi atau diatur sebelum simulasi berakhir. Perolehan data untuk suatu
temperatur yang ditentukan sebelum simulasi menjadi kurang efisien, karena
sistem bisa jadi jarang berada pada temperatur yang diinginkan. Ini adalah
kerugian simulasi ensemble mikrokanonikal.
Dari hasil simulasi di atas dapat dilihat bahwa temperatur rata-rata (T =
0,02563) lebih rendah daripada temperatur awal (T(0) = 0,05) dan temperatur
sepanjang simulasi tidak pernah melebihi temperatur awal. Ini disebabkan karena
pada awal simulasi, molekul-molekul sudah berada pada posisi berenergi
potensial terendah. Perubahan posisi apa pun, baik saling mendekati atau saling
menjauhi, selama semua molekul masih berada dalam kotak simulasi, akan
48
Page 59
menyebabkan potensial yang lebih tinggi daripada potensial awal. Karena sistem
bersifat konservatif, semua perubahan energi potensial akan selalu diimbangi
dengan negtatif perubahan energi kinetik. Maka potensial yang lebih tinggi
menjadikan energi kinetik lebih rendah, dan temperatur lebih rendah.
Simulasi dengan temperatur awal terlalu tinggi dapat menyebabkan terjadi
error energi total yang besar, seperti pada simulasi berikut:
Gambar 5.8 Error energi total besar pada temperatur tinggi
Lompatan error energi total pada 25≈t dan 30≈t terjadi akibat lompatan
energi potensial yang tidak diimbangi energi kinetik:
Gambar 5.9 Lompatan energi potensial
49
Page 60
Kasus ini terjadi karena pada temperatur terlalu tinggi, terdapat molekul
yang bergerak terlalu cepat, sehingga dapat menembus dari luar ke dalam radius
cut-off. Dua molekul yang sebelumnya tidak berinteraksi lalu memiliki potensial
baru berharga negatif dan gaya baru yang berupa gaya tarik.
5.2 SIMULASI ENSEMBLE KANONIKAL
5.2.1 Termostat Nose Hoover
5.2.1.1 Pengujian Terhadap Parameter Nose Hoover Q
Simulasi dengan pengendalian temperatur Nose Hoover dilakukan dengan
parameter Tset sebagai temperatur yang diinginkan dan T sebagai temperatur
sistem dan selisihnya sebagai error temperatur. Simulasi dilakukan untuk 512
molekul dan Tset = 0,02 selama 25000 langkah waktu, dengan Q divariasikan.
1. Q = 1
Gambar 5.10 Grafik temperatur dengan termostat Nose-Hoover Q = 1
2. Q = 5
50
Page 61
Gambar 5.11 Grafik temperatur dengan termostat Nose-Hoover Q = 5
3. Q = 15
Gambar 5.12 Grafik temperatur dengan termostat Nose-Hoover Q = 15
Q T
1 0,02004
5 0,02001
15 0,01981
Tabel 5.2 Temperatur rata-rata terhadap parameter termostat Nose Hoover Q
Termostat Nose-Hoover menjadikan sistem berosilasi di sekitar harga Tset
= 0,02. Temperatur rata-rata T hampir sama dengan Tset, maka pengendalian
temperatur berhasil dilakukan dengan baik.
51
Page 62
Koreksi error temperatur bergantung pada parameter termostat Nose-
Hoover Q. Hasil simulasi menunjukkan bahwa semakin besar Q, semakin besar
perioda temperatur berosilasi, dengan kata lain koreksi lebih lambat. Ini sesuai
dengan rumus:
( ) sBi
ii TNktrmtQ 3)()( 2 −= ∑ &&ζ
Jika Q besar, menjadi kecil, sehingga perubahan ζ& ζ terhadap waktu
menjadi lebih kecil. Maka perubahan temperatur oleh termostat Nose Hoover juga
lebih lambat.
5.2.1.2 Uji Hamiltonian
Termostat Nose-Hoover tidak mempertahankan energi total sistem pada
harga yang konstan melainkan harga total Hamiltonian sistem dan reservoir kalor.
Maka simulasi ensemble kanonikal dengan termostat Nose-Hoover dapat diuji
kebenarannya dengan melihat Hamiltonian sepanjang simulasi. Error Hamiltonian
dihitung dengan
)0()0()(
HHtHerror −
= (5.2)
Simulasi dijalankan dengan 512 molekul, temperatur awal 0,02 dan
termostat Nose Hoover dengan Tset 0,02.
Gambar 5.13 Grafik Error Hamiltonian terhadap waktu
Error Hamiltonian sepanjang simulasi memenuhi spesifikasi (berorde 10-4).
52
Page 63
5.2.1.3 Error Temperatur pada Perubahan Tset
Pada bagian ini simulasi mulai tanpa pengendalian temperatur, lalu pada
t=100 diberikan pengendalian temperatur dengan termostat Nose-Hoover dengan
Tset = 0,02.
Gambar 5.14 Temperatur pada perubahan Tset dengan termostat Nose-Hoover
Temperatur sistem sebelum pengendalian temperatur berkisar di sekitar
0,01. Setelah sistem diberikan pengendalian temperatur, temperatur sistem
berosilasi di sekitar Tset = 0,02 dengan amplitudo kurang lebih (0,02-0,01)=0,01.
Meskipun sistem dijalankan beberapa waktu, amplitudo kurang lebih tidak
berubah, atau tidak teredam.
Ini dapat terjadi karena termostat Nose-Hoover dianggap memiliki ‘massa’
dan ‘momentum’, sehingga perpindahan kalor ke dalam atau ke luar sistem
memiliki ‘inersia thermal’ [9]. Momentum termal menyimpan energi kinetik yang
ditambah atau dikurangi dari sistem ke lingkungan, sehingga bertindak seperti
kapasitor.
Termostat Nose-Hoover mengontrol dan bukan ζ& ζ itu sendiri. Maka
dapat terjadi kasus di mana error temperatur dan adalah nol namun ζ& ζ bukanlah
nol, menyebabkan adanya koreksi lebih meskipun pada saat itu temperatur sistem
tidak perlu dikoreksi.
53
Page 64
-0.2
-0.1
0
0.1
0.2
ζζ&
Gambar 5.15 Perubahan ζ dan terhadap waktu ζ&
Jika Q besar, kecil dan ζ& ζ lambat berubah. Maka perubahan temperatur
oleh termostat Nose Hoover juga lebih lambat. Perubahan temperatur yang lambat
menyebabkan perubahan juga lambat. Maka perubahan ζ& ζ , dan T tersebut
menjadi lebih lambat, namun hubungan satu sama lain tidak berubah.
ζ&
5.2.1.4 Penurunan Matematis
Sistem dianggap berosilasi di sekitar temperatur rata-rata setT=T dengan
error temperatur T~ . Kecepatan rata-rata molekul dalam sistem dinamakan v dan
error kecepatan v~ .
Andai tidak ada interaksi antar molekul, atau potensial dan gaya antar molekul
adalah nol, maka percepatan molekul hanya diatur oleh termostat.
va ζ−= (5.3)
ζ& berbanding lurus dengan T~ , atau:
Tk ~1=ζ& (5.4)
dengan Q1
1 ∝k .
ζ dapat dihitung dari integrasi : ζ&
54
Page 65
∫= dtζζ & (5.5)
∫= dtTk )~( 1ζ
∫= dtTk ~1ζ
sehingga percepatan menjadi
vdtTka ).~( 1 ∫−=
vdtTkdtdv ).~( 1 ∫−= (5.6)
Hubungan antara T~ dan v~ diperoleh sebagai berikut: 2
2 .vkT = (5.7)
vkdvdT
22=
vdvdTT ~.~ =
vvkT ~2~2= (5.8)
Persamaan (4.6) disubstitusi ke dalam persamaan (4.4)
vdtvvkkdtdv .)~2( 21 ∫−=
)~.()~)~(2(~
21 vvdtvvvkkdtvd
dtvd
++−=+ ∫
Karena temperatur rata-rata tidak berubah terhadap waktu, maka 0=dtvd .
0)~.()~)~(2(~
21 =+++ ∫ vvdtvvvkkdtvd
0)~.()~)~((2~
21 =+++ ∫ vvdtvvvkkdtvd
Jika dianggap osilasi temperatur sangat kecil, vv <<~ maka vvv ≈+ ~ dan
persamaan dapat dilinierkan:
0).()~(2~
21 =+ ∫ vdtvvkkdtvd
0~2~
221 =+ ∫ dtvvkk
dtvd
55
Page 66
Setelah diturunkan terhadap t, diperoleh persamaan diferensial linier orde 2:
0~2~
2212
2
=+ vvkkdt
vd (5.9)
Persamaan ini memiliki solusi umum tAev λ−=~ (5.10)
dengan iba +=λ
sehingga persamaan menjadi
02 221
2 =+ −− tt AevkkAe λλλ
maka
02 221
2 =+ vkkλ (5.11)
karena , dan 1k 2k 2v selalu positif, adalah negatif dan 2λ λ adalah suatu
bilangan imajiner.
2212 vkki=λ , dan 0=a 212 kkvb = (5.12)
Persamaan ini adalah persamaan harmonis sederhana
212 kkv=ω (5.13)
)cos(.~ φωω +== tAAev ti (5.14)
v~ berosilasi tanpa redaman. Untuk temperatur,
vvkT ~2~2=
)cos(2~2 tvAkT ω= (5.15)
Error temperatur akan berosilasi tanpa redaman dengan perioda yang
bergantung dari harga v , dan . Karena 1k 2kQ
k 11 ∝ , maka dapat disimpulkan,
untuk error temperatur kecil, semakin besar parameter Nose-Hoover Q, semakin
lambat osilasi temperatur.
Dalam penelitian ini, error temperatur tidak kecil sehingga tidak berlaku
vv <<~ dan persamaan menjadi tidak linier, namun masih menunjukkan sifat-sifat
yang hampir sama.
56
Page 67
Selain itu dapat disimpulkan bahwa semakin tinggi temperatur rata-rata
juga osilasi semakin lambat.
5.2.2 Termostat Berendsen
5.2.2.1 Pengujian Terhadap Parameter Berendsen Q
Simulasi dengan pengendalian temperatur Berendsen dilakukan dengan
512 molekul dan Tset = 0,02 selama 25000 langkah waktu, dengan parameter Q
divariasikan.
1. Q = 0,1
Gambar 5.16 Grafik temperatur dengan termostat Berendsen Q = 0,1
2. Q = 1
57
Page 68
Gambar 5.17 Grafik temperatur dengan termostat Berendsen Q = 1
3. Q = 10
Gambar 5.18 Grafik temperatur dengan termostat Berendsen Q = 10
Q T
0,1 0,02000
1 0,01996
10 0,01967
Tabel 5.3 Temperatur rata-rata terhadap parameter Berendsen Q
Temperatur sistem berosilasi di sekitar Tset, berarti pengendalian
temperatur berhasil dijalankan dengan baik. Dari beberapa hasil simulasi dengan
Q bervariasi, terlihat bahwa error temperatur lebih besar pada Q besar. Ini terjadi
karena Q lebih besar berarti pengendalian temperatur lebih lemah, dan
menyebabkan sistem dapat berada pada temperatur yang lebih jauh dari Tset.
5.2.2.2 Error Temperatur pada Perubahan Tset
Simulasi dimulai tanpa pengendalian temperatur, lalu pada t=100
diberikan pengendalian Berendsen dengan Tset = 0,02.
58
Page 69
Gambar 5.19 Temperatur pada perubahan Tset dengan termostat Berendsen
Temperatur sistem sebelum pengendalian temperatur berkisar di sekitar
0,01. Setelah sistem diberikan pengendalian temperatur, temperatur sistem
berosilasi di sekitar 0,02 dengan amplitudo error temperatur yang semakin kecil
terhadap waktu. Setelah beberapa saat, temperatur sistem berkisar pada Tset
dengan error kecil. Maka termostat Berendsen lebih baik beradaptasi pada
perubahan Tset daripada termostat Nose-Hoover.
5.2.2.3 Penurunan Matematis
Seperti pada termostat Nose-Hoover, sistem dianggap berosilasi di sekitar
temperatur rata-rata setT=T dengan error temperatur T~ . Kecepatan rata-rata
molekul dalam sistem dinamakan v dan error kecepatan v~ .
Andai tidak ada interaksi antar molekul, atau potensial dan gaya antar molekul
adalah nol, maka percepatan molekul hanya diatur oleh termostat.
va ζ−=
namun dalam termostat Berendsen digunakan:
TTk~
1=ζ (5.16)
di mana Q
k 11 ∝ .
Sehingga percepatan menjadi
59
Page 70
vTTka .~
1−= (5.17)
vTTk
dtdv .
~1−= (5.18)
Hubungan antara T~ dan v~ sudah diperoleh: 2
2 .vkT =
vvkT ~2~2= (5.19)
Persamaan (4.19) disubstitusi ke persamaan (4.18)
vvk
vvkkdtdv
22
21 .
~2−= (5.20)
vkdtvd
dtvd ~2
~1−=+ (5.21)
Temperatur rata-rata tidak berubah terhadap waktu, maka 0=dtvd . Diperoleh
persamaan diferensial linier berorde satu:
0~2~
1 =+ vkdtvd (5.22)
Persamaan ini memiliki solusi umum tAev λ−=~ (5.23)
dengan iba +=λ
sehingga persamaan menjadi
02 1 =+− −− tt AekAe λλλ
maka
12k=λ (5.24)
karena adalah bilangan real positif, 1k λ adalah suatu bilangan real positif. tkAev 12~ −=
Error temperatur dihitung
vvkT ~2~2=
tkveAkT 1222~ −= (5.25)
60
Page 71
Error temperatur berubah terhadap waktu menuju nol secara eksponensial.
Semakin besar , semakin cepat error temperatur menuju nol. Karena 1kQ
k 11 ∝ ,
dapat disimpulkan bahwa semakin besar Q, koreksi error temperatur berlangsung
lebih lambat.
5.3 TEKANAN
Simulasi ini dilakukan dengan 512 molekul, σ =10,0 ε =0,625 =0,02
sebanyak 2500 iterasi.
t∆
Gambar 5.20 Perbandingan tekanan dan temperatur sistem
Tekanan yang dihitung dari simulasi berfluktuasi hampir sama dengan
temperatur sistem. Menurut teorema virial,
61
Page 72
∑∑ ⋅+=i j
ijij RFV
KVNP
rr
31
32
Komponen pertama (Pm) dari tekanan berkaitan dengan temperatur dan komponen
kedua (Pf) berkaitan dengan gaya antar molekul. Perbandingan antara kedua
komponen tersebut dalam simulasi:
Gambar 5.21 Perbandingan komponen Pm dan Pf dari tekanan sistem
Komponen Pm yang berorde 10-4 jauh lebih besar daripada Pf yang berorde 10-10.
Ini disebabkan karena molekul-molekul berada pada posisi potensial terendah
sehingga gaya antar molekul sangat kecil. Maka komponen kedua memberikan
kontribusi yang jauh lebih kecil daripada komponen pertama.
62
Page 73
Kondisi seperti ini juga dialami oleh gas ideal, di mana interaksi antar
molekul sangat kecil hingga diasumsikan nol, sehingga persamaan tekanan dari
teorema virial
∑∑ ⋅+=i j
ijij RFV
KVNP
rr
31
32
menjadi persamaan gas ideal
PV = NkT (5.26)
5.4 ENTALPI
Entalpi sistem diperoleh dari simulasi ensemble mikrokanonikal (sistem
terisolasi) 512 molekul:
Gambar 5.22 Perbandingan entalpi dan tekanan sistem
63
Page 74
Perubahan entalpi sistem mengikuti perubahan tekanan sistem, karena
seperti dirumuskan
H = E+PV
Pada simulasi ensemble mikrokanonikal, volume sistem pada simulasi ini adalah
konstan dan energi total sistem juga dipertahankan konstan, maka faktor yang
mempengaruhi perubahan entalpi sistem hanya adalah tekanan sistem.
5.5 POSISI
Pengamatan posisi molekul-molekul dalam simulasi 64 molekul pada
beberapa temperatur tertentu menunjukkan:
1. T = 0,1
Pada temperatur ini, molekul-molekul bergetar di sekitar posisi awal yang
berbentuk kubik. Melihat formasi molekul yang teratur ini, materi dapat
dianggap berada dalam fasa padat. Tidak ada molekul yang memasuki atau
keluar dari radius cutoff molekul lain, sehingga kesalahan simulasi kecil.
2. T = 1
64
Page 75
Temperatur yang lebih tinggi menyebabkan molekul-molekul mulai lepas
dari posisi awal. Terdapat molekul yang memasuki atau keluar dari radius
cutoff molekul lain.
3. T = 10
Pada temperatur ini, molekul-molekul sudah lepas sama sekali dari posisi
awal yang teratur. Ini dapat diartikan bahwa molekul sudah tidak berada
pada fasa padat lagi melainkan fasa cair/gas. Keadaan ini harus
dihindarkan, karena beberapa algoritma seperti algoritma Verlet tidak
dapat dipergunakan untuk materi cair atau gas.
65
Page 76
BAB 6
KESIMPULAN DAN SARAN
6.1 KESIMPULAN
1. Simulasi ensemble mikrokanonikal mendapat hasil yang baik, dengan
error semakin kecil jika time step kecil. Time step terbesar dengan error
yang masih memenuhi spesifikasi adalah 0,02 dan dapat digunakan untuk
simulasi selanjutnya.
2. Dalam simulasi ensemble mikrokanonikal, temperatur sistem sesaat dan
rata-rata tidak pernah melebihi temperatur awal jika simulasi dimulai
dengan posisi kubik berpotensi terendah. Temperatur akhir dan rata-rata
sistem tidak dapat diprediksi dari temperatur awal.
3. Temperatur sistem yang terlalu tinggi akan menyebabkan adanya molekul
yang masuk ke dalam jangkauan molekul lain, dan akan menimbulkan
error yang besar.
4. Termostat Nose Hoover dan termostat Berendsen berhasil mengendalikan
temperatur sistem sehingga berkisar pada temperatur yang diinginkan.
5. Parameter Q pada termostat Nose Hoover mempengaruhi frekuensi osilasi
error temperatur. Pada termostat Berendsen, Q mempengaruhi besar error
temperatur.
6. Termostat Nose Hoover tidak melakukan peredaman error temperatur
sistem dari temperatur set. Termostat Berendsen lebih baik dalam
mengendalikan temperatur.
7. Tekanan hampir seluruhnya bergantung pada temperatur, seperti gas ideal.
Entalpi hampir seluruhnya bergantung pada tekanan.
6.2 SARAN
1. Pengujian simulasi dari penelitian ini dengan parameter-parameter spesifik
untuk material tertentu, misal Argon.
66
Page 77
2. Pengujian simulasi dengan jumlah molekul lebih banyak dengan bantuan
pembuatan daftar tetangga (neighbour list) dan komputasi paralel.
3. Modifikasi simulasi agar dapat melakukan pengendalian tekanan.
4. Modifikasi simulasi agar dapat melakukan simulasi dinamika molekul
pada fasa cair dan gas.
5. Visualisasi tiga dimensi.
67
Page 78
DAFTAR PUSTAKA
1. Ceperly, D., Simulation Techniques,
http://archive.ncsa.uiuc.edu/Apps/CMP/lectures/cms01/lectures.ppt
2. Haile, J.M., Molecular Dynamics Simulation: Elementary Methods,
John Wiley & Sons, Inc., 1992
3. Cengel, Yunus A., dan Boles, Michael A., Thermodynamics: An
Engineering Approach, McGraw-Hill Inc, 1994
4. Stote, R., Dejaegere, A., Kuznetsov, D., dan Falquet, L., CHARMM
Molecular Dynamics Simulations,
http://www.ch.embnet.org/MD_tutorial/
5. Ercolessi, Furio, A Molecular Dynamics Primer,
http://www.sissa.it/furio/md
6. Refson, Keith, Moldy User’s Manual,
http://www.earth.ox.ac.uk/~keith/moldy-manual/moldy.html
7. Huang, Kerson, Statistical Mechanics, John Wiley & Sons, Inc., 1987
8. Nose, Shuichi, A Molecular Dynamics Method for Simulations in the
Canonical Ensemble, Molecular Physics, 1984, Vol 52, No. 2, 255-268
9. Allen, M.P. and Tildesley, D.J., Computer Simulation of Liquids,
Oxford University Press, 1987
10. Cornwell, C.F dan Wille, L.T., Parallel Molecular Dynamics
Simulations for Short-Ranged Many-Body Potentials, Computer
Physics Communications 128 (2000), 477-491
11. Kruse, R. L., Leung, B. P. dan Tondo, C. L., Data Structures and
Program Design in C, Prentice-Hall Inc., 1998
12. Fahmi, Mahuddin, Perancangan Perangkat Lunak Simulasi Dinamika
Molekular dengan Model Potensial Lennard Jones, Tugas Akhir, 1999
13. Aitken, P. dan Jones, B., Teach Yourself C in 21 Days, SAMS
Publishing, 1994
14. Lee, R.C. dan Tepfenhart, W. M., UML and C++, Prentice-Hall Inc.,
1997
68
Page 79
15. Nose, Shuichi, A Unified Formulation of the Constant Temperature
Molecular Dynamics Methods, Journal of Chemical Physics 81, 1984
16. Reif, F., Fundamentals of Statistical and Thermal Physics, McGraw-
Hill Publishing Company, 1965
17. Reisdorph, Kent, Teach Yourself Borland C++ Builder in 21 Days,
SAMS Publishing, 1997
18. Steinbach, Peter J., Introduction to Macromolecular Simulation,
http://cmm.cit.nih.gov/intro_simulation
19. Walpole, Ronald E. dan Myers, Raymod H., Probability and Statistics
for Engineers and Scientists, Macmillan Publishing Company, 1993
20. Woodcock, L.V., Isothermal Molecular Dynamics Calculations for
Liquid Salts, Chemical Physics Letters, Agustus 1971, Vol 10, No. 3
21. Stadler, J., Mikulla, R. dan Trebin, H.-R., IMD: A Software Package for
Molecular Dynamics Studies on Parallel Computers, International
Journal of Modern Physics C, Vol. 8, No. 5 (1997)
69
Page 80
LAMPIRAN A
LISTING PROGRAM
MainForm.h //--------------------------------------------------------------------------- #ifndef MainFormH #define MainFormH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ExtCtrls.hpp> #include <Chart.hpp> #include <Series.hpp> #include <TeEngine.hpp> #include <TeeProcs.hpp> #include <ComCtrls.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TPanel *Panel1; TPanel *Panel2; TLabel *Label5; TEdit *Time; TButton *ButtonRun; TEdit *U; TEdit *K; TEdit *E; TEdit *error; TLabel *Label12; TLabel *Label13; TLabel *Label14; TLabel *Label15; TEdit *beta; TLabel *Label16; TEdit *Tavg; TLabel *Label18; TEdit *T; TLabel *Label20;
70
Page 81
TEdit *Ham; TLabel *Label21; TEdit *P; TLabel *Label22; TLabel *Label23; TEdit *Pavg; TGroupBox *GroupBox1; TRadioButton *RadioButton64; TRadioButton *RadioButton125; TRadioButton *RadioButton216; TRadioButton *RadioButton343; TRadioButton *RadioButton512; TGroupBox *GroupBox2; TLabel *Label2; TEdit *SIG; TLabel *Label3; TEdit *EPS; TLabel *Label4; TEdit *L0; TLabel *Label6; TEdit *DT; TLabel *Label7; TEdit *TMAX; TLabel *Label8; TEdit *RC; TLabel *Label19; TEdit *Kb; TLabel *Label9; TEdit *T0; TGroupBox *GroupBox3; TLabel *Label10; TEdit *Q; TLabel *Label11; TEdit *TSet; TLabel *Label17; TEdit *TSetStart; TRadioButton *RadioButtonNone; TRadioButton *RadioButtonNoseHoover; TRadioButton *RadioButtonBerendsen; TButton *ButtonReset; TButton *ButtonStop; TCheckBox *DisableLennardJones; TPanel *PanelEnergy; TChart *ChartPotential; TFastLineSeries *Series1; TChart *ChartKinetic; TFastLineSeries *Series2; TButton *Button1; TButton *Button2;
71
Page 82
TButton *Button3; TButton *Button4; TButton *Button5; TPanel *PanelTemperature; TChart *ChartTemperature; TChart *ChartError; TFastLineSeries *Series3; TFastLineSeries *Series9; TChart *ChartZeta; TChart *ChartZetaDot; TFastLineSeries *Series10; TFastLineSeries *Series11; TChart *Chart1; TFastLineSeries *Series4; TButton *Button6; TPanel *PanelPressure; TChart *ChartPressure; TFastLineSeries *Series17; TChart *ChartEnthalpy; TFastLineSeries *Series18; TPanel *PanelPosition; TChart *ChartPosition; TPointSeries *Series21; TRadioButton *RadioButtonXY; TRadioButton *RadioButtonYZ; TRadioButton *RadioButtonZX; TPanel *PanelHamiltonian; TChart *ChartHamiltonian; TChart *ChartS; TFastLineSeries *Series13; TChart *ChartSDot; TPanel *PanelMomentum; TChart *ChartMomentumX; TChart *ChartMomentumY; TChart *ChartMomentumZ; TFastLineSeries *Series5; TFastLineSeries *Series6; TFastLineSeries *Series7; TChart *ChartPf; TChart *ChartPm; TFastLineSeries *Series19; TFastLineSeries *Series20; TChart *ChartHamiltonianError; TLabel *Label1; TEdit *HamError; TFastLineSeries *Series14; TFastLineSeries *Series15; TFastLineSeries *Series16;
72
Page 83
void __fastcall ButtonRunClick(TObject *Sender); void __fastcall ButtonStopClick(TObject *Sender); void __fastcall ButtonResetClick(TObject *Sender); void __fastcall TSetChange(TObject *Sender); void __fastcall Button1Click(TObject *Sender); void __fastcall Button3Click(TObject *Sender); void __fastcall Button6Click(TObject *Sender); void __fastcall Button5Click(TObject *Sender); void __fastcall Button4Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); void Output(); bool stop; }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
73
Page 84
MainForm.cpp //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "MainForm.h" #include "Simulation.h" #include "Property.h" #include "Parameter.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; Simulation *Sim = new Simulation; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { stop = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::ButtonRunClick(TObject *Sender) { ButtonRun->Enabled = false; ButtonStop->Enabled = true; Sim->Run(); ButtonStop->Enabled = false; ButtonReset->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::ButtonStopClick(TObject *Sender) { stop = 1; } //---------------------------------------------------------------------------
74
Page 85
void __fastcall TForm1::ButtonResetClick(TObject *Sender) { ButtonReset->Enabled = false; Sim->Reset(); stop = 0; Time->Text = 0; U->Text = 0; K->Text = 0; E->Text = 0; error->Text = 0; beta->Text = 0; T->Text = 0; Ham->Text = 0; HamError->Text = 0; P->Text = 0; Tavg->Text = 0; Refresh(); while (Series1->Count() != 0) { Series1->Delete(0); Series2->Delete(0); Series3->Delete(0); Series4->Delete(0); Series5->Delete(0); Series6->Delete(0); Series7->Delete(0); //Series8->Delete(0); Series9->Delete(0); Series10->Delete(0); Series11->Delete(0); //Series12->Delete(0); Series13->Delete(0); Series14->Delete(0); Series15->Delete(0); Series16->Delete(0); Series17->Delete(0); Series18->Delete(0); Series19->Delete(0); Series20->Delete(0); } while (Series21->Count() != 0) { Series21->Delete(0);
75
Page 86
} ButtonRun->Enabled = true; } //--------------------------------------------------------------------------- void TForm1::Output() { Time->Text = Sim->t; U->Text = Prop->U; K->Text = Prop->K; E->Text = Prop->E; error->Text = Prop->error; beta->Text = Prop->beta; T->Text = Prop->T; Ham->Text = Prop->Ham; HamError->Text = Prop->HamError; P->Text = Prop->P; double a = StrToFloat(Tavg->Text); Tavg->Text = (Sim->t*a + Prop->T)/(Sim->t+1); double b = StrToFloat(Pavg->Text); Pavg->Text = (Sim->t*b + Prop->P)/(Sim->t+1); if (Sim->t%(Par->TMAX/500) == 0) { Series1->AddXY(Sim->t*Par->DT, Prop->U/Par->N, ' ' , clBlue ); Series2->AddXY(Sim->t*Par->DT, Prop->K/Par->N * pow(10,3), ' ' , clBlue ); Series3->AddXY(Sim->t*Par->DT, Prop->E/Par->N, ' ' , clBlue ); Series4->AddXY(Sim->t*Par->DT, Prop->error * pow(10,9), ' ' , clBlue ); Series5->AddXY(Sim->t*Par->DT, Prop->momentum[0] * pow(10,9), ' ' , clBlue ); Series6->AddXY(Sim->t*Par->DT, Prop->momentum[1] * pow(10,9), ' ' , clBlue ); Series7->AddXY(Sim->t*Par->DT, Prop->momentum[2] * pow(10,9), ' ' , clBlue ); Series9->AddXY(Sim->t*Par->DT, Prop->T, ' ' , clBlue ); Series10->AddXY(Sim->t*Par->DT, Prop->zeta, ' ' , clBlue ); Series11->AddXY(Sim->t*Par->DT, Prop->zetadot, ' ' , clBlue );
76
Page 87
Series13->AddXY(Sim->t*Par->DT, Prop->Ham, ' ' , clBlue ); Series14->AddXY(Sim->t*Par->DT, Prop->HamError * pow(10,3), ' ' , clBlue ); Series15->AddXY(Sim->t*Par->DT, Prop->s, ' ' , clBlue ); Series16->AddXY(Sim->t*Par->DT, Prop->sdot, ' ' , clBlue ); Series17->AddXY(Sim->t*Par->DT, Prop->P * pow(10,6), ' ' , clBlue ); Series18->AddXY(Sim->t*Par->DT, Prop->H, ' ' , clBlue ); Series19->AddXY(Sim->t*Par->DT, Prop->Pf * pow(10,6), ' ' , clBlue ); Series20->AddXY(Sim->t*Par->DT, Prop->Pm * pow(10,6), ' ' , clBlue ); } if (ChartPosition->Visible == true) { while (Series21->Count() != 0) Series21->Delete(0); for (Molecule *p = head; p != NULL; p = p->next) { if (RadioButtonXY->Checked == true) Series21->AddXY(p->R[0], p->R[1], ' ' , clBlue); else if (RadioButtonYZ->Checked == true) Series21->AddXY(p->R[1], p->R[2], ' ' , clBlue); else if (RadioButtonZX->Checked == true) Series21->AddXY(p->R[2], p->R[0], ' ' , clBlue); } } Refresh(); } //--------------------------------------------------------------------------- //---------------------------------------------------------------------------
77
Page 88
void __fastcall TForm1::TSetChange(TObject *Sender) { if (TSet->Text != "") Par->Tset = StrToFloat(TSet->Text); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { PanelEnergy->Visible = true; PanelMomentum->Visible = false; PanelTemperature->Visible = false; PanelHamiltonian->Visible = false; PanelPressure->Visible = false; PanelPosition->Visible = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { PanelEnergy->Visible = false; PanelMomentum->Visible = true; PanelTemperature->Visible = false; PanelHamiltonian->Visible = false; PanelPressure->Visible = false; PanelPosition->Visible = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { PanelEnergy->Visible = false; PanelMomentum->Visible = false; PanelTemperature->Visible = true; PanelHamiltonian->Visible = false; PanelPressure->Visible = false; PanelPosition->Visible = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) { PanelEnergy->Visible = false; PanelMomentum->Visible = false;
78
Page 89
PanelTemperature->Visible = false; PanelHamiltonian->Visible = true; PanelPressure->Visible = false; PanelPosition->Visible = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button5Click(TObject *Sender) { PanelEnergy->Visible = false; PanelMomentum->Visible = false; PanelTemperature->Visible = false; PanelHamiltonian->Visible = false; PanelPressure->Visible = true; PanelPosition->Visible = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button6Click(TObject *Sender) { PanelEnergy->Visible = false; PanelMomentum->Visible = false; PanelTemperature->Visible = false; PanelHamiltonian->Visible = false; PanelPressure->Visible = false; PanelPosition->Visible = true; } //---------------------------------------------------------------------------
79
Page 90
Molecule.h //--------------------------------------------------------------------------- #ifndef MoleculeH #define MoleculeH class Molecule { public: Molecule(); int index; //molecule index number double m; //mass of molecule double R[3]; //position at t double Rnext[3]; //position at t+dt double Rprev[3]; //position at t-dt double v[3]; //velocity at t double F[3]; //force received at t Molecule* next; //pointer to next molecule }; //--------------------------------------------------------------------------- #endif
80
Page 91
Molecule.cpp //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Molecule.h" //--------------------------------------------------------------------------- #pragma package(smart_init) Molecule::Molecule() { m = 1; next = NULL; }
81
Page 92
Simulation.h //--------------------------------------------------------------------------- #ifndef SimulationH #define SimulationH #include <math.h> #include "MainForm.h" #include "Molecule.h" #include "LennardJones.h" #include "Property.h" #include "Parameter.h" //--------------------------------------------------------------------------- class Simulation { public: Simulation(); int t; void Run(); void Reset(); private: void NextStep(); }; extern Molecule *head; extern LennardJones *LJ; extern Property *Prop; extern Parameter *Par; #endif
82
Page 93
Simulation.cpp //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Simulation.h" #include "Verlet.h" #include "Initialize.h" //--------------------------------------------------------------------------- #pragma package(smart_init) Initialize *Init = new Initialize; Verlet *Ver = new Verlet; Molecule *head = NULL; LennardJones *LJ = new LennardJones; Property *Prop = new Property; Parameter *Par = new Parameter; Simulation::Simulation() { t = 0; } void Simulation::Run() { for (t = 0; t < 1; t++) { Init->Run(); LJ->Run(); Ver->RunOne(); } Form1->ChartPosition->LeftAxis->Minimum = -Par->L/2; Form1->ChartPosition->LeftAxis->Maximum = Par->L/2; Form1->ChartPosition->BottomAxis->Minimum = -Par->L/2; Form1->ChartPosition->BottomAxis->Maximum = Par->L/2; for (t = 1; t < (Par->TMAX+1); t ++) { NextStep();
83
Page 94
LJ->Run(); Ver->Run(); Form1->Output(); Application->ProcessMessages(); if (Form1->stop) break; } } void Simulation::Reset() { t = 0; while (head != NULL) { Molecule* p = head; head = p->next; delete (p); } } void Simulation::NextStep() { for (Molecule *p = head; p != NULL; p = p->next) { for (int i = 0; i < 3; i++) { p->Rprev[i] = p->R[i]; p->R[i] = p->Rnext[i]; } } }
84
Page 95
Parameter.h //--------------------------------------------------------------------------- #ifndef ParameterH #define ParameterH //--------------------------------------------------------------------------- class Parameter { public: Parameter(); void Set(); int N; //number of molecules int NAxis; //number of molecules along length of cube double SIG; //length parameter of interaction double EPS; //strength of interaction double L0; //length of molecular lattice double L; //length of simulation box double RC; //cutoff distance double DT; //iteration time step double T0; //average initial velocity of each molecule double Kb; //Boltzmann constant int TMAX; //maximum iteration number double Q; //Nose-Hoover thermostat parameter double Tset; //temperature set point }; //--------------------------------------------------------------------------- #endif
85
Page 96
Parameter.cpp //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Parameter.h" #include "Simulation.h" //--------------------------------------------------------------------------- #pragma package(smart_init) Parameter::Parameter() { } void Parameter::Set() { if (Form1->RadioButton64->Checked) { N = 64; NAxis = 4; } if (Form1->RadioButton125->Checked) { N = 125; NAxis = 5; } if (Form1->RadioButton216->Checked) { N = 216; NAxis = 6; } if (Form1->RadioButton343->Checked) { N = 343; NAxis = 7; } if (Form1->RadioButton512->Checked) { N = 512; NAxis = 8; } SIG = StrToFloat(Form1->SIG->Text); EPS = StrToFloat(Form1->EPS->Text); L0 = StrToFloat(Form1->L0->Text)*SIG; L = NAxis * L0;
86
Page 97
DT = StrToFloat(Form1->DT->Text); TMAX = StrToFloat(Form1->TMAX->Text); RC = StrToFloat(Form1->RC->Text)*L0; T0 = StrToFloat(Form1->T0->Text); Kb = StrToFloat(Form1->Kb->Text); Q = StrToFloat(Form1->Q->Text); Tset = StrToFloat (Form1->TSet->Text); }
87
Page 98
Property.h //--------------------------------------------------------------------------- #ifndef PropertyH #define PropertyH //--------------------------------------------------------------------------- class Property { public: Property(); void Run(); double U; double K; double E; double E0; double momentum[3]; double error; double zeta; double zetadot; double beta; double s; double sdot; double T; double P; double Pf; double Pm; double H; double Ham; double Ham0; double HamError; private: void Kinetic(); void Energy(); }; //--------------------------------------------------------------------------- # endif
88
Page 99
Property.cpp //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Property.h" #include "Simulation.h" //--------------------------------------------------------------------------- #pragma package(smart_init) Property::Property() { U = 0; K = 0; E = 0; E0 = 0; for (int i = 0; i<3; i++) momentum[i] = 0; error = 0; zeta = 0; zetadot = 0; beta = 0; s = 1; sdot = 0; T = 0; P = 0; H = 0; Ham = 0; } void Property::Run() { Kinetic(); Energy(); T = 2 * Prop->K /(3*Par->N*Par->Kb); Pm = 2*Par->N/(3*pow(Par->L,3))*Prop->K; P = Pf+Pm; H = E + P * pow(Par->L,3); if (s>0) Ham = U + K*pow(s,2) + 0.5*Par->Q*pow(sdot,2) + 3*Par->Kb * T *log(s);
89
Page 100
} void Property::Kinetic() { K = 0; for (int i = 0; i<3; i++) momentum[i] = 0; for (Molecule *p = head; p != NULL; p = p->next) for (int i = 0; i < 3; i++) { K += 0.5 * p->m * pow(p->v[i],2); momentum[i] += p->m * p->v[i]; } } void Property::Energy() { E = U + K; if (E0 != 0) error = (E-E0)/E0; if (Ham0 != 0) HamError = (Ham-Ham0)/Ham0; }
90
Page 101
Initialize.h //--------------------------------------------------------------------------- #ifndef InitializeH #define InitializeH //--------------------------------------------------------------------------- class Initialize { public: Initialize(); void Run(); private: void CreateMolecules(); void InitialPosition(); void InitialVelocity(); }; //--------------------------------------------------------------------------- #endif
91
Page 102
Initialize.cpp //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <stdlib.h> #include <math.h> #include "Initialize.h" #include "Parameter.h" #include "MainForm.h" #include "LennardJones.h" #include "Property.h" #include "Simulation.h" //--------------------------------------------------------------------------- #pragma package(smart_init) //--------------------------------------------------------------------------- Initialize::Initialize() { } void Initialize::Run() { Par->Set(); CreateMolecules(); InitialPosition(); InitialVelocity(); } void Initialize::CreateMolecules() { Molecule* p; for (int i = 0; i < Par->N; i++) { if ((p = new Molecule) != 0) { p->index = Par->N - i; p->next = head; head = p; } } }
92
Page 103
void Initialize::InitialPosition() { //CUBE FORMATION double x0 = 0.5*(1-Par->NAxis)*Par->L0; double y0 = x0; double z0 = x0; Molecule* p = head; double z = z0; for (int i = 0; i < Par->NAxis; i++) { double y = y0; for (int j = 0; j < Par->NAxis; j++) { double x = x0; for (int k = 0; k < Par->NAxis; k++) { p->R[0] = x; p->R[1] = y; p->R[2] = z; p = p->next; x += Par->L0; } y += Par->L0; } z += Par->L0; } } void Initialize::InitialVelocity() { double K = 0; double T = 0; Randomize(); for (int i = 0; i < 3; i++) { double V = 0; //ASSIGN RANDOM VALUES for (Molecule* p = head; p != NULL; p = p->next) { p->v[i] = 1; for (int j = 0; j < 200; j++) p->v[i] += 0.01*(random(2)-0.5); //WEIGHTED RANDOM NUMBER
93
Page 104
if (random(2) == 0) p->v[i] = -p->v[i]; //DIRECTION V += p->v[i]; K += 0.5*p->m*pow(p->v[i],2); } //READJUSTING MOMENTUM ON AXIS for (Molecule* p = head; p != NULL; p = p->next) p->v[i] -= V/Par->N; } T = 2*K/(3*Par->N*Par->Kb); for (int i = 0; i < 3; i++) { for (Molecule* p = head; p != NULL; p = p->next) { p->v[i] *= sqrt(Par->T0/T); } } }
94
Page 105
Verlet.h //--------------------------------------------------------------------------- #ifndef VerletH #define VerletH class Verlet { public: Verlet(); void Run(); //Run the Simulation void RunOne(); private: //double zeta; double zetaprev; double zetanext; //double beta; double sprev; double snext; void NextStep(); void PredictPosition(); void PredictPositionOne(); void Velocity(); void PredictZeta(); void PredictS(); void VelocityScale(); }; //--------------------------------------------------------------------------- # endif
95
Page 106
Verlet.cpp //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <math.h> #include "Verlet.h" #include "Parameter.h" #include "MainForm.h" #include "LennardJones.h" #include "Property.h" #include "Simulation.h" //--------------------------------------------------------------------------- #pragma package(smart_init) Verlet::Verlet() { zetanext = 0; zetaprev = 0; snext = 1; sprev = 1; } void Verlet::Run() { NextStep(); PredictPosition(); Velocity(); Prop->Run(); PredictZeta(); PredictS(); Prop->zetadot = (zetanext-zetaprev)/(2*Par->DT); } void Verlet::RunOne() { PredictPositionOne(); Prop->Run(); Prop->E0 = Prop->E; Prop->Ham0 = Prop->Ham; } void Verlet::NextStep()
96
Page 107
{ zetaprev = Prop->zeta; sprev = Prop->s; Prop->zeta = zetanext; Prop->s = snext; Prop->beta = 0.5 * Prop->zeta * Par->DT; Prop->sdot = Prop->zeta * Prop->s; } void Verlet::PredictPosition() { for (Molecule *p = head; p != NULL; p = p->next) { for (int i = 0; i < 3; i++) { if (Form1->RadioButtonNone->Checked == true) p->Rnext[i] = 2 * p->R[i] - p->Rprev[i] + p->F[i]/p->m * pow(Par->DT,2); else p->Rnext[i] = (2 * p->R[i] - (1-Prop->beta) * p->Rprev[i] + p->F[i]/p->m * pow(Par->DT,2))/(1+Prop->beta); if (p->Rnext[i] > 0.5*Par->L) { p->Rnext[i] -= Par->L; p->R[i] -= Par->L; p->Rprev[i] -= Par->L; } if (p->Rnext[i] < -0.5*Par->L) { p->Rnext[i] += Par->L; p->R[i] += Par->L; p->Rprev[i] += Par->L; } } } } void Verlet::PredictPositionOne() { for (Molecule *p = head; p != NULL; p = p->next) for (int i = 0; i < 3; i++) p->Rnext[i] = p->R[i] + p->v[i] * Par->DT + p->F[i]/p->m * pow(Par->DT,2); }
97
Page 108
void Verlet::Velocity() { for (Molecule *p = head; p != NULL; p = p->next) { for (int i = 0; i < 3; i++) { p->v[i] = (p->Rnext[i] - p->Rprev[i]) / (2 * Par->DT); } } } void Verlet::PredictZeta() { if (Form1->RadioButtonBerendsen->Checked == true) zetanext = (Prop->T-Par->Tset)/(2*Par->Q*Prop->T); else if (Form1->RadioButtonNoseHoover->Checked == true) zetanext = zetaprev + 2 * Par->DT * ((2*Prop->K)-(3*Par->N*Par->Kb*Par->Tset))/ Par->Q; } void Verlet::PredictS() { snext = sprev + 2 * Prop->sdot*Par->DT; } void Verlet::VelocityScale() { for (int i = 0; i < 3; i++) { for (Molecule* p = head; p != NULL; p = p->next) { p->v[i] *= sqrt(Par->Tset/Prop->T); p->Rnext[i] = p->Rprev[i] + p->v[i] * 2 * Par->DT; } } }
98
Page 109
LennardJones.h #ifndef LennardJonesH #define LennardJonesH #include "Molecule.h" class LennardJones { public: LennardJones(); void Run(); private: double RAxis[3], Rij; double force[3]; void ClearValues(); void Distance (Molecule *p1, Molecule *p2); void Force(Molecule *p1, Molecule *p2); void Potential(Molecule *p1, Molecule *p2); void PressureByForce(Molecule *p1, Molecule *p2); }; //--------------------------------------------------------------------------- #endif
99
Page 110
LennardJones.cpp //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <math.h> #include "LennardJones.h" #include "Simulation.h" //--------------------------------------------------------------------------- #pragma package(smart_init) LennardJones::LennardJones() { Rij = 0; for (int i = 0; i < 3; i++) { RAxis[i] = 0; force[i] = 0; } } void LennardJones::Run() { ClearValues(); for (Molecule *p1 = head; p1 != NULL; p1 = p1->next) { for (Molecule *p2 = p1->next; p2 != NULL; p2 = p2->next) { Distance(p1,p2); if (Rij < Par->RC) { if (Form1->DisableLennardJones->Checked == false) { Force(p1,p2); Potential(p1,p2); PressureByForce(p1,p2); } } } } } void LennardJones::ClearValues()
100
Page 111
{ Prop->U = 0; Prop->Pf = 0; for (Molecule *p = head; p != NULL; p = p->next) for (int i = 0; i < 3; i++) p->F[i] = 0; } void LennardJones::Distance (Molecule *p1, Molecule *p2) { for (int i=0; i<3; i++) { RAxis[i] = p1->R[i] - p2->R[i]; if (RAxis[i] > 0.5*Par->L) RAxis[i] -= Par->L; if (RAxis[i] < -0.5*Par->L) RAxis[i] += Par->L; } Rij = sqrt(pow(RAxis[0],2)+pow(RAxis[1],2)+pow(RAxis[2],2)); } void LennardJones::Force (Molecule *p1, Molecule *p2) { for (int i=0; i<3; i++) { force[i] = 24 * Par->EPS * RAxis[i] * pow(Par->SIG,6) / pow(Rij,8) * (2 * pow(Par->SIG/Rij,6) - 1); p1->F[i] += force[i]; p2->F[i] -= force[i]; //Newton's Third Law } } void LennardJones::Potential (Molecule *p1, Molecule *p2) { Prop->U += 4 * Par->EPS *(pow(Par->SIG/Rij,12)- pow(Par->SIG/Rij,6)); } void LennardJones::PressureByForce(Molecule *p1, Molecule *p2) { for (int i=0; i<3; i++) Prop->Pf += force[i] * RAxis[i]; Prop->Pf = Prop->P/(3*pow(Par->L,3));
101