今天记录下最近两三天学习WRF嵌套域设计历程。先是纯手算,发现设计的域网格并不准确(没有出现在自己想要的经纬度上);其次尝试用ArcGIS的fishnet辅助设计,但是发现ArcGIS软件过于冗杂,响应很慢,更换投影坐标系统失败了;所以转而学习QGIS,利用QGIS在中国地图上绘制出了两层网格,经过一番数格子和计算,终于得到了较为理想的嵌套域网格。(在接下来的分享中直接将嵌套域网格用网格代替)
首先需要掌握QGIS如何生成网格(如果有疑问,可以翻看上一篇blog),然后需要下载一个中国各省行政地图,最好是只有国界线和省界限的,可以去麻辣GIS网站搜索中国地图然后下载解压。用QGIS打开中国地图shp文件(直接将shp文件拖入QGIS工作区即可打开),然后参考各省位置,绘制你感兴趣区域的网格。
需要注意的是:中国地图是地理坐标系统,所以生成的网格也是以经纬度为单位的网格,要设计WRF所需的公里网格,可以利用0.009度=1km的等量关系,生成长宽大小接近公里单位的公里网格。一定要注意不要通过将地理坐标系统改为投影坐标系统,然后生成公里网格,因为WRF的namelist.wps是先定义网格,然后定义投影方式,相当于将定义好的网格按照定义的投影方式进行投影,所以设计网格也是基于地理坐标系统而非投影坐标系统。一定要记住这一点,血泪教训,不信试试?
#我这里的例子是两层嵌套,Domain1(京津冀区域):9km*9km,Domain2(北京):3km*3km。
先来讲一下网格嵌套的要求,如下图所示(图片来自于WRF官网),内层网格的大小和坐标以及网格比例之间存在关系:
e_we = (i_parent_end - i_parent__start) * parent_grid_ratio + 1
e_sn = (j_parent_end - j_parent__start) * parent_grid_ratio + 1
所以我们不仅要确定网格中心点经纬度,还要调整网格大小和内层网格在外层网格中的坐标以满足母子网格之间的上述关系。下面是网格设计全过程:
生成覆盖京津冀区域的网格1(约为9km*9km)和覆盖北京地区的网格2(约为3km*3km)。这里注意:尽量在选择网格范围时,将网格2左边界线与网格1的某一条竖线对齐,否则后面确定坐标会比较麻烦。
确定网格1和网格2的大小(长宽定义为横竖方向的格子数,鼠标停留在最左下角的格子位置,会显示该格子的编号,假设为86,然后同理放置于最右下角的格子位置,假设显示7052,那么长为7052/86=82,宽为86),网格1:82*86,网格2:100*81
确定i_parent__start和j_parent__start即网格1在网格2中的起点坐标(这里的坐标为两个网格起点之间的格点数,WRF中默认左下角为起点),如果横方向网格1和网格2之间的格点数为22,那么i_parent__start=23(WRF中的默认外层网格的起点也算一个格点),竖方向同理。在该例子中,i_parent__start=23,j_parent__start=41。
这一步不去确定i_parent__end和j_parent__end,我们只需要满足上述等式即可。观察上述等式,在该例子中parent_grid_ratio=3(9km/3km),所以可以得出网格2的长宽也就是公式里的e_we和e_sn一定是3的倍数再加1,而我们生成的网格2的长宽为100*81,需要修改为离原始数据最近的满足要求的数字即可,所以网格2大小修改为100*82就满足上述等式。
最后一步,确定网格1的中心位置的经纬度,根据条件查找找到网格中心点,然后鼠标放在其上,可以获取其经纬度。
WRF嵌套域设计所需数据已经全部获取,接下来输入进去就好啦。
(配图明天搞,晚安)