1、 欧洲中期天气预报中新ERA5再分析数据简介

下载网址
ERA5是一种综合性的再分析数据,ECMWF的Integrated Forecast System (IFS)的4D-Var data assimilation 和 CY41R2 模型预报产生的。ERA5数据集包含一个高分辨率(hourly,31km,0.2815degrees,“HRES”)和一个分辨率降低的十个集合(hourly,63km,0.5625degrees,“EDA”)。ERA5大气模型与陆面模型和波浪模型耦合,支持1979-至今的实时数据。
ERA5ERA5提供大量大气、陆地和海洋气候变量的每小时估计。这些数据以30公里的网格覆盖地球,并利用从地表到80公里高度的137层来解析大气。ERA5包含所有变量在降低的空间和时间分辨率下的不确定性信息。
数据产品类型:
Analyses:再分析数据、Ensemble members:、Ensemble mean:总平均值
在这里插入图片描述

2、 数据集

1、Popular

在这里插入图片描述
10m u-component of wind:10米U行风量
10m v-component of wind:10米v行风量
2m dewpoint temperature:2米露点温度
2m temperature:2米温度
Mean sea level pressure:平均海平面气压
Mean wave direction:平均波方向
Mean wave period:平均波周期
Sea surface temperature:海洋表面温度
Significant height of combined wind waves and swelll:综合风浪和风浪的显著高度
Surface pressure:表面压力
Total precipitation:总降水量

2、Popular

在这里插入图片描述
Ice temperature layer 1:冰层温度
Maximum 2m temperature since previous post-processing:自上次后处理以来最高2m的温度
Skin temperature:表层温度

3、Wind

在这里插入图片描述
10m u-component of neutral wind:10m u中风

4、Mean rates

在这里插入图片描述

4、Radiation and heat(辐射和热)

在这里插入图片描述

5、Clouds(云)

在这里插入图片描述

6、Lakes(湖)

在这里插入图片描述

7、蒸发和径流

在这里插入图片描述

8、降水和雨

在这里插入图片描述

9、雪

在这里插入图片描述

9、

在这里插入图片描述

10、垂直积分

在这里插入图片描述

11、植被

在这里插入图片描述

12、海浪

在这里插入图片描述

14、其他

在这里插入图片描述

3、CDS API数据下载

参考博客
Key获取
在这里插入图片描述
在这里插入图片描述

再分析单个文件下载:

import cdsapi
c = cdsapi.Client()
c.retrieve("reanalysis-era5-pressure-levels",
{
"variable": "temperature",
"pressure_level": "1000",
"product_type": "reanalysis",
"year": "2008",
"month": "01",
"day": "01",
"time": "12:00",
"format": "grib"
}, "download.grib")

冰川单个文件下载:

import cdsapi
c = cdsapi.Client()
c.retrieve("insitu-glaciers-elevation-mass",
{
"variable": "all",
"product_type": "elevation_change",
"file_version": "20170405",
"format": "tgz"
},
"download.tar.gz")

cds 多进行批量下载

'''
Author: your name
Date: 2021-07-22 08:42:25
LastEditTime: 2021-07-23 15:18:56
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \Test\Python-book-BK\Python-book-BK\code\chap4\chap4_batch_download_cds_nc_files.py
'''
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@毕凯,北京市人工影响天气办公室
@ email: bikai_picard@vip.sina.com 
"""
import os
os.chdir(r"D:\Python base\Test\BIKAI_books") 
os.getcwd()
import cdsapi 
import datetime as dt 
from queue import Queue 
from threading import Thread #导入多线性编程最核心的模块,进行并发下载,每个Threading代表一个线程
import time 
start =time.clock()

class DownloadCDS(Thread): 
   def __init__(self, queue): 
       Thread.__init__(self)
       self.queue = queue 
   def run(self):
       while True:
           #从队列中获取任务并扩展
           date_file_name = self.queue.get() #获取任务,并使用get从另一端删除。
           download_single_cds_file(date_file_name)
           self.queue.task_done() #告知队列该任务已完成

def download_single_cds_file(date_file_name):
    filename=date_file_name+'.nc' 
    if(os.path.isfile(filename)): 
      print("当前数据文件已经存在: ",filename) 
    else:
      print("当前正在下载:",filename)
      c = cdsapi.Client() 
      c.retrieve(
          'reanalysis-era5-pressure-levels', 
          {
              'product_type' : 'reanalysis',
              'format'       : 'netcdf', #数据格式,可以是grib
              'variable': ['geopotential', 'relative_humidity','temperature','u_component_of_wind', 'v_component_of_wind', 'vertical_velocity'],
              'pressure_level': ['100','150','200','250', '300', '350','400', '450', '500','550', '600', '650','700', '750', '775','800', '825', '850','875', '900', '925','950', '975', '1000'], #输入压力高度                     
              'year' : date_file_name[0:4], 
              'month': date_file_name[-4:-2], 
              'day'  : date_file_name[-2:], 
              'time':['00:00','08:00','14:00','20:00'], #时刻
              'area': [70, 90, 30, 130], 
              'grid': [0.5, 0.5], 
          },         
          filename) #filename,数据存储的文件

    # #冰川数据下载
    # c.retrieve("insitu-glaciers-elevation-mass",
    #     {
    #     "variable": "all",
    #     "product_type": "elevation_change",
    #     "file_version": "20170405",
    #     "format": "tgz"
    #     },
    #     "download.tar.gz")

if __name__ == '__main__': 
    
    file_numbers_at_same_time=4  
    start_date ='2019-01-01' #开始时间
    end_date ='2019-01-05'   #结束时间
    start_date_result=dt.datetime.strptime(start_date,'%Y-%m-%d')
    end_date_result=dt.datetime.strptime(end_date,'%Y-%m-%d')
    print("start_date_result",start_date_result)
 
    file_gap_time = dt.timedelta(days=1) #下载日期间隔,以天为单位
    print('下载文件开始日期 : '+ start_date)

    date_list_download=[] #需要下载数据得时间列表
    while start_date_result <= end_date_result: 
        date_file_name=start_date_result.strftime("%Y%m%d") #调整日期得显示格式
        
        date_list_download.append(str(date_file_name))
        start_date_result =start_date_result +file_gap_time
    
    #创建一个主进程和工作线程,初始化进程对象,容量不设上限
    single_queue = Queue() #FOFO队列,其添加得第一个任务是检索得任务

    for i in range(file_numbers_at_same_time): 
        single_task = DownloadCDS(single_queue)
        single_task.daemon = True
        single_task.start()     

    for ii in date_list_download:
        single_queue.put((ii))  #使用put将元素添加到序列的一个“末端”
    single_queue.join() #处理完了所有线程
   
end = time.clock()
print('>>> Total running time: %s Seconds'%(end-start))
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