Postdoc心得:Part 6.1 - 探索階段 & 對研究合作計畫的一些心得

(2022/09/25發表在個人臉書)

postdoc心得Part 6,來寫我參與Eddy-Diffusity/Mass-Flux (EDMF) Climate Process Team (CPT) 研究計畫的收穫和心得。因為收穫和心得不少,所以分成幾篇來寫。Part 6.1來寫一開始的EDMF探索階段和對研究合作計畫的一些心得,Part 6.2來寫把一個邊界層/對流參數法MYNN-EDMF放入AM4的過程和挑戰,Part 6.3來寫AM4海洋層積雲的誤差診斷工作,Part 6.4應該就一些雜記吧。


Part 6.1基本上是從我博後做了9個月,在2020/11/29寫的筆記複製貼上,加上一點潤稿。現在回頭來看,的確是學到學到不少經驗教訓,也蠻慶幸自己當時有把這些東西寫下來。對我的博後申請過程有興趣的話,可以看本系列文的 Part 1 - 簡介博士後,我的博後申請過程


-------

EDMF project - Halftime report

2020.11.29

陳毅軒


2020年二月中來到GFDL開始EDMF CPT的工作,經過十個多月,第一階段的研究探索時期差不多告一段落了。趁著感恩節假期,寫一下回顧。回頭來看,走了不少冤枉路,工作進度也不如預期,但也了解到研究合作計畫有很多要注意的地方,對我來說是一個很好的學習經驗。


EDMF的工作職缺廣告是長這樣的:


“The Atmospheric and Oceanic Sciences program at Princeton University, in cooperation with NOAA's Geophysical Fluid Dynamics Laboratory (GFDL), seeks postdoctoral or more senior researchers for new projects on modeling planetary boundary layers and convection in Earth system models at GFDL, particularly for (1) implementing and analyzing an eddy diffusivity/mass flux (EDMF) parameterization for boundary layers and convection… The first project is a collaboration with the Jet Propulsion Laboratory. The researcher will work in collaboration with GFDL, UCLA, The University of Connecticut, and the National Center for Atmospheric Research, aiming at a unified approach to moist turbulent processes for boundary layers and deep convection.”


工作內容大概是把JPL合作者發展的一個邊界層/對流參數法EDMF放進GFDL模式裡,還有分析它對氣候模擬的影響。


我當初會申請這個工作是因為想做關於雲過程、模式參數化發展、和氣候模式相關的研究。雖然我沒有研究過或使用過EDMF,但我碩士班是做對流參數化,在CAM5的Zhang-McFarlane深對流參數法加雲微物理過程,所以對對流參數化有一定的認識。我也有把不同的參數法放進氣候模式的經驗,比方說在中研院工作時,我把NASA Goddard發展的長波和短波輻射參數法放進CESM裡; 博士班期間把Texas A&M Ping Yang group發展的一個two/four-stream radiation solver和一個ice cloud LW optical scheme放進CESM裡,來研究雲的長波散射對極區氣候模擬的影響。雖然我沒碰過EDMF,也沒碰過GFDL模式,不過我相信我能勝任這個工作,也很幸運的錄取了。


剛到GFDL的時候,因為security clearance還沒過,沒辦法登入GFDL的機器,也沒辦法跑他們的模式,所以我一開始先研究一下JPL合作者提供的EDMF程式。我拿到的是他們放進WRF的版本,看了一下這程式,我知道這不可能直接放進GFDL模式裡:input/output變數沒有清楚解釋,很多物理常數變數也沒有解釋,還有很多地方沒有註解,即使放進去了,之後的人要看或要改都很困難。


我那時候想,既然我還沒辦法跑GFDL的模式,這個WRF版本的EDMF也不能直接放進去,不如我根據reference和這個程式自己重寫一個。這樣的話,我可以知道這個EDMF的所有細節,也因為是我寫的,要放進GFDL模式裡應該會容易許多。還有更重要的理由是,我之前把輻射參數法放進CESM時,因為都在處理interface,對這些參數法的細節並不是很了解。如果有專家問我這些參數法的細節,基本上我是答不出來的,不是很喜歡這樣。所以我想藉著重寫這個EDMF scheme,好好了解其中的細節,而我當時好像也有時間做這件事。


