ERA5 数据集是由欧洲中期天气预报中心(ECMWF)开发和维护的气象再分析数据集。它提供了全球范围内每小时的气象数据,涵盖了气象和气候研究、环境监测、能源、农业和防灾减灾等众多领域。
ERA5 是 ECMWF 气象再分析系列中的第五代产品,覆盖了1979年至今的全球气象数据。它的主要特点包括高时空分辨率、长时间序列和多种气象要素。
时间范围:1979年至今
空间分辨率:0.25° × 0.25°
时间分辨率:1小时
变量数量:约50种大气和地表变量
ERA5 数据集包含了大量的气象和气候变量,这些变量可以分为大气和地表两大类:
大气变量:包括气温、风速、风向、湿度、气压、云量等在不同高度层的数据。
地表变量:包括地表温度、降水量、土壤湿度、雪深、辐射量等。
这些数据通过先进的数值天气预报模型和多种观测数据的同化生成,保证了数据的高精度和一致性。
ERA5 数据集的文件通常采用 NetCDF(.nc)格式存储,每个文件包含特定时间段内的一个或多个气象变量的数据。每个 NetCDF 文件的内容通常包括以下部分:
文件头包含文件的元数据,如时间范围、空间分辨率、变量列表等。
变量数据:具体的气象变量数据,以多维数组形式存储。
属性信息:每个变量的详细属性,如单位、描述等。
例如,一个温度数据文件的结构可能如下:
文件名:ERA5_temperature_19790101.nc
文件头:
时间范围:1979年1月1日 00:00 - 23:00
空间分辨率:0.25° × 0.25°
变量:温度
温度:三维数组(时间、纬度、经度)
属性信息:
单位:K(开尔文)
描述:地表温度
ERA5 数据集因其高时空分辨率和广泛覆盖,被广泛应用于气象和气候研究,环境监测,以及许多其他领域。
使用说明:
可以利用python代码进行下载
import os
import cdsapi
c = cdsapi.Client()
# Setting up for global coverage
ia = 0
Regions = ['GLOBAL']
Areas = [[-90, -180, 90, 180]] # Global area
''' Common settings '''
Years = [str(year) for year in range(2001, 2024)]
Months = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
Days = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20',
'21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31']
utc_times = ['00:00', '01:00', '02:00', '03:00', '04:00', '05:00',
'06:00', '07:00', '08:00', '09:00', '10:00', '11:00',
'12:00', '13:00', '14:00', '15:00', '16:00', '17:00',
'18:00', '19:00', '20:00', '21:00', '22:00', '23:00']
leapyears = ['2004', '2008', '2012', '2016', '2020']
# Assuming 29 layers from your original script
plevels = ['50', '70', '100', '125', '150', '175', '200', '225', '250', '300', '350', '400', '450', '500', '550', '600', '650', '700', '750', '775', '800', '825', '850', '875', '900', '925', '950', '975', '1000']
params = ['geopotential', 'relative_humidity', 'temperature']
resolution = ['0.25', '0.25']
''' Loop for downloading '''
area = Areas[ia]
# Check and create directory
if not os.path.exists(Regions[ia]):
os.mkdir(Regions[ia])
UTC = utc_times
for year in Years:
for month in Months:
for day in Days:
if month in ['04', '06', '09', '11'] and day >= '31':
continue
if year in leapyears and month == '02' and day >= '30':
continue
if year not in leapyears and month == '02' and day >= '29':
continue
ncFileName = f"{Regions[ia]}/{year}/ERA5-PL-29L-0P25-{Regions[ia]}-{year}{month}{day}.nc"
if not os.path.exists(os.path.dirname(ncFileName)):
os.makedirs(os.path.dirname(ncFileName))
if not os.path.exists(ncFileName):
c.retrieve(
'reanalysis-era5-pressure-levels',
{
'product_type': 'reanalysis',
'variable': params,
'pressure_level': plevels,
'year': year,
'month': month,
'day': day,
'time': UTC,
'format': 'netcdf',
'area': area,
'grid': resolution,
},
ncFileName)