Python氣象數(shù)據(jù)處理中的數(shù)值微分和積分法——其一
0 引言
分享一些自己在完成小論文過程中總結(jié)的一些Python編程技巧,接下來幾篇推文的內(nèi)容主要是Python氣象數(shù)據(jù)處理中的數(shù)值微分和積分法,寫它的目的主要是數(shù)值微分和積分在計算氣象物理量中被廣泛使用(如散度、渦度、大氣整層水汽通量等)。此外,本人在學(xué)習(xí)編程的過程中參考了許多大佬、前輩的推文,在這里對他們的分享表示感謝。
?
1 數(shù)值微分法
1.1?散度和渦度
水平散度和渦度的表達式分別為
兩者在診斷中較常用。Metpy模塊提供的函數(shù)metpy.calc.divergence和metpy.calc.vorticity能直接計算,如果輸入數(shù)據(jù)的格式為xarray.DataArray,那么只需要輸入物理量的x和y分量(如u/v風(fēng)、uq/vq水汽通量等)兩個參數(shù)。輸出物理量的單位是輸入物理量的單位除以meter。
?
1.2?勢函數(shù)和流函數(shù)
簡單來說,運動可以分解為無旋分量和無輻散分量。對于無旋運動,存在一個勢函數(shù),無旋運動在勢函數(shù)的梯度方向上,與勢函數(shù)等值線垂直。對于無輻散運動,存在一個流函數(shù),無輻散運動在流函數(shù)的切線上(背風(fēng)而立,高值在右)。
NCL中提供了直接計算兩者的函數(shù),而Metpy模塊中沒有提供。這里可使用windspharm模塊(在Linux平臺下可安裝和運行,在Windows平臺下似乎不能),相關(guān)代碼為
u和v為覆蓋全球的緯向風(fēng)和經(jīng)向風(fēng)數(shù)據(jù),格式為xarray;w為生成的初始化VectorWind實例;用sfvp函數(shù)獲得流函數(shù)和勢函數(shù),格式也為xarray。