現在回頭來看,重寫EDMF scheme這個決定,對我個人來說,是個非常好的學習經驗。因為這樣做我深刻理解EDMF的核心概念,重寫EDMF scheme的時候才真正理解什麼叫做modeling:從數學方程式開始,寫成差分方程式,再寫成程式碼,也才知道很多平常不會注意到的東西 (e.g. numerical discretization choices)。我做了很多數值方法的實驗,對未來想要發展參數法的我是個非常寶貴的經驗。如果只有看papers的話,我是不大可能學到這些東西的,一定要親手去做才能得到。


但是,從計畫的角度,從研究合作的角度,重寫EDMF這個舉動非常不明智。


第一,重複前人的工作對科學發展是沒有貢獻的。科學研究的核心是去做別人沒有做過的東西,重複前人的工作是學習,而不是研究。舉個例子,要是現在一個人獨立推導出相對論,那是非常了不起的成就,但相對論在20世紀初愛因斯坦就提出來了,也有很多後續延伸出來的研究。提出一個已知的理論,對科學發展的貢獻基本上沒貢獻,因為其他人早就知道了。我重寫EDMF scheme也是,別人都寫好了,我只是重寫,沒有加入新的idea或東西,對科學發展來說完全沒有貢獻。


第二,重寫EDMF花了我很多時間,也造成計畫進度不如預期。雖然有現有程式可以參考,但基本上我還是一行一行重寫,一方面是改成自己比較好理解的順序,一方面是如果只是複製貼上的話,我還是不理解其中的細節。


第三,也是最重要的,兩個不同版本的程式會造成溝通上的困難。雖然我是根據已發表的文獻重寫這個EDMF scheme,我有參照他們的WRF版本,也有把程式給合作者大略看過,但裡頭的細節可能有些許不同,這在debug時會造成不小的麻煩。


我真正驚覺到兩個不同版本的EDMF程式的問題和嚴重性,是我把我寫的dry MF scheme放進GFDL模式跑全球模擬的時候。模式跑一兩個time step就死掉了,我發現是因為在某些情況下,dry MF scheme產生 ~2,000 K/day heating rate,模式模擬溫度一下就超出正常範圍,然後就死了。老闆Leo建議我把幾個出問題的profiles給JPL合作者,看看他的scheme有沒有類似的問題。合作者的EDMF也產生蠻大的heating rate,但他的是~ 200 K/day,我的是 ~ 2,000 K/day,差了一個數量級。他仔細看了一下我的程式,才發現我們把grid-scale variables從full level內插到half level的做法不同,我是用centered-difference,他是用upwind-difference。我把我的改成upwind-difference以後,就產生跟他類似的結果。


那個debug的過程對我和JPL合作者來說都不是愉快的經驗。我的話是覺得我的dry MF都照paper的公式寫了,有參照WRF版本也有把我的程式給合作者看過,我完全不懂為什麼dry MF結果不一樣,不知道bug在哪裡,也不知道該怎麼下手,就很煩躁。合作者的話,我猜他把我的程式看的很仔細,花了不少時間才發現這個centered-difference和upwind-difference的細微差異。這個找bug的過程我相信對雙方都有點痛苦,而且浪費時間。如果一開始我就用WRF版本的dry MF,而不是用自己重寫的版本,雖然跑全球模擬時還是會遇到一樣的問題,但debug的過程應該會順暢許多,因為合作者非常熟悉他的WRF版本,應該很快就能找到問題。


