1

我正在使用 NASA-NEX-GDDP CMIP6 数据。我目前有可以单独打开和分割每个文件的工作代码,但是为所有模型输出和场景下载一个变量需要几天时间。我的目标是获得所有模型输出和情景的所有温度和降水数据,然后应用气候指标并与 xclim 集成。

url = 'https://ds.nccs.nasa.gov/thredds2/dodsC/AMES/NEX/GDDP-CMIP6/UKESM1-0-LL/ssp585/r1i1p1f2/tasmax/tasmax_day_UKESM1-0-LL_ssp585_r1i1p1f2_gn_2098.nc'
lat = 53
lon = 0

try:
    with xr.open_dataset(url) as ds:
        ds.interp(lat=lat,lon=lon).to_netcdf(url.split('/')[-1])
except Exception as e: print(e)

此代码有效,但速度很慢(一个变量,一个位置的天数)。想知道是否有更好、更快的方法?我宁愿不下载整个文件,因为它们都是 240 MB!

更新:

我还尝试了以下方法来利用 dask 并行任务,它稍微快一点,但仍然需要几天才能完成完整的变量输出:

 def interp_one_url(path,lat,lon):
       with xr.open_dataset(path) as ds: 
           ds = ds.interp(lat=lat,lon=lon)
           return ds 
urls = ['https://ds.nccs.nasa.gov/thredds2/dodsC/AMES/NEX/GDDP-CMIP6/UKESM1-0-LL/ssp585/r1i1p1f2/tasmax/tasmax_day_UKESM1-0-LL_ssp585_r1i1p1f2_gn_2100.nc',
        'https://ds.nccs.nasa.gov/thredds2/dodsC/AMES/NEX/GDDP-CMIP6/UKESM1-0-LL/ssp585/r1i1p1f2/tasmax/tasmax_day_UKESM1-0-LL_ssp585_r1i1p1f2_gn_2099.nc']
lat = 53
lon = 0
paths = [url.split('/')[-1] for url in urls]
datasets = [interp_one_url(url,lat,lon) for url in urls]
xr.save_mfdataset(datasets, paths=paths)
4

1 回答 1

0

一种方法是通过 ncss 门户下载,而不是通过 NASA 获得的 OpenDAP。URL 是不同的,但它也是迭代的。

例如

lat = 53
lon = 0
   
URL = "https://ds.nccs.nasa.gov/thredds/ncss/AMES/NEX/GDDP-CMIP6/ACCESS-CM2/historical/r1i1p1f1/pr/pr_day_ACCESS-CM2_historical_r1i1p1f1_gn_2014.nc?var=pr&north={}&west={}&east={}&south={}&disableProjSubset=on&horizStride=1&time_start=2014-01-01T12%3A00%3A00Z&time_end=2014-12-31T12%3A00%3A00Z&timeStride=1&addLatLon=true"

wget.download(URL.format(lat,lon,lon+1,lat-1) #north, west, east, south boundary

这一步完成了切片和下载。获得 URL 后,您可以使用 wget 之类的东西,并并行完成下载,与一次选择并保存一个相比,这将加快速度

于 2022-01-25T15:32:02.910 回答