爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 22657|回复: 39

WRF实战小结,包括ubuntu及服务器上安装运行,输出新变量,打印程序变量

  [复制链接]
发表于 2013-12-3 00:04:31 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 green_tea789 于 2014-6-6 19:07 编辑

安装
--------------
   
1.去wrf官网(http://www.mmm.ucar.edu/wrf/users/download/get_source2.html)下载tar文件,要先注册。解压后有WPS和WRFV3目录。

2.在WRFV3目录下:

1)配置
在ubuntu和服务器上都安装了。 ubuntu用的是自带的gfortran编译器。查了一下是4核的,就用并行了(dmpar)。服务器用的是ifort编译器。

sudo ./configure
如果是服务器,不用sudo.
输入netcdf的路径.
选择编译器:
ubuntu系统我选7.  Linux i486 i586 i686, gfortran compiler with gcc  (dmpar)
服务器我选19.  Linux x86_64 i486 i586 i686, ifort compiler with icc, SGI MPT  (dmpar)

2)编译
sudo ./compile em_real
编译成功后在main目录下有real.exe和wrf.exe,没有就查看日志里的错误信息。
在我们这里服务器上需要用nodes命令 找绿色节点,比如n107-8
然后登录n107节点,用 ssh n107
在上面用compile.
否则出现错误:out of memeory
这个问题困扰我很久,查了好多资料都不知道是怎么回事。最后电话问信息中心管理员,一句话就搞定了。这个故事教育我们闭门造车一段时间没有突破后要勇于拉下脸去问人。

3.在WPS目录下:

1)配置
sudo ./configure
输入netcdf的路径.
选择编译器:
ubuntu系统我选16.  Linux i486 i586 i686, gfortran    (dmpar_NO_GRIB2)
服务器我选3.  PC Linux x86_64, Intel compiler    DM parallel, NO GRIB2

2)编译
sudo ./compile

3) 修改namelist.wps
下载WRFDomainWizard软件选取嵌套区域,然后根据它生成的namelist修改namelist.wps文件内的e_we,e_sn,ref_lat,ref_lon,truelat1,truelat2,stand_lon参数。
选区域的时候我用的是Lambert投影。
我的ubuntu系统用这个软件有点费劲,要先手动装jkd(java development kit),然后配置环境变量。

