【隨筆】玩了一下 Gadget-4

說到物理模擬,多數人第一個想到的題目,大概就是三體運動了吧。或者更廣義的說,是多個質點之間的重力如何互相影響,也就是所謂的多體問題,或說 N body problem。

由於在物理上簡單易懂,就只是大學生都學過的牛頓定律,這個題目一直都很受大學生歡迎,平均下來每年的實驗物理課都會有一兩組做這個吧,算上其他計算和數值的課可能還更多。但也因為原理本身如此簡單,因此可以精進的方向要嘛是數值方法,要嘛是科學目標。

這兩個方向,在下都有蠻深刻的體會。大二上實驗物理,王一晨和陳重名的專題作品是一份採用 RK7(還是更高?我忘了...)的 Direct N body code,讓我首次認識這些高階的數值積分法;後來大二下在計算物理概論上,我們就合力用 Python 和 C 升級了原版的程式,加入平行化等功能,做了更炫的視覺化套件,用來研究小行星受潮汐力摧毀而形成行星環的過程。現在回頭看我們繞了很多彎路,題目啦分析啦可能也都還蠻幼稚的,但這趟過程確實是非常有趣且記憶猶新。

然後呢?Well,這兩年來我雖然有再寫一些 Direct N body 的程式,但目標主要都是想要把程式弄得簡短、好讀,而不是再去精進效能。畢竟 RK、平行化都玩過了,再往上的 Tree method、Fast multiple method 這些東西,就不太算是一般大學生可以在課餘時間土砲出來的東西了。

時間快進到前幾天。幾位這學期修宇宙論的同學們,這幾天正在被 Andrew 的期末作業搞得廢寢忘食(字面意義上的)。而他們的題目,正是 Cosmological N body Simulation。身為兩年前同樣修過宇宙論,還交了一份爛報告給 Andrew 的人,我也是理所當然(?)的對這份作業很感興趣(?),所以參與了一些討論(對了,我好像還寫過宇宙學模擬的文章來著?XD [1])。不久,隨時看著我的 Google 老大哥(?)就在我的 YouTube 推薦影片裡面,混入了一部 Volker Springel 去年的演講 [2],談的是他剛剛開發完成的 Gadget-4 程式。

看完之後我就想:Hmm......幾年前我有試過去載 Swift(另一個 SPH Code)來玩,不過失敗了。我甚至已經不太記得當初是怎麼失敗的,但十之八九是死在環境問題上。然而,我現在已經有一年多操作 FLASH 的經驗 [3],也許這次會有不一樣的結果?於是腦袋一熱,就去把程式複製了下來,花費一段時間搞定環境問題,挑了一個範例情境丟下去跑。半天後:噠噠,一張小小的 Cosmic Web 就長出來了~

這些圖具體有什麼意義有點一言難盡,看得懂的自然就看得懂,看不懂的話我可以推一些宇宙學和大尺度結構的教材大家自己去看。但即使撇開科學,這次的經歷還是有很多東西可以講的。

首先,這個模擬用到了 128^3 ~ 兩百萬個粒子,輾壓我們大二時自己土砲的程式好幾個數量級不說,這種等級的計算在 30 年前,可是要放在超級電腦上跑數十甚至上百個小時的大模擬 [4]。但現在,一個普通人的普通筆電半天就可以搞定(我甚至是只用兩個 core 去跑)。電腦硬體和軟體上的進步真的是非常令人驚豔。Volker 在演講中有不斷強調一個比喻(Ken 老師也常常講),觀測天文學家需要望遠鏡和儀器,正如計算天文學家需要電腦和軟體,沒有好的儀器,縱使有好的望遠鏡收集大量的光子也沒什麼用。

其次,開源是個好文明。包括這個 Gadget-4 在內,天文領域多數的程式都是開源、免費、社群開發的,大大降低新手入門的門檻。你的學校不必花幾千萬幾十億去買版權,你也不用每個月花幾千塊續訂,然後背負著浪費一堆預算的壓力去擠出它的價值。相反的,這些軟體任何人都可以自由下載,然後,用許多計算物理學家的話來說:Play around with it。雖然現階段的我可能還沒什麼資格說,但我想學術界需要的正是這種自由舒適的風氣,才能讓人長期保持活躍的創造力。Gadget-4 的授權用的是 GNU GPLv3,說實話我對授權不是很熟,但是乍看之下這個授權甚至可以商業使用?意思是我可以自己跑完模擬,然後把結果印在 T shirt 上拿出來賣嗎?這聽起來實在有點 too good to be true XD。

這些最終讓我回想起那句理工屆的經典名言:
「你手機的運算能力,比當年登月時 NASA 所有的電腦加起來更強大。」[5]
得益於人類文明的積累,至少在科學上,我們享有前輩們夢寐以求的工具,卻往往對這些寶藏視若無睹,也不願學習駕馭。然而一但懂得欣賞,也許就會發現,攀登巨人肩膀的這段路,並不是如此痛苦。

[1] 宇宙學模擬
[2] 影片連結 / 關於 Volker Springel
[3] 嚴格來說其實老闆都把事情搞定了,我做得很少
[4] 1994 的宇宙學模擬論文
[5] Quora 上對這句話的討論。
Created using cosmological N-body and SPH code "Gadget 4" by Volker Springel.
License: GNU GPLv3

留言

熱門文章