簡體   English   中英

如何從 ERA5 每小時 netCDF 數據計算每日平均值?

[英]How to calculate daily average from ERA5 hourly netCDF data?

嗨,親愛的,

我很抱歉重復這個問題。 我已經從 Copernicus web 平台下載並合並了 ERA5 每小時露點溫度數據 (d2m_wb.nc)。 現在,我想根據每小時的 d2m_wb.nc 數據計算每日平均值。 時間戳為 00、01、02...23。 ECMWF 提供了一個計算日總降水量的示例( https://confluence.ecmwf.int/display/CKB/ERA5%3A+How+to+calculate+daily+total+precipitation )。 它說要涵蓋 2017 年 1 月 1 日的總降水量,我們需要兩天的數據。 (a) 2017 年 1 月 1 日時間 = 01 - 23 將為您提供涵蓋 2017 年 1 月 1 日 00-23 UTC 的總降水量數據 (b) 2017 年 1 月 2 日時間 = 00 將為您提供涵蓋 23-24 UTC 1 日的總降水量數據2017 年 1 月

這意味着我需要移動-1hour時間戳以說明步驟 (b)。 因此,我使用了氣候數據運營商 (CDO)。

cdo daymean -shifttime,-1hour in.nc out.nc

並得到以下結果。

cdo sinfo d2m_wb.nc
   File format : NetCDF2
    -1 : Institut Source   T Steptype Levels Num    Points Num Dtype : Parameter ID
     1 : unknown  unknown  v instant       1   1       475   1  F64  : -1
   Grid coordinates :
     1 : lonlat                   : points=475 (19x25)
                              lon : 85.5 to 90 by 0.25 degrees_east
                              lat : 21.5 to 27.5 by 0.25 degrees_north
   Vertical coordinates :
     1 : surface                  : levels=1
   Time coordinate :  25904 steps
     RefTime =  1900-01-01 00:00:00  Units = hours  Calendar = gregorian  Bounds = true
  YYYY-MM-DD hh:mm:ss  YYYY-MM-DD hh:mm:ss  YYYY-MM-DD hh:mm:ss  YYYY-MM-DD hh:mm:ss
  1949-12-31 23:00:00  1950-01-01 11:00:00  1950-01-02 11:00:00  1950-01-03 11:00:00
  1950-01-04 11:00:00  1950-01-05 11:00:00  1950-01-06 11:00:00  1950-01-07 11:00:00
  1950-01-08 11:00:00  1950-01-09 11:00:00  1950-01-10 11:00:00  1950-01-11 11:00:00
  1950-01-12 11:00:00  1950-01-13 11:00:00  1950-01-14 11:00:00  1950-01-15 11:00:00
  1950-01-16 11:00:00  1950-01-17 11:00:00  1950-01-18 11:00:00  1950-01-19 11:00:00
  1950-01-20 11:00:00  1950-01-21 11:00:00  1950-01-22 11:00:00  1950-01-23 11:00:00
  1950-01-24 11:00:00  1950-01-25 11:00:00  1950-01-26 11:00:00  1950-01-27 11:00:00
  1950-01-28 11:00:00  1950-01-29 11:00:00  1950-01-30 11:00:00  1950-01-31 11:00:00
  1950-02-01 11:00:00  1950-02-02 11:00:00  1950-02-03 11:00:00  1950-02-04 11:00:00
  1950-02-05 11:00:00  1950-02-06 11:00:00  1950-02-07 11:00:00  1950-02-08 11:00:00
  1950-02-09 11:00:00  1950-02-10 11:00:00  1950-02-11 11:00:00  1950-02-12 11:00:00
  1950-02-13 11:00:00  1950-02-14 11:00:00  1950-02-15 11:00:00  1950-02-16 11:00:00
  1950-02-17 11:00:00  1950-02-18 11:00:00  1950-02-19 11:00:00  1950-02-20 11:00:00
  1950-02-21 11:00:00  1950-02-22 11:00:00  1950-02-23 11:00:00  1950-02-24 11:00:00
  1950-02-25 11:00:00  1950-02-26 11:00:00  1950-02-27 11:00:00  1950-02-28 11:00:00
   ................................................................................
   ................................................................................
   ................................................................................
   .................
  2020-10-03 11:00:00  2020-10-04 11:00:00  2020-10-05 11:00:00  2020-10-06 11:00:00
  2020-10-07 11:00:00  2020-10-08 11:00:00  2020-10-09 11:00:00  2020-10-10 11:00:00
  2020-10-11 11:00:00  2020-10-12 11:00:00  2020-10-13 11:00:00  2020-10-14 11:00:00
  2020-10-15 11:00:00  2020-10-16 11:00:00  2020-10-17 11:00:00  2020-10-18 11:00:00
  2020-10-19 11:00:00  2020-10-20 11:00:00  2020-10-21 11:00:00  2020-10-22 11:00:00
  2020-10-23 11:00:00  2020-10-24 11:00:00  2020-10-25 11:00:00  2020-10-26 11:00:00
  2020-10-27 11:00:00  2020-10-28 11:00:00  2020-10-29 11:00:00  2020-10-30 11:00:00
  2020-10-31 11:00:00  2020-11-01 11:00:00  2020-11-02 11:00:00  2020-11-03 11:00:00
  2020-11-04 11:00:00  2020-11-05 11:00:00  2020-11-06 11:00:00  2020-11-07 11:00:00
  2020-11-08 11:00:00  2020-11-09 11:00:00  2020-11-10 11:00:00  2020-11-11 11:00:00
  2020-11-12 11:00:00  2020-11-13 11:00:00  2020-11-14 11:00:00  2020-11-15 11:00:00
  2020-11-16 11:00:00  2020-11-17 11:00:00  2020-11-18 11:00:00  2020-11-19 11:00:00
  2020-11-20 11:00:00  2020-11-21 11:00:00  2020-11-22 11:00:00  2020-11-23 11:00:00
  2020-11-24 11:00:00  2020-11-25 11:00:00  2020-11-26 11:00:00  2020-11-27 11:00:00
  2020-11-28 11:00:00  2020-11-29 11:00:00  2020-11-30 11:00:00  2020-12-31 23:00:00
cdo    sinfo: Processed 1 variable over 25904 timesteps [6.03s 37MB

在這種情況下,時間步長顯示為 11:00:00(從 1950-01-01 開始)。 我想應該是 12:00:00。 我在這里做錯了什么? 任何建議將不勝感激? 謝謝你。

這個 output 看起來是正確的。 CDO 必須決定在平均時使用哪個時間步長。 在這種情況下,它采用每天的中點,即 11:00。

您會注意到第一天的時間是 23:00,因為只有一個時間。

但是,尚不清楚為什么要將時間向后移動一小時。 您的代碼實際上並沒有計算每日平均值。 相反,它是一天最后 23 小時和下一天第一小時的平均值。 只需將您的 CDO 調用更改為以下內容,一切都會好起來的:

cdo daymean in.nc out.nc

羅伯特·威爾遜的回答是正確的,我只是想快速澄清一下,這里的混淆是由於

  • 瞬時場:如雲、水汽、溫度、風等,這些都是瞬時有效的場
  • 累積場:如輻射通量、潛熱通量和感熱通量、降水等,這些都是在一段時間內累積起來的,時間戳放在 window 的末尾。

因此,對於即時字段 Robert 是正確的,如果您認為 00Z 是在第二天,那么您不想轉移,但您同樣可以有效地爭辯說午夜應該包括在前一天(因此您需要轉移),因為它位於邊界上。 慣例說你不換班,把 00...23 算作一天...

關於通量,這篇文章中還有更多詳細信息: 使用 CDO 計算 ERA5 每日總降水量

GLDAS 3 小時溫度數據也有類似的問題。

假設我使用 1948 年的數據,第一個數據將是GLDAS_NOAH025_3H.A19480101.0300.020.nc4 ,它是1948-01-01 00:00:00 -- 1948-01-01 03:00:00的溫度值和文件名上寫入 1948 年的最后一個數據是GLDAS_NOAH025_3H.A19481231.2100.020.nc4這是1948-12-31 18:00:00 -- 1948-12-31 21:00:00的溫度值

我將GLDAS_NOAH025_3H.A19490101.0000.020.nc4添加到 1948 文件夾中,並使用以下命令將所有文件合並到單個 netcdf 中:

cdo mergetime *.nc4 merge_1948.nc4

然后我嘗試使用以下方法計算每日平均值:

cdo daymean merge_1948.nc4 tmean_1948.nc4

不幸的是總文件(時間)是367,第一個數據是1948-01-01 00:00:00 -- 1948-01-01 21:00:00最后一個數據是1948-12-31 21:00:00 -- 1949-01-01 00:00:00

所以,我嘗試使用shifttime並解決了這個問題。

cdo daymean -shifttime,-3hour merge_1948.nc4 temp.nc4
cdo -shifttime,3hour temp.nc4 tmean_1948.nc4

第一個數據是 1948-01-01 00:00:00 -- 1948-01-02 00:00:00 最后一個數據是 1948-12-31 00:00:00 -- 1949-01-01 00 :00:00

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM