日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

如何使用python处理nc数据制作Mike风场文件--以ERA5数据为例

發布時間:2023/12/31 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使用python处理nc数据制作Mike风场文件--以ERA5数据为例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

@如何使用python處理nc數據制作Mike風場文件
NetCDF(network Common Data Form)網絡通用數據格式是一種面向數組型并適于網絡共享的數據的描述和編碼標準。nc格式文件被廣泛應用于氣象、海洋、環境、地質等專業。目前可下載的大氣再分析風場數據,如CCMP、ERA5、NCEP等均提供此格式的數據。本次我們以ERA5再分析數據為例演示如何通過python制作mike的dfs2風場文件。

1. ERA5風場數據得下載

ERA5數據下載的網站為https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-single-levels?tab=form,變量我們選擇其中的10m u-component of wind10m v-component of windSurface pressure下載,下載時間、空間范圍根據實際需求自定義。

2. python讀取nc數據

首先導入需要用到的模塊,其中前面3個為制作Mike文件相關的模塊,Dataset為讀取nc文件的模塊,datetime為時間處理模塊。

from mikeio import Dfs2 from mikeio.eum import ItemInfo, EUMUnit from mikeio.eum import EUMType import numpy as np from netCDF4 import Dataset import datetime as dt

讀取文件代碼如下:

file = Dataset('.\\2015uvp.nc') #文件路徑及名稱 time =file['time'][:] #讀取時間信息 lon = file['longitude'][:] #讀取經度信息 lat = file['latitude'][:] #讀取緯度信息 u = file['u10'][:] #讀取東西風速u v = file['v10'][:] #讀取南北風速v p = file['sp'][:] #讀取表面壓強

值得注意的是,根據現有文獻,在海陸交界處的ERA5風速偏小,因此研究近海的朋友們可對風場數據適當方法,例如:

u=u*1.1 #將風速放大1.1倍 v=v*1.1

3. 處理時間信息

nc文件中的時間信息往往是自某一時刻以來的多少小時(或者天、月)的形式來表達,如下圖所示,此時很難直觀地感受具體時間。


因此使用daatetime模塊的timedelta函數對時間進行處理:

time_dt=[] #指定一個新的列表 tstart = dt.datetime(1900,1,1,0) #nc文件的起始時刻 for i in time:time_dt.append(tstart+dt.timedelta(hours=int(i))) #將nc文件中的時刻轉換為正常的時間格式

處理后的時間time_dt如下圖所示:

4. 制作dfs2文件

接下來就是最后的dfs2的制作過程,首先做一些準備工作:

dfsfilename = '2015uvp_for_fm.dfs2' #給定文件名#設置dfs2文件左下角的坐標原點,在ERA5文件中,經度排列方式為從東向西,緯度排列方式為從北向南,#因此原點的經度為lon的第1個點,原點的緯度為lat的最后一個點 x0=lon[0] y0=lat[-1] coordinate = ['LONG/LAT',x0,y0,0] #設置原點 dx=0.25 #設置網格間距,ERA5默認網格間距均為0.25度 dy=0.25 time0 = time_dt[0] #設置其實時間,用到了上一步的時間處理 delta_t = 3600 #設置時間間隔,ERA5數據時間間隔為1h,3600s

制作dfs2:

#創建變量, EUMType.Wind_Velocity說明變量類型為風速, EUMUnit.meter_per_sec說明變量單位為m/s items = [ItemInfo("u", EUMType.Wind_Velocity, EUMUnit.meter_per_sec),ItemInfo("v", EUMType.Wind_Velocity, EUMUnit.meter_per_sec),ItemInfo("p", EUMType.Pressure, EUMUnit.pascal)] d = [u,v,p] #將要輸出至dfs2的數組打包 dfs = Dfs2() #實例化一個dfs變量 dfs.write(filename=dfsfilename,data=d,start_time=time0,dt=delta_t,items=items,coordinate=coordinate,dx=dx,dy=dy) #輸出變量

最后讓我們來看一下制作好的dfs2文件:

并與nc文件的數據進行一下比較:

顯然,dfs2文件的數據是合理的,可以應用于Mike21、Mike3的水動力模塊、譜波模塊,其中,水動力模塊需要u、v、p三個變量,譜波模塊只需要u、v兩個變量。

總結

以上是生活随笔為你收集整理的如何使用python处理nc数据制作Mike风场文件--以ERA5数据为例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。