WRF更换静态下垫面数据
对于更换WRF
的下垫面数据,主要存在两种方法。1、对geogrid.exe
生成的geo_d*.nc
中有关土地利用类型的变量进行更改。2、对原始的静态下垫面数据进行更改。方法一没有从根本解决更换下垫面的问题,相比较而言,方法二是最根本也是最理想的方法。
准备数据
WRF
使用的下垫面数据(土地利用数据)有三种分类体系可供选择,分别为USGS-24类分类标准
,IGBP-17类分类标准
,IGBP-18类分类标准
。
坐标系选择
WRF
使用的数据为地理坐标系,需要将土地利用影像的坐标系转为WGS84
坐标系。
读取栅格文件
python
中可以通过rasterio
库读取geotif
文件,图像存储为numpy.array
格式。代码如下:
import rasterio
tifPath = "../modis_landuse/mcd12/landuse.tif"
rasterDataset = rasterio.open(tifPath)
二进制文件生成
下垫面数据在WRF
中以二进制文件存储,python
中,可以使用numpy
直接保存为二进制文件。但需要注意WRF
中数据上下颠倒,即影像第一行在二级制文件表达时为最后一行。
同时,WRF
对二进制文件的命名有所规定,数据文件的名称采用xstart
-xend
.ystart
-yend
的形式,其中xstart
、xend
、ystart
和yend
是五位正整数,分别指定文件中包含的数组的起始x
索引、数组的结束x
索引、数组的起始y
索引和数组的结束y
索引。
代码如下:
xstart = "00001"
ystart = "00001"
xend = str(rasterDataset.width).zfill(5)
yend = str(rasterDataset.height).zfill(5)
outputFile = xstart + "-" + xend + "." + ystart + "-" + yend
data = rasterDataset.read(1)[::-1]
data.tofile("../modis_landuse/tif_to_bin/" + outputFile)
索引文件生成
除了二进制数据文件
外,每个数据集还需要一个额外的索引文件
,此文件始终命名为index
。下面给出了一个索引文件
的示例。
type=categorical
category_min=1
category_max=21
projection=regular_ll
dx=0.00530227
dy=0.00530227
known_x=1.0
known_y=1.0
known_lat=35.10073
known_lon=111.50223
wordsize=1
tile_x=1514
tile_y=1817
tile_z=1
units=“category”
description=“Noah-modified 21-category IGBP-MODIS landuse”
mminlu=“MODIFIED_IGBP_MODIS_NOAH”
iswater=17
islake=21
isice=15
isurban=13
具体内容解释如下:
type
:为文件描述类型
category_min
:分类代码的最小值
category_max
:分类代码的最大值
projection
:投影类型
dx
:横向格点间的间隔,即栅格影像的横向分辨率
dy
:纵向格点间的间隔,即栅格影像的纵向分辨率
known_x
:指定一个标记点横向坐标
known_y
:指定一个标记点纵向坐标
known_lat
:标记点横向坐标的纬度
known_lon
:标记点纵向坐标的经度
tile_x
:横向格点数
tile_y
:纵向格点数
units
:格点值的单位
description
:文件描述
iswater
:水体类别的编号
islake
:湖泊类别的编号
isice
:冰川类别的编号
isurban
:城市类别的编号
设置GEOGRID.TBL
将生成好的二进制数据文件
和索引文件
存入同一个文件夹中,将该文件夹存放至WRF
静态数据文件夹WPS_GEOG
中。
同时修改WPS/geogrid
文件夹下的GEOGRID.TBL
文件。
在该文件LANDUSEF
类别后增加以下三个内容:
rel_path = user:myself
interp_option = user:nearest_neighbor
landmask_water = user:17
具体内容解释如下:
rel_path
:文件存储的相对位置
user
:自定义的标识名
myself
:存储二进制数据文件
和索引文件
的文件夹名
interp_option
:插值方式
nearest_neighbor
:最近邻插值法
landmask_water
:水体类型编号
使用方法
更改完所有文件后,在编写namelist.wps
时,在geogrid
分类下的geog_data_res
写为自定义的标识名(myself
)即可。
备注
- 在生成
二进制数据文件
时,可以将数据文件分为多个文件存储,但每个文件需要有相同的尺寸。如无法正好分割,则需要填充一个标志值(在index
文件中使用missing_value
关键字指定)。 - 由于
起始索引
和结束索引
必须为五位数,因此一个变量在x
或y
方向上的数据点不能超过99999
个。如果一个字段在任何一个维度上都有超过99999
个数据点,可以简单地将数据集分割成几个较小的数据集,这些数据集将被geogrid
分开识别。