4)生成初始和边界条件
去官网(http://rda.ucar.edu/datasets/ds083.2/)把要模拟日期的fnl下载到data目录里。
执行download.csh的时候如果出现wget: unable to resolve host address `my-proxy.dmz'错误,把Csh download script里 wget改成 wget --no-proxy就行了.

然后运行以下代码:
\rm -f met_em* geo_em* FILE* GRIBFILE* PFILE* *~
./geogrid.exe
ls -l ungrib/Variable_Tables
ln -sf ungrib/Variable_Tables/Vtable.GFS Vtable
data="/disk3/zhang/WRF/data/fnl/200012"
./link_grib.csh $data/fnl*
./ungrib.exe
ls -l metgrid/METGRID.TBL*
./metgrid.exe
ls -lrt met_em*
wrf="/disk3/zhang/WRF"
wrfv3=$wrf/WRFV3
wps=$wrf/WPS
cd $wrfv3/test/em_real/
\rm -f met_em*
ln -s $wps/met_em* .
cd $wrfv3/run
\rm -f met_em* output* rsl* wrfinput_d* wrfbdy_d* *~
ln -s $wps/met_em* .
cd $wps

具体一些目录要根据个人情况修改。

4.到WRFV3/run目录下:

1)设置namelist.input里的参数,要跟WRFDomainWizard软件生成的namelist.input对应。
2)sudo ./real.exe
出错信息在rsl里,可以用tail -10 rsl.out.0000查看是否成功。
3)sudo mpirun -np 4 ./wrf.exe ; 我的机子用mpirun大约要节省一半的时间。
4)运行后,生成wrfout文件,然后用NCL作图软件编程处理。NCL开发了专门的WRF模块。注意ncl程序里要在wrfout文件后面加上.nc才行。

输出变量
-------------
   
1.如果是Registry_EM.COMMON里已经有的变量,就把直接把r改成rh,h代表history,就是在结果文件里。

2.如果没有,比如要加的变量是FRO_YU:
1)在phys/里一级一级地call出这个变量。
2)在dyn_em/module_first_rk_step_part1.F里加:FRO_YU=grid%fro_yu,
3)在Registry/Registry_EM.COMMON里加上变量在wrfout文件里的参数:
state   real   FRO_YU           ikj     misc        1         -     i012rhdus "FRO_YU"                 "Froude number"   ""   ""

3. 有时候做了上述这些也没在wrfout文件里看到新变量,就有可能是物理参数化方案的选取原因。查看新变量在哪个物理参数化方案里,然后看namelist.input有没有选。

在运行日志文件里打印程序里的变量值/字符串
---------------------------------------------------------------
1)直接在程序里加 print也可以在rsl文件里看到输出。但如果想通过namelist.input里debug_level控制,就对debug_level任意设一个值,比如455。
2)在要打印的程序里加:
        CALL get_wrf_debug_level(debug_level_yu)
        if (debug_level_yu.eq.455) then
        WRITE( message , * ) 'fro_yu test on file, timestep = ', itimestep
        CALL wrf_message ( message )
       endif
之前要对自定义本地变量debug_level_yu声明:  integer debug_level_yu

3)然后在运行日志文件rsl.error.0001里就有了 fro_yu test 的字样。

如果你设的打印没有输出,看看是不是CASE的问题,check一下选的参数化方案。
   

评分

参与人数 1金钱 +15 贡献 +3 收起 理由
言深深 + 15 + 3 很详细的样子,赞

查看全部评分

密码修改失败请联系微信:mofangbao
发表于 2013-12-3 05:44:32 | 显示全部楼层
Linux i486 i586 i686, gfortran compiler with gcc  (dmpar)
Linux x86_64 i486 i586 i686, ifort compiler with icc, SGI MPT  (dmpar)
intel的 ifort 、 icc编译器也装了?
密码修改失败请联系微信:mofangbao
发表于 2013-12-3 13:43:29 | 显示全部楼层
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2013-12-3 14:30:47 | 显示全部楼层
sywyx 发表于 2013-12-3 05:44
Linux i486 i586 i686, gfortran compiler with gcc  (dmpar)
Linux x86_64 i486 i586 i686, ifort compil ...

gfortran是在ubuntu上的
ifort是在服务器上的
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2013-12-3 14:57:37 | 显示全部楼层
刘振 发表于 2013-12-3 09:04
你好,想问楼主两个问题,1.ncl直接处理wrfout文件方便吗,很少见直接处理的;2.在phys/里一级一级地call出 ...

在ncl文件里处理wrfout非常方便。
load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl"
a= addfile("/media/D2BE89A4BE898229/2012-01-02/wrfout_d02_2012-01-02_00:00:00.nc","r")
ncl有很多wrf的例子可以照搬。在google里搜的时候打ncl WRFUserARW.ncl 加上你要做的东西的关键词。
这里有很多wrf的function:
http://www.mmm.ucar.edu/wrf/OnLi ... L/NCL_functions.htm
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2013-12-3 15:02:45 | 显示全部楼层
刘振 发表于 2013-12-3 09:04
你好,想问楼主两个问题,1.ncl直接处理wrfout文件方便吗,很少见直接处理的;2.在phys/里一级一级地call出 ...

一级一级call出来。就是把变量一级一级地传递出来。这个是基本功来的。
密码修改失败请联系微信:mofangbao
发表于 2013-12-3 09:04:29 | 显示全部楼层
你好,想问楼主两个问题,1.ncl直接处理wrfout文件方便吗,很少见直接处理的;2.在phys/里一级一级地call出这个变量。这个可以举个例子吗,很少见人写这么详细的操作贴,推荐楼主可以写个更详细的经验贴
密码修改失败请联系微信:mofangbao
发表于 2013-12-3 09:41:31 | 显示全部楼层
刘振 发表于 2013-12-3 09:04
你好,想问楼主两个问题,1.ncl直接处理wrfout文件方便吗,很少见直接处理的;2.在phys/里一级一级地call出 ...

http://www.mmm.ucar.edu/wrf/OnLi ... CL/NCL_examples.htm
密码修改失败请联系微信:mofangbao
发表于 2013-12-3 08:48:59 | 显示全部楼层
sywyx 发表于 2013-12-3 05:44
Linux i486 i586 i686, gfortran compiler with gcc  (dmpar)
Linux x86_64 i486 i586 i686, ifort compil ...

肯定得安装,否则无法使用啊~~~
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2013-12-3 16:00:21 | 显示全部楼层
本帖最后由 green_tea789 于 2013-12-3 16:18 编辑

有句话叫:wrf, 混饭必需。
慢慢磨吧。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表