WRF修改geo_em变量
在使用WRF模型进行数值模拟时,有时需要修改geo_em.d01.nc文件中的变量来满足特定的研究需求。本文介绍如何修改geo_em.d01.nc中的变量,并保持其他信息不变。
背景
WRF模型的地理静态数据文件(geo_em*.nc)包含了模型运行所需的地形、土地利用、土壤类型等重要信息。有时为了进行敏感性实验或理想化试验,需要修改这些变量。
方法步骤
1. 找到读取函数
首先,找到编译WRF过程中自带的读取nc文件的Fortran函数:read_wrf_nc.f90
可以使用Linux命令查找:
find / -name 'read_wrf_nc.f90'
2. 修改源代码
找到文件后,修改这个文件,拉到代码最下面,你会看到USER_CODE
这个子函数:
在if条件语句下,更改希望修改的变量。比如这里将原始文件中变量名为”LANDMASK”的数据,全部修改为0:
if (trim(varname) == 'LANDMASK') then
! 将所有LANDMASK值设为0
do j = 1, ny
do i = 1, nx
data_array(i,j) = 0.0
end do
end do
write(*,*) 'LANDMASK has been modified to 0'
end if
3. 编译程序
保存修改后,重新将其编译为.exe
格式进行调用,这里使用gfortran:
gfortran read_wrf_nc.f90 -o read_wrf_nc.exe
4. 执行修改
将现在的geo_em.d01.nc复制到和该函数相同的目录下,使用命令:
./read_wrf_nc -EditData LANDMASK geo_em.d01.nc
5. 验证结果
运行完成后,得到的geo_em.d01.nc中的LANDMASK这个变量已经全部是0了:
数学原理
在修改地理静态数据时,需要注意数据的一致性。例如,如果修改了地形高度$h(x,y)$,那么相关的物理量也需要相应调整。
地表气压与地形高度的关系可以用气压高度公式表示:
\[p(z) = p_0 \exp\left(-\frac{z}{H}\right)\]其中:
- $p(z)$ 是高度z处的气压
- $p_0$ 是海平面气压
- $H$ 是大气标高(约7-8km)
注意事项
- 备份原始文件:在修改之前,务必备份原始的geo_em文件
- 变量一致性:修改某个变量时,要确保与其他相关变量的一致性
- 物理合理性:修改后的值应该在物理上合理
- 测试验证:修改后要进行模型测试,确保能正常运行
扩展应用
这种方法不仅适用于LANDMASK,还可以用于修改其他地理静态变量:
- HGT_M: 地形高度
- SOILCTOP: 土壤类型
- LU_INDEX: 土地利用类型
- XLAT_M, XLONG_M: 经纬度坐标
总结
通过修改WRF自带的读取函数,我们可以灵活地调整geo_em文件中的变量,这为进行各种敏感性实验和理想化研究提供了便利。但在使用时要注意保持数据的物理一致性和合理性。
参考资料:
- WRF User’s Guide
- WRF-ARW Technical Note