注:linux中文件命名不要出现空格和括号
1.研究区域确定
确定研究区域可以输出namelist.wps的研究范围,跳转https://jiririchter.github.io/WRFDomainWizard/可以实现在官网上绘制研究区域并生成namelist.wps文件,也可以在windows或linux上下载domain wizard工具(比较麻烦)
点击保存下载就可以得到研究范围了
研究域说明:我这里采用外层和内层在1:3左右,主要是内域不要太靠近外域,同时内域不一定要正中心。调整位置的主要考量在于,边界处尽量不要有特别大的地形变化
2.WPS处理
2.1 修改namelist.wps文件
2.2 WPS主操作
进入wps文件后操作:
链接再分析气象数据
./link_grib.csh path(气象数据所在的文件夹)/fnl_2019061*
ln -sf ungrib/Variable_Tables/Vtable.GFS Vtable
./ungrib.exe
地理数据处理,如果对研究范围的地理数据修改了,需要在geogrid文件夹的GEOGRID.TBL中加入新的地理数据位置
./geogrid.exe
将气象数据和地理数据整合
./metgrid.exe
2.3 WPS辅操作(可以不管)
查看自己的嵌套域大小
ln -sf util/plotgrids_new.ncl .
ncl plotgrids_new.ncl
3.WRF运行
3.1 WRF主操作
将WPS生成的met文件链接过来
ln -sf ../../wps/met_em.d0* .
初始化
./real.exe #初始化
可选项:移除对当前 shell 及其子进程堆栈大小的限制 ,当运行多个wrf或输出结果很大的时候可以输入这个
ulimit -s unlimited
wrf运行几种选择,最后一种最优
第一种: 直接运行wrf,且不能关闭终端,受限制大
./wrf.exe
第二种 :后台运行wrf,不受终端关闭影响,不关机就行
nohup ./wrf.exe >& out.log
#nohup:这个命令使得后面的进程能够忽略挂起信号(SIGHUP),即使关闭了启动它的终端,进程也会继续运行。
#>& out.log:这部分将标准输出重定向到一个名为out.log的文件中。>&是>和2>&1的简写形式,表示将标准输出和标准错误都重定向到同一个文件。
第三种: 多核运行wrf,速度最快,推荐
time nohup mpirun -n 9 ./wrf.exe >& out.log &
#time:会输出命令运行时长
#mpirun:这是MPI的运行命令,用于启动一个并行应用程序。
#-n 9:这个选项指定了要使用的MPI进程数量,这里是9个进程。
#&:将整个命令放在后台执行。
wrf.exe 应该使用多少个处理器?
使用的最小处理器数量应基于尺寸最大的域,而使用的最大处理器数量应基于尺寸最小的域。比如说,你有 2 个域,域 01 是 20x20 的网格空间,而域 02 是 30x30的网格空间。您可以通过计算大致估算出处理器的数量:
最大处理器数量:
(20/10)*(20/10) = 4 个处理器
使用过多处理器的问题在于,当您使用多个处理器时,会根据使用的处理器数量将域划分为多个正方形。但每个方格都有光环(或从每个边界向内一定数量的网格空间),可以获得靠近边界区域的相邻计算结果。如果使用的处理器数量过多,每个方格都会变得小于光环的大小,这就会造成问题
可以通过ps和htop查看后台运行的进程,可以通过kill 进程号杀死后台进程
ps -ef | grep 'wrf.exe' | grep -v grep | awk '{print $2}' | xargs -n 1 kill -SIGTERM
#杀死所有进程
ps -ef | grep wrf.exe
#查看与wrf有关的进程
并行运算参考:https://www.mmasclub.cn/thread-290-1-1.html
wrf运行是否成功判定
并行运算的wrf会输出多个rsl.out.*文件,如果仿真成功,则应在这些文件的末尾打印消息 SUCCESS COMPLETE WRF。这可以通过键入tail rsl.out.0000 快速检查
3.2 wrfout结果查看
(1)wrf输出参数查看
ncview wrfout数据
ncdump -h wrfout数据
(2)wrf运行时间查看
namelist.input 中的所有选项都保留在名为 namelist.output 的文件中。
要检查写入 netCDF 文件的输出时间,可以使用以下 netCDF 命令(例如)
ncdump -v Times wrfout_d01_yyyy-mm-dd_hh:00:00
若要查看每个模型时间步长的计算时间,请打开记录这些时间的 rsl.out.0000 文件(或其他标准输出文件)。例如
模型时间步长
Timing for main: time 2006-01-21_23:55:00 on domain 2: 4.91110 elapsed seconds.
Timing for main: time 2006-01-21_23:56:00 on domain 2: 4.73350 elapsed seconds.
Timing for main: time 2006-01-21_23:57:00 on domain 2: 4.72360 elapsed seconds.
Timing for main: time 2006-01-21_23:57:00 on domain 1: 19.55880 elapsed seconds.
4.地理数据替换
4.1通过GIS将最新地理数据替换并生成3类UCM数据分类
(1)重分类(在GIS中将栅格数据转化为二进制数据,数据精度为10m*10m)最后输出文件坐标系为地理坐标系wgs1984,其中1类可以修改为31?
重分类土地利用栅格数据,将中国土地利用分类换成美国土地利用分类
将中国土地利用分类系统转换成USGS(WRF可识别) | |||||
USGS类型 | 中国土地类型 | USGS类型 | 中国土地类型 | USGS类型 | 中国土地类型 |
1 | 51,53 | 10 | 19 | 61,62,63,65,67 | |
2 | 11 | 20 | |||
3 | 11,12,52 | 12 | 21 | ||
4 | 13 | 22 | |||
5 | 14 | 21 | 23 | 66 | |
6 | 15 | 31 | |||
7 | 31,32,33 | 16 | 41,42,43,46 | 32 | |
8 | 22,23 | 17 | 45,64 | 33 | |
9 | 24 | 18 |
(2)在新地形的基础上继续分类,将城市建成区分为低密度住宅、高密度住宅和工商业运输,根据不透水面比例确定
(3)镶嵌至新栅格 (底图放在第一位,后面两行都是first,像素和波段点根据原栅格输入),将新的3类UCM镶嵌到土地利用数据中
(4)将最终的数据的投影转成WGS_1984
(5)将数据导出,NoDaTa值修改为255,网格大小为0.001*0.001
(6)栅格转ASCII,WRF只能识别二进制数据,数据转换
(7)其他土地利用SinoLC-1
4.2 在Linux中把二进制数据转换成WRF识别的二进制数据
(1)将asciitowps.f90、write_geogrid.o和二进制txt文件复制进wps/geogrid/src中
(2)修改asciitowps.f90中的二进制文件夹路径
(3)执行gfortran -free asciitowps.f90 writr_geogrid.o命令生成a.out文件
(4)执行./a.out命令生成地理数据
(5)从已有地理数据中拷贝index文件修改参数(改tile)
4.3 设置namelist.wps的参数调用新的地理数据
(1)在wps/geogrid里面修改GEOGRID.TBL文件,把新的地理数据加入进去(在name=LANDUSEF属性下添加)一般加到每种类型的最后面,以下图片加到最前面了
(2)修改namelist.wps的geogrid的部分
(3) geog_data_res后参数解释,比如以下代码:
geog_data_res = ‘usgs_lakes+default’, ‘usgs_lakes+default’,
此更改的效果是指示geogrid程序在GEOGRID.TBL文件的每个条目中查找静态数据的分辨率,该分辨率由“usgs_lakes”表示,如果此分辨率不可用,则采用“+”后面的字符串表示的分辨率。 因此,对于LANDUSEF字段的GEOGRID.TBL条目,将使用以字符串“usgs_lakes”标识的基于USG的土地利用数据,而不是上例中的“default”分辨率。 但当在GEOGRID.TBL条目中找不到geog_data_res中为域指定的分辨率时,将使用“default”表示的分辨率。
在更改默认的21类MODIS土地利用数据时,用户还必须确保在WRF namelist.input文件的&physics namelist记录中正确设置num_land_cat namelist变量。 对于24类USGS数据,num_land_cat应设置为24。
interp_option = nlcd2006_9s:average_gcell(0.0)
interp_option = nlcd2006_30s:average_gcell(0.0)
interp_option = nlcd2011_9s:average_gcell(0.0)
interp_option = nlcd2006:nearest_neighbor
interp_option = ssib_10m:four_pt
interp_option = ssib_5m:four_pt
interp_option = modis_15s:nearest_neighbor #modis15s约450m分辨率土地利用
interp_option = modis_15s_lake:nearest_neighbor #modis土地利用带水体450m分辨率
interp_option = modis_30s:nearest_neighbor #modis30s约900m分辨率土地利用
interp_option = modis_30s_lake:nearest_neighbor #modis土地利用带水体900m分辨率
interp_option = usgs_30s:nearest_neighbor #usgs30s约900m分辨率土地利用
interp_option = usgs_lakes:nearest_neighbor #usgs土地利用带水体
interp_option = modis_lakes:nearest_neighbor #modis土地利用带水体
interp_option = usgs_2m:four_pt #usgs2分约4000m分辨率土地利用
interp_option = usgs_5m:four_pt #usgs5分约9000m分辨率土地利用
interp_option = usgs_10m:four_pt #usgs9分约19000m分辨率土地利用
interp_option = lowres:average_gcell(4.0)+four_pt
interp_option = default:nearest_neighbor #default默认数据是modis_lakes数据
5.WRF运行问题
5.1WRF-UCM问题
(1)ZDC + Z0C + 2m is larger than the 1st WRF level - Stop in subroutine urban - change ZDC and Z0C(在城市化参数设置中,ZDC
(城市屋顶高度)加上Z0C
(粗糙度长度)再加上 2 米的高度超过了 WRF 模型的第一个垂直层的高度)
这是因为UCM 对第一个模型级别有限制(第一个 WRF 级别必须高于 ZDC + Z0C + 2 m,其中 ZDC 和 Z0C 是平均建筑高度及其标准偏差),而BEP和BEM没有限制,所以UCM第一级别设置为55m。也就是dzbot =55
解决:修改eta_levels ,使WRF第一个垂直层高度增加,dzbot =50,e_vert
参考模型垂直水平设置:
(2)WRF-BEP/BEM问题
问题:At line 2372 of file module_sf_urban.f90
Fortran runtime error: Bad real number in item 1 of list input
解决:打开wrf/run下的URBPARM.TBL文件,检查最后几段关于1、2、3类城市的建筑高度和所占比例输入情况,建议重新输入,不要从windows复制粘贴