這個經驗也讓我稍微了解什麼是 “研究合作”。我是自己重寫EDMF,遇到問題或是不清楚的地方才問JPL的合作者,這比較像是建議,而不是研究合作。研究合作,至少像這個物理參數法的轉移,應該是雙方都要出力:JPL合作者負責他們的EDMF scheme,而我負責把這個EDMF放進GFDL模式裡。我當初發現他們提供的WRF EDMF版本是不可能放進GFDL模式時,應該要立刻向老闆反應,立刻向合作者反應,請他們提供一個可用的版本,而不是我自己重寫一個。研究合作是要在共同的基礎上,遇到問題一起想辦法解決,要是沒有共同的基礎和程式,遇到問題時雙方還得花時間重新確認細節,這是浪費彼此的時間。


我也學到在 “研究合作” 下,要根據自身狀況去評估可行性,不要照單全收合作者的建議。EDMF可以用不同的數值方法求解,合作者比較希望用implicit time difference去解MF tendencies,但是這需要去修改GFDL模式裡的vertical diffusion module。這個module是大約20年前完成的,相關的專家也都退休了,而且這個module還牽扯到很複雜的surface atmosphere coupling,要動的話會是一個大工程。我老闆知道改vertical diffusion module對我來說是過大的負擔,而且這個implicit time difference方法的預期成果並不是很明確,所以他跟JPL的合作者說因為GFDL沒有足夠的技術支援,我們先試其他做法,暫不考慮合作者建議的這個做法。如果是我的話,我可能聽到合作者建議implicit time difference比較好,就直接撩下去做了,然後做一做才發現困難重重重重,進退兩難。


做個總結。


參與這個EDMF CPT計畫大概九個多月了,我除了學到專業知識以外,也了解到研究合作有很多要注意的地方。要注意是 “雙方” 的研究合作,要是一方發現問題要立即反應,如同我當初拿到WRF EDMF版本時,發現這不可能直接放入GFDL時,應該就要立即跟老闆和合作者反應,才不會有後續痛苦的debug過程。也因為是研究 ”合作”,要根據自身狀況去評估可行性,不要照單全收合作者的建議。回頭來看,我走了不少冤枉路,但人生就是這樣,犯錯才會成長,一路順遂很好,但很多重要的東西是一路順遂時學不到的。


我在想,如果重來一次,我覺得選怎樣的路徑?路徑一是我目前的足跡,自己重寫EDMF,學到很多東西,但也花了很多時間重複別人的工作,導致計畫進度不如預期,沒有產出。路徑二是像以前加長波輻射參數法一樣,把JPL合作者的EDMF放進GFDL的模式,但我對裡面的內容並不是很清楚。雖然還是會遇到路徑一的困難,但至少會及早發現,及早處理,效率應該會比較好一點。以個人角度,我還是會選路徑一,因為真的學到很多寶貴經驗,但以老闆,員工,和計劃的角度,路徑二應該是比較理想的。


—--

2020/12/23的更新


最近覺得跟JPL跟GFDL的合作者溝通變順暢了點,記錄一下改進的作法:


1. code base:最近跟JPL合作者在一起debug,我把程式放在github上,這樣我們可以同時改,要講哪一行程式碼也很方便。github真是個不錯的工具。


2. equations:用數學方程式是很好很準確的溝通方式。最近在轉換GFDL模式裡頭的surface fluxes,把方程式寫出來別人就很快能了解我的作法,看到問題也能很快指出來。像是我本來用w'theta'算sensible heat flux,同事就指正說用w'T'才對。如果用文字描述的話,要真的說很精確才會知道,e.g. surface kinematic potential temperature flux (i.e. w'theta') versus surface kinematic temperature flux (i.e. w'T'),這也是為什麼科學描述要求精準,因為不精準就會搞混,搞混就容易出問題。數學方程式是個精準的描述方式。


P.S. 這篇文是在晴朗暖和的秋天,適合曬太陽的好天氣,在Princeton Public Library前的Hinds Plaza發的。同時還有Unruly Sounds Festival,一邊聽音樂,一邊享受天氣,一邊在戶外的長椅上發文,蠻不錯的。

MF scheme (Suselj et al. 2019, JAS)




我重寫的dry MF程式,有10,559行程式碼。