WRF更换静态下垫面数据

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的形式,其中xstartxendystartyend是五位正整数,分别指定文件中包含的数组的起始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)即可。

备注

  1. 在生成二进制数据文件时,可以将数据文件分为多个文件存储,但每个文件需要有相同的尺寸。如无法正好分割,则需要填充一个标志值(在index文件中使用missing_value关键字指定)。
  2. 由于起始索引结束索引必须为五位数,因此一个变量在xy方向上的数据点不能超过99999个。如果一个字段在任何一个维度上都有超过99999个数据点,可以简单地将数据集分割成几个较小的数据集,这些数据集将被geogrid分开识别。
  • 14
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WRF(Weather Research and Forecasting)是一种广泛应用于气象领域的数值模式,用于气象预报和气候研究。对于WRF模式中的静态数据,可以通过三种方法进行修改,下面将分别介绍这三种方法以及它们的关键代码示例。 1. 使用WPS(WRF Preprocessing System)修改静态数据: WPS是WRF模式中用于预处理数据的工具。使用WPS可以将输入数据转换为WRF模式可接受的格式。以下是使用WPS修改静态数据的关键代码示例: ```python from WPS import geogrid from WPS import ungrib from WPS import metgrid # 对静态数据进行网格化 geogrid.exe() # 把静态数据转换为WRF模式可接受的格式 ungrib.exe() # 对转换后的数据进行预处理并生成输入文件 metgrid.exe() ``` 2. 直接修改WRF模式中的配置文件: WRF模式中的配置文件包含了静态数据的路径和参数等信息。通过直接修改配置文件,可以改变WRF模式使用的静态数据。以下是直接修改配置文件的关键代码示例: ```python import fileinput # 修改WRF模式的配置文件 for line in fileinput.input("namelist.input", inplace=True): if line.startswith("geog_data_path"): print("geog_data_path = '/path/to/new/static/data/'") else: print(line, end='') ``` 3. 使用NCL(NCAR Command Language)修改静态数据: NCL是一种用于科学数据分析和可视化的脚本语言。通过编写NCL脚本,可以读取和修改WRF模式中的静态数据。以下是使用NCL修改静态数据的关键代码示例: ```python load "WRF" load "Nio" ; 读取静态数据 file = addfile("static_data.nc", "r") static_data = file->static_data ; 修改静态数据 ; 修改 static_data 中的某些变量或属性 ; 保存修改后的静态数据 new_file = addfile("new_static_data.nc", "c") new_file->static_data = static_data ; 关闭文件 delete(file) delete(new_file) ``` 以上是三种常用的方法来修改WRF模式中的静态数据,分别是使用WPS进行预处理,直接修改配置文件和使用NCL脚本。根据具体的需求和数据格式,可以选择适合的方法进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值