Change retrieve_micaps_server.get_model_grid's ensemble number dimension position.

This commit is contained in:
NMC-DAVE 2021-04-21 14:16:57 +08:00
parent 851b350989
commit 9c7fe4a22e
12 changed files with 195 additions and 23 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

@ -43,7 +43,7 @@
{
"data": {
"text/plain": [
"<xarray.core.options.set_options at 0x7f76030646d0>"
"<xarray.core.options.set_options at 0x7fc33c112590>"
]
},
"execution_count": 2,
@ -126,6 +126,77 @@
"data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 读取CRA40再分析数据\n",
"\n",
"CRA40为中国研制的第一套长时间序列全球大气再分析数据集-逐6小时产品覆盖全球范围时间跨度40年(197901-201812)并准实时更新水平分辨率34公里、0.25°、0.5°、1.0°、2.5°。"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre>&lt;xarray.Dataset&gt;\n",
"Dimensions: (lat: 361, level: 1, lon: 720, time: 1)\n",
"Coordinates:\n",
" * time (time) datetime64[ns] 2020-04-19\n",
" * level (level) int64 500\n",
" * lat (lat) float64 90.0 89.5 89.0 ... -89.0 -89.5 -90.0\n",
" * lon (lon) float64 0.0 0.5 1.0 1.5 ... 358.5 359.0 359.5\n",
" forecast_reference_time datetime64[ns] 2020-04-19\n",
" forecast_period (time) float64 0.0\n",
"Data variables:\n",
" geopotential_height (time, level, lat, lon) float32 5.14e+03 ... 4.8...\n",
"Attributes:\n",
" Conventions: CF-1.6\n",
" Origin: CIMISS Server by MUSIC API</pre>"
],
"text/plain": [
"<xarray.Dataset>\n",
"Dimensions: (lat: 361, level: 1, lon: 720, time: 1)\n",
"Coordinates:\n",
" * time (time) datetime64[ns] 2020-04-19\n",
" * level (level) int64 500\n",
" * lat (lat) float64 90.0 89.5 89.0 ... -89.0 -89.5 -90.0\n",
" * lon (lon) float64 0.0 0.5 1.0 1.5 ... 358.5 359.0 359.5\n",
" forecast_reference_time datetime64[ns] 2020-04-19\n",
" forecast_period (time) float64 0.0\n",
"Data variables:\n",
" geopotential_height (time, level, lat, lon) float32 5.14e+03 ... 4.8...\n",
"Attributes:\n",
" Conventions: CF-1.6\n",
" Origin: CIMISS Server by MUSIC API"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# set retrieve parameters\n",
"data_code = \"NAFP_CRA40_FTM_6HOR_ANA\"\n",
"init_time = \"2020041900\"\n",
"valid_time = 0\n",
"fcst_ele = \"GPH\" # 位势高度场\n",
"fcst_level = 500 # 500hPa层次\n",
"level_type = \"-\"\n",
"\n",
"# retrieve data from CMADaSS\n",
"data = cmadaas_model_grid(data_code, init_time, valid_time, fcst_ele, fcst_level, level_type,\n",
" varname='geopotential_height', units='gpm', \n",
" levattrs={'long_name':'isobaric', 'units':'hPa', '_CoordinateAxisType':'isobaric'},\n",
" cache=False)\n",
"data"
]
},
{
"cell_type": "code",
"execution_count": null,

File diff suppressed because one or more lines are too long

@ -1423,7 +1423,7 @@ def cmadaas_model_grid(data_code, init_time, valid_time, fcst_ele, fcst_level, l
:param fcst_ele: forecast element, like 2m temperature "TEM"
:param fcst_level: vertical level, like 0
:param level_type: forecast level type, 表示Grib数据中的层次类型, 可在云平台上查询.
:param limit: [min_lat, min_lon, max_lat, max_lon],
:param limit: [min_lat, min_lon, max_lat, max_lon]
:param varname: set variable name, default is 'data'
:param units: forecast element's units, defaults to retrieved units.
:param scale_off: [scale, offset], return values = values*scale + offset.

@ -272,9 +272,9 @@ def get_model_grid(directory, filename=None, suffix="*.024",
if data_type == 4:
data = np.full((nmem, nlat, nlon), np.nan)
else:
data = np.full((2, nmem, nlat, nlon), np.nan)
data = np.full((nmem, 2, nlat, nlon), np.nan)
ind = 0
for imem in range(nmem):
for _ in range(nmem):
head_info_mem = np.frombuffer(
byteArray[ind:(ind+278)], dtype=head_dtype)
ind += 278
@ -285,7 +285,7 @@ def get_model_grid(directory, filename=None, suffix="*.024",
if data_type == 4:
data[number, :, :] = np.squeeze(data_mem['data'])
else:
data[:, number, :, :] = np.squeeze(data_mem['data'])
data[number, :, :, :] = np.squeeze(data_mem['data'])
# scale and offset the data, if necessary.
if scale_off is not None:
@ -340,18 +340,18 @@ def get_model_grid(directory, filename=None, suffix="*.024",
'lat':lat_coord, 'lon':lon_coord})
else:
if level[0] == 0:
data = data[np.newaxis, ...]
data = data[:, np.newaxis, ...]
data = xr.Dataset({
varname:(['time', 'number', 'lat', 'lon'], data, varattrs)},
varname:(['number', 'time', 'lat', 'lon'], data, varattrs)},
coords={
'time':time_coord, 'number':number_coord,
'number':number_coord, 'time':time_coord,
'lat':lat_coord, 'lon':lon_coord})
else:
data = data[np.newaxis, :, np.newaxis, ...]
data = data[:, np.newaxis, np.newaxis, ...]
data = xr.Dataset({
varname:(['time', 'number', 'level', 'lat', 'lon'], data, varattrs)},
varname:(['number', 'time', 'level', 'lat', 'lon'], data, varattrs)},
coords={
'time':time_coord, 'number':number_coord, 'level':level_coord,
'number':number_coord, 'time':time_coord, 'level':level_coord,
'lat':lat_coord, 'lon':lon_coord})
elif data_type == 11:
speedattrs = {'long_name':'wind speed', 'units':'m/s'}
@ -386,25 +386,25 @@ def get_model_grid(directory, filename=None, suffix="*.024",
angle = 270. - angle
angle[angle<0] = angle[angle<0] + 360.
if level[0] == 0:
speed = speed[np.newaxis, ...]
angle = angle[np.newaxis, ...]
speed = speed[:, np.newaxis, ...]
angle = angle[:, np.newaxis, ...]
data = xr.Dataset({
'speed': (
['time', 'number', 'lat', 'lon'], speed, speedattrs),
['number', 'time', 'lat', 'lon'], speed, speedattrs),
'angle': (
['time', 'number', 'lat', 'lon'], angle, angleattrs)},
['number', 'time', 'lat', 'lon'], angle, angleattrs)},
coords={
'lon': lon_coord, 'lat': lat_coord,
'number': number_coord, 'time': time_coord})
else:
speed = speed[np.newaxis, :, np.newaxis, ...]
angle = angle[np.newaxis, :, np.newaxis, ...]
speed = speed[:, np.newaxis, np.newaxis, ...]
angle = angle[:, np.newaxis, np.newaxis, ...]
data = xr.Dataset({
'speed': (
['time', 'number', 'level', 'lat', 'lon'],
['number', 'time', 'level', 'lat', 'lon'],
speed, speedattrs),
'angle': (
['time', 'number', 'level', 'lat', 'lon'],
['number', 'time', 'level', 'lat', 'lon'],
angle, angleattrs)},
coords={
'lon': lon_coord, 'lat': lat_coord, 'level': level_coord,