第239章 毋庸置疑,諾貝爾化學獎,是我們的了
肖宿沒察覺許銘的崩潰,他把筆記本電腦轉過來,打開了一個新的代碼窗口。
手指快速在鍵盤上飛舞。
許銘站在旁邊目瞪口呆的看著。
他不是第一次看肖宿寫代碼,但之前他是旁觀者,而這次,他手裡攥著的是自己三個多月的心血。
看著肖宿一行一行地把它重構掉,這種感覺複雜極了。
有被碾壓的挫敗,也有一種奇怪的安心。
就像一個在森林裡迷路了很久的人,忽然聽見頭頂傳來了直升機的聲音。
肖宿的動作很快,幾乎沒有停頓。
他先重寫了電子密度分布的初始化函數,原來的代碼是讀取原子坐標後直接構造距離矩陣,他改成先調用一個基組庫,用最小基組做一個近似的初始電子密度估計。
然後他開始寫辛流形構造的部分,這是整個幾何映射的核心。
許銘看到肖宿定義了一個叫Electron Density Manifold的類,裡面有十幾個成員函數,其中最關鍵的是一個叫find Saddle Points的函數,輸入的是電子密度分布,輸出的是一組鞍點的位置和類型。
「電子密度的鞍點連起來,就是拉格朗日子流形的骨架。」
肖宿說這句話的時候手沒停,「你們原來用原子核坐標直接構造流形,相當於跳過了找鞍點這一步。」
這就像你要畫一條山脈的輪廓,可是你不畫山峰和山谷,直接就畫了一個圈,兩者根本不一樣。
許銘盯著屏幕上那行find Saddle Points的實現。
算法邏輯比他預想的簡潔,核心是一個基於梯度下降的鞍點搜索,加上一個去重和分類的後處理,大約只有六十行代碼。
他們之前花了兩周時間寫的辛流形構造代碼,就這樣,被這六十行替掉了。
接著是群表示分解模塊,肖宿沒有大改原來的代碼結構,而是在入口處加了一個適配器函數,函數名是select Symmetry Group,輸入分子類型,輸出對應的點群。
「水分子,C2v氨,C3v甲烷,Td苯,D6h,」他一邊寫一邊說,「常用分子的點群是已知的,可以直接查表,遇到新分子後,根據原子坐標自動判斷點群的算法也不複雜,後面可以再加。」
適配器函數的最後一行,是根據點群選擇對應的不可約表示分解算法。
原來的SU(2)分解代碼被保留了下來,但放到了一個分支里。
肖宿打完最後一行,把筆記本電腦轉回給許銘。
「可以了。」
許銘呆呆的接過電腦,整個人都還沒緩過勁來。
屏幕上那些簡潔到近乎優雅的代碼安安靜靜地躺著,每一行的功能都清晰可辨。
就這麼解決了!?
他們絞盡腦計都毫無辦法的難題,就這麼輕鬆的解決了?
在這一刻,他甚至有點懷疑自己的智商。
那他們實驗室,努力的三個月算什麼!?
他直愣愣的站了許久,直到肖宿用奇怪的眼神看了看他,他才長嘆了口氣,振作了起來。
「我現在就回去跑。」
許銘把筆記本合上,站起來,很認真的看著肖宿道:「肖宿。」
「嗯?」
「謝謝你。」
肖宿看了他一眼,輕描淡寫的點了點頭,又回到了自己電腦屏幕上。
十幾分鐘而已,肖宿對熟悉的人總還是比較慷慨的。
……
許銘回到實驗室的時候,萬匯楊和方清還在等他。
看到許銘進來,兩人幾乎是彈起來的。
「拿到了?」
許銘把筆記本電腦打開,調出了肖宿寫的代碼。
兩個人湊近,一左一右站在許銘身後。
屏幕上,肖宿寫了四行注釋安安靜靜地立在文件頭部。
方清的目光從第一行掃到第四行,然後停住了。
「電子密度分布。」
他念出這幾個字,聲音有點乾澀,「我們第一步算的是原子核坐標。」
許銘點頭。
「三個多月,我們從第一步就錯了。」
萬匯楊把肖宿的代碼從頭到尾看了一遍,看到辛流形構造部分的時候,手指在屏幕前虛虛地點了一下。
「find Saddle Points。」
他念出這個函數名,然後轉過頭看著許銘和方清,「肖宿在論文裡寫過:電子密度的鞍點構成了拉格朗日子流形的骨架。
但我怎麼也沒意識到這句話是實現的鑰匙。」
「把VASP的測試數據準備好,用同一組分子體系,同樣的計算精度要求,跑一遍對比測試。」
「好。」
方清很快把測試環境搭好了。
三台工作站並排運行,左邊跑VASP,右邊跑他們之前的舊框架,中間準備用來跑肖宿的新算法。
測試體系選的是十種常見分子:水、甲烷、苯、氨、甲醛、乙烯、乙炔、二氧化碳、甲醇、乙醇。
計算目標統一設定為基態電子結構,精度要求取化學精度。
「開始吧。」
許銘把肖宿的代碼導入中間那台工作站,點擊運行。
屏幕上的進度條開始快速移動起來。
第一個水分子實驗,VASP用時四十七秒,舊框架用時三十二秒但結果偏差較大,而肖宿的新算法用時九秒,結果和實驗值偏差低於零點零三電子伏特。
三個人互相看看,都能從對方的眼中看到震驚。
接下來是甲烷,VASP用時一分零三秒,肖宿的新算法用時十四秒,偏差低於零點零二電子伏特。
再接著是苯,這是最有挑戰性的一個。
苯環的共軛π電子體系是DFT的傳統軟肋,VASP跑苯的基態電子結構需要兩分四十秒,而且結果和實驗值有大約零點二電子伏特的系統偏差。
而用肖宿的新算法跑苯,只用了三十一秒,結果和實驗值的偏差還低於零點零一五電子伏特。
方清的手都有些顫抖了。
剩下的七個分子一個接一個跑完,每跑完一個,方清就在旁邊的白板上記錄下用時、偏差、和VASP的對比。
寫完最後一個乙醇分子,儘管三人都有心理準備,可還是被驚到了。
十種分子,肖宿新算法的平均用時是VASP的四分之一不到,平均精度偏差是VASP的五分之一以下,算力消耗平均不到VASP的三分之一。
而且這還不是終點。
肖宿在代碼里留了大量可以進一步優化的空間。
他給的是一個框架,一個方向,沿著這個方向往下走,性能還能再提升。
「這已經不是比VASP強了。」
萬匯楊的聲音有些沙啞,「這是重新定義了計算化學的底層邏輯啊。」
三個人站在白板前,看著上面那組數據,很久都沒有說話。
誰都沒法想像,這個實驗數據公布之後,化學界將會迎來多麼可怕的震動。
「我想,」萬匯楊轉過身,看著許銘和方清,臉上的疲憊一掃而空,「毋庸置疑,諾貝爾化學獎,是我們的了。」
手指快速在鍵盤上飛舞。
許銘站在旁邊目瞪口呆的看著。
他不是第一次看肖宿寫代碼,但之前他是旁觀者,而這次,他手裡攥著的是自己三個多月的心血。
看著肖宿一行一行地把它重構掉,這種感覺複雜極了。
有被碾壓的挫敗,也有一種奇怪的安心。
就像一個在森林裡迷路了很久的人,忽然聽見頭頂傳來了直升機的聲音。
肖宿的動作很快,幾乎沒有停頓。
他先重寫了電子密度分布的初始化函數,原來的代碼是讀取原子坐標後直接構造距離矩陣,他改成先調用一個基組庫,用最小基組做一個近似的初始電子密度估計。
然後他開始寫辛流形構造的部分,這是整個幾何映射的核心。
許銘看到肖宿定義了一個叫Electron Density Manifold的類,裡面有十幾個成員函數,其中最關鍵的是一個叫find Saddle Points的函數,輸入的是電子密度分布,輸出的是一組鞍點的位置和類型。
「電子密度的鞍點連起來,就是拉格朗日子流形的骨架。」
肖宿說這句話的時候手沒停,「你們原來用原子核坐標直接構造流形,相當於跳過了找鞍點這一步。」
這就像你要畫一條山脈的輪廓,可是你不畫山峰和山谷,直接就畫了一個圈,兩者根本不一樣。
許銘盯著屏幕上那行find Saddle Points的實現。
算法邏輯比他預想的簡潔,核心是一個基於梯度下降的鞍點搜索,加上一個去重和分類的後處理,大約只有六十行代碼。
他們之前花了兩周時間寫的辛流形構造代碼,就這樣,被這六十行替掉了。
接著是群表示分解模塊,肖宿沒有大改原來的代碼結構,而是在入口處加了一個適配器函數,函數名是select Symmetry Group,輸入分子類型,輸出對應的點群。
「水分子,C2v氨,C3v甲烷,Td苯,D6h,」他一邊寫一邊說,「常用分子的點群是已知的,可以直接查表,遇到新分子後,根據原子坐標自動判斷點群的算法也不複雜,後面可以再加。」
適配器函數的最後一行,是根據點群選擇對應的不可約表示分解算法。
原來的SU(2)分解代碼被保留了下來,但放到了一個分支里。
肖宿打完最後一行,把筆記本電腦轉回給許銘。
「可以了。」
許銘呆呆的接過電腦,整個人都還沒緩過勁來。
屏幕上那些簡潔到近乎優雅的代碼安安靜靜地躺著,每一行的功能都清晰可辨。
就這麼解決了!?
他們絞盡腦計都毫無辦法的難題,就這麼輕鬆的解決了?
在這一刻,他甚至有點懷疑自己的智商。
那他們實驗室,努力的三個月算什麼!?
他直愣愣的站了許久,直到肖宿用奇怪的眼神看了看他,他才長嘆了口氣,振作了起來。
「我現在就回去跑。」
許銘把筆記本合上,站起來,很認真的看著肖宿道:「肖宿。」
「嗯?」
「謝謝你。」
肖宿看了他一眼,輕描淡寫的點了點頭,又回到了自己電腦屏幕上。
十幾分鐘而已,肖宿對熟悉的人總還是比較慷慨的。
……
許銘回到實驗室的時候,萬匯楊和方清還在等他。
看到許銘進來,兩人幾乎是彈起來的。
「拿到了?」
許銘把筆記本電腦打開,調出了肖宿寫的代碼。
兩個人湊近,一左一右站在許銘身後。
屏幕上,肖宿寫了四行注釋安安靜靜地立在文件頭部。
方清的目光從第一行掃到第四行,然後停住了。
「電子密度分布。」
他念出這幾個字,聲音有點乾澀,「我們第一步算的是原子核坐標。」
許銘點頭。
「三個多月,我們從第一步就錯了。」
萬匯楊把肖宿的代碼從頭到尾看了一遍,看到辛流形構造部分的時候,手指在屏幕前虛虛地點了一下。
「find Saddle Points。」
他念出這個函數名,然後轉過頭看著許銘和方清,「肖宿在論文裡寫過:電子密度的鞍點構成了拉格朗日子流形的骨架。
但我怎麼也沒意識到這句話是實現的鑰匙。」
「把VASP的測試數據準備好,用同一組分子體系,同樣的計算精度要求,跑一遍對比測試。」
「好。」
方清很快把測試環境搭好了。
三台工作站並排運行,左邊跑VASP,右邊跑他們之前的舊框架,中間準備用來跑肖宿的新算法。
測試體系選的是十種常見分子:水、甲烷、苯、氨、甲醛、乙烯、乙炔、二氧化碳、甲醇、乙醇。
計算目標統一設定為基態電子結構,精度要求取化學精度。
「開始吧。」
許銘把肖宿的代碼導入中間那台工作站,點擊運行。
屏幕上的進度條開始快速移動起來。
第一個水分子實驗,VASP用時四十七秒,舊框架用時三十二秒但結果偏差較大,而肖宿的新算法用時九秒,結果和實驗值偏差低於零點零三電子伏特。
三個人互相看看,都能從對方的眼中看到震驚。
接下來是甲烷,VASP用時一分零三秒,肖宿的新算法用時十四秒,偏差低於零點零二電子伏特。
再接著是苯,這是最有挑戰性的一個。
苯環的共軛π電子體系是DFT的傳統軟肋,VASP跑苯的基態電子結構需要兩分四十秒,而且結果和實驗值有大約零點二電子伏特的系統偏差。
而用肖宿的新算法跑苯,只用了三十一秒,結果和實驗值的偏差還低於零點零一五電子伏特。
方清的手都有些顫抖了。
剩下的七個分子一個接一個跑完,每跑完一個,方清就在旁邊的白板上記錄下用時、偏差、和VASP的對比。
寫完最後一個乙醇分子,儘管三人都有心理準備,可還是被驚到了。
十種分子,肖宿新算法的平均用時是VASP的四分之一不到,平均精度偏差是VASP的五分之一以下,算力消耗平均不到VASP的三分之一。
而且這還不是終點。
肖宿在代碼里留了大量可以進一步優化的空間。
他給的是一個框架,一個方向,沿著這個方向往下走,性能還能再提升。
「這已經不是比VASP強了。」
萬匯楊的聲音有些沙啞,「這是重新定義了計算化學的底層邏輯啊。」
三個人站在白板前,看著上面那組數據,很久都沒有說話。
誰都沒法想像,這個實驗數據公布之後,化學界將會迎來多麼可怕的震動。
「我想,」萬匯楊轉過身,看著許銘和方清,臉上的疲憊一掃而空,「毋庸置疑,諾貝爾化學獎,是我們的了。」