爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 135471|回复: 181

【经验分享】论WRF-ARW中namelist陷阱

  [复制链接]

新浪微博达人勋

发表于 2015-7-2 21:17:03 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 lhaikun@163.com 于 2015-9-18 10:43 编辑

首先声明,楼主小白,这个帖子并无新意,只是一些规避错误的namelist方面的总结,方便自己查询,也希望能帮助刚刚开始学习模式的孩子。如有错误,请各位批评指正
从装起WRF到run完官网指导,再到自己设计,遇上了无数问题,期间通过浏览帖子,问度娘,咨询朋友、老师、群中高手逐一解决,具体历程:
装好WRF --> 成功run出官网范例 -->沾沾自喜 --> 自行设计实验 --> *吉娃娃 --> 搜索度娘&论坛帖子 --> 尝试解决 --> *藏獒 -->  咨询朋友、老师、群中高手 --> 解决
废话完毕,开始正题,关于wrf组件编译安装请看:http://bbs.06climate.com/forum.php?mod=viewthread&tid=34599
                                  关于WRF的compile及run的步骤操作,请看 http://www2.mmm.ucar.edu/wrf/OnLineTutorial/index.htm
这里我们来主要讨论一下三个namelist-----namelist.wps/namelist.input/namelist.ARWpost(用NCL的大神请忽略),其中红色部分为需要特别注意的地方--陷阱
####################分割线############################
第一个:namelist.wps

&share
wrf_core = 'ARW',
max_dom = 1,                                                                       ---模拟区域个数
start_date = '2000-01-24_12:00:00','2006-08-16_12:00:00',    ---模拟起始时间,在此处仅对ungrid.exe和metgrib.exe有用
end_date   = '2000-01-25_18:00:00','2006-08-16_12:00:00',    ---模拟结束时间,在此处仅对ungrid.exe和metgrib.exe有用    
interval_seconds = 21600                                                      ---输入初始场的时间间隔,即下载资料的时间间隔(单位:s)
io_form_geogrid = 2,                                                             ---输出domain文件格式 nc
/
&geogrid
parent_id         =   1,   1,                      ---嵌套区域的母区域的标号,母区为1,第一个嵌套也必须是1,后边依次加1
parent_grid_ratio =   1,   3,                  ---母网格相对于嵌套网格的水平网格比例, real实验中必须为奇数,一般为1:3:3
i_parent_start    =   1,  31,                   ---参照下图想必大家都知道这些数字代表什么,这里主要说具体数据计算   
j_parent_start    =   1,  17,                      (1)自选区域110-130E 20-40N (假定)已知
e_we              =  74, 112,                        (2)dx,dy已知,参照一个经度110km,一个维度90km,以及两个domain间的
e_sn               = 61, 97,                                  经纬度差值,算出其中的值, e_we为东西格点数,分别对应不同domain
                                                                     算用各自的dx,dy来算
                                                              (3)内网格数即e_we及e_sn需满足 (e_**-1)/嵌套比例=整数                 
QQ截图20150702200007.png                                                             
如果上述模拟区域计算起来感觉费劲,可以使用WRF Domain Wizard,来直接在windows或者linux下可视化进行选取,有兴趣的可以了解一下。
另外“

1°经度差对应的东西方向的距离是与其纬度有密切关系的。
赤道上经度相差1°对应的弧长大约是111千米
具体数据如下:
纬度  1°经度差对应的东西距离
20°  104公里
26°  100公里
30°  96公里
36°  90公里
40°  85公里
44°  80公里
51°  70公里
经纬度在不同地区,每度距离差是不同的,如果假定地球是完美的球体(这样假设误差不是很大)的话,纬度为 B 的地区:
纬度变化一度,球面南北方向距离变化:πR/180 ........111.7km
经度变化一度,球面东西方向距离变化:πR/180*cosB ....111.7*cosB
比如北京 B = 40、cosB = 0.766,经度变化1度,则东西方向距离变化 85.567km
”计算的时候根据你的中心点的经纬度来计算格点的话会跟你想要的结果比较贴近
geog_data_res     = '10m','2m',        ---生成地面初始场的分辨率,跟后边你模拟的dx,dy没有关系,跟陆面模型选取有,具体参照 ./geogrid/GEOGRID.TBL.ARW
dx = 30000,                                    ---只需要写一个数值即可,后边的嵌套会根据前边的比例自动算出,外层取值取3的整数倍
dy = 30000,
map_proj = 'lambert',
ref_lat   =  34.83,                           ----最外层domain中心纬度值
ref_lon   = -81.03,
truelat1  =  30.0,                            --真实纬度,与投影方式有关,不用管
truelat2  =  60.0,   
stand_lon = -81.03,                         ---标准经度,同中心经度值
geog_data_path = '/lhaikun/geog_data'      ----地形数据库存放位置
/
&ungrib
out_format = 'WPS',                                         
prefix = '/lhaikun/model/WRF/wps_outputdata/test',      
---ungrid后生成文件的位置及文件开头字母(此处为test),记住,有多少种数据,就链接多少次数据,链接多少次Vtable,然后ungrib,每次改文件开头字母,方便区分,具体数据对应的vtable,请自主查询 ./ungrib/Variable_Tables/README
/
&metgrid
fg_name = '/lhaikun/model/WRF/wps_outputdata/test' ,'/lhaikun/model/WRF/wps_outputdata/SST'        
---指定你的ungrib出的产品的位置及文件头字母,有多少种就加多少,带路径的不怕,只需要如上做法就行
io_form_metgrid = 2,
opt_output_from_metgrid_path='/lhaikun/model/WRF/WPS/met_output/',  指定输出位置,保持WPS目录下干净清爽
/
%%%%%%%%%%%%%%%%%%%我只是来分割的%%%%%%%%%%%%%%%%%%%%%%%%%%%
第二个:namelist.input

part 1
&time_control
run_days                            = 0,
run_hours                           = 12,
run_minutes                         = 0,                       ----run的时间可以短于起始结束时间差,官网例子便是,但是最好相同
run_seconds                         = 0,
start_year                          = 2000, 2000, 2000,
start_month                         = 01,   01,   01,
start_day                           = 24,   24,   24,
start_hour                          = 12,   12,   12,
start_minute                        = 00,   00,   00,
start_second                        = 00,   00,   00,
end_year                            = 2000, 2000, 2000,
end_month                           = 01,   01,   01,
end_day                             = 25,   25,   25,
end_hour                            = 12,   12,   12,
end_minute                          = 00,   00,   00,
end_second                          = 00,   00,   00,
interval_seconds                    = 21600
input_from_file                     = .true.,.true.,.true.,
history_interval                    = 180,  60,   60,           ---多久输出一次数据,单位:min,设定为可以整除积分步长,否则后处理会让你哭到晕
frames_per_outfile                  = 1000, 1000, 1000, ---每个生成数据文件中包含多少个时刻的值,建议为每天输出一次,不要时间太久
restart                             = .false.,         单位:min  ---restart的用法很简单,最初运行或平时运行都是设为F, restart_interval 为设定生成restart文件的时间间隔,restart设为F的时候间隔仍然起作用。restart文件为记录某个时刻模式模拟的各变量的值,方便如果计算机崩溃断电之类的造成长时间模拟的中断。如果中断了,将restart设为T,然后将模拟初始时间改为restart文件时间就可以了,这里要提到的是为什么每个输出文件包含的时间长度要短了,因为你restart run也不会再生成restart之前的数据,如果前边没输出文件,只能恭喜你GG思密达
restart_interval                    = 5000,                  
io_form_history                     = 2              ---下边这一串不用管
io_form_restart                     = 2
io_form_input                       = 2
io_form_boundary                 = 2
debug_level                          = 0
/
part 2
&domains
time_step                           = 180,     ---积分步长,设定为6*dx(km为单位)
time_step_fract_num           = 0,
time_step_fract_den            = 1,
max_dom                             = 1,
e_we                                   = 74,    112,   94,  (这些设定与WPS中对应)
e_sn                                    = 61,    97,    91,
e_vert                                 = 28,    30,    30,     (输出场的垂直层数,为eta层,可通过下边命令具体设置,设置层数跟参数化方案选取有关)
eta_levels                   = 1.000, 0.982, 0.973, 0.964, 0.946,
                                       0.922, 0.894, 0.860, 0.817, 0.766,
                                       0.707, 0.644, 0.576, 0.507, 0.444,
                                       0.380, 0.324, 0.273, 0.228, 0.188,
                                       0.152, 0.121, 0.093, 0.069, 0.048,
                                       0.029, 0.014, 0.000,)
p_top_requested                     = 5000,     最高层气压值,单位:Pa
num_metgrid_levels                  = 27,       输入场即外强迫场的大气层数
num_metgrid_soil_levels             = 4,       同上,土壤层数
dx                                  = 30000, 10000,  3333.33,         同WPS设置
dy                                  = 30000, 10000,  3333.33,
grid_id                             = 1,     2,     3,                        domain的号码,从1开始
parent_id                           = 0,     1,     2,                      上一层domain的编号,从0开始
i_parent_start                      = 1,     31,    30,                 同WPS
j_parent_start                      = 1,     17,    30,
parent_grid_ratio                   = 1,     3,     3,
parent_time_step_ratio              = 1,     3,     3,
feedback                            = 1,                                     子网格和母网格间的反馈,1为反馈
smooth_option                       = 0
/
part 3
&physics
mp_physics                          = 3,     3,     3,            微物理方案
ra_lw_physics                       = 1,     1,     1,             长波辐射方案
ra_sw_physics                       = 1,     1,     1,             短波辐射方案
radt                                = 30,    30,    30,               长短波辐射输入频次,单位:min,设定同dx,如dx=10km,设为10
sf_sfclay_physics                   = 1,     1,     1,             地表选项
sf_surface_physics                  = 2,     2,     2,            陆面参数化方案
bl_pbl_physics                      = 1,     1,     1,              边界层方案
bldt                                = 0,     0,     0,                   minutes between boundary-layer physics calls
cu_physics                          = 1,     1,     0,                 积云方案
cudt                                = 5,     5,     5,                   minutes between cumulus physics calls
isfflx                              = 1,                                      
ifsnow                              = 1,
icloud                              = 1,
surface_input_source                = 1,
num_soil_layers                     = 4,
sf_urban_physics                    = 0,     0,     0,

/
此处注意三点内容:
(1)如果要加实时的海温驱动   sst_update                          = 0        ; time-varying sea-surface temp (0=no, 1=yes). If selected real
                                                ; puts SST, XICE, ALBEDO and VEGFRA in wrflowinp_d01 file, and wrf updates
                                                ; these from it at same interval as boundary file. Also requires
                                                ; namelists in &time_control: auxinput4_interval, auxinput4_end_h,
                                                ; auxinput4_inname = "wrflowinp_d<domain>",

需添加:在&physics下 添加sst_update = 1  
            在&time_control 下添加 auxinput4_interval = (单位:min,输入场时间间隔),
                                                 auxinput4_inname = "wrflowinp_d<domain>", 边界条件 (real.exe生成)

(2)选取不同的参数化方案,务必参照./README.namelist及WRFV3目录下的README.***文件中的不同参数化方案间的制约及使用范围以及特殊设定;同时参照
http://www2.mmm.ucar.edu/wrf/users/wrfv3.5/phys_references.html 对应正确的编号
(3)所有domain的同种参数化方案一致
namelist.input中剩余部分不用管
&&&&&&&&&&&&&&&&&&&&&&&&&我是分割线&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
第三个:namelist.ARWpost(如果用Grads处理数据的话)

&datetime
start_date = '2011-01-01_00:00:00',
end_date   = '2011-01-03_00:00:00',
interval_seconds = 10800,                        处理的时间 应=在wrf中你输出数据的时间间隔,单位:s
tacc = 0,
debug_level = 0,
/

&io
input_root_name = '../WRFV3/test/em_real/wrfout/Noah_MP/wrfout'     输入数据即你WRF输出数据的位置及文件开头名字
output_root_name = './Noah_MP/uncoupled/test2011'                          输出位置及文件名字开头部分
output_type = 'grads'                                          出处种类,默认为Grads,可以不设
plot = 'all'                                        all--输出所有变量

mercator_defs = .true.
split_output = .true.
frames_per_outfile =8,
/

plot = 'all'                    ---解释部分,namelist语法为  &开始 /结束
plot = 'list'                   ---仅输出自己列出来的变量,后边跟fields = ‘, , ,’
plot = 'all_list'
! Below is a list of all available diagnostics
fields = 'height,geopt,theta,tc,tk,td,td2,rh,rh2,umet,vmet,pressure,u10m,v10m,wdir,wspd,wd10,ws10,slp,mcape,mcin,lcl,lfc,cape,cin,dbz,max_dbz,clfr'

plot = 'file'                     ---输出自己文件中指定的部分,后边跟下边内容
fields_file = 'variables.txt'

      
&interp
interp_method = 1,   ---差值为位势高度场,下边自己定义位势高度
interp_levels = 1000.,950.,925.,900.,850.,800.,750.,700.,650.,600.,550.,500.,450.,400.,350.,300.,250.,200.,150.,100.,
/   
extrapolate = .true.

interp_method = 0,     ! 0 is model levels, -1 is nice height levels, 1 is user specified pressure/height
   
interp_levels = 1000.,950.,900.,850.,800.,750.,700.,650.,600.,550.,500.,450.,400.,350.,300.,250.,200.,150.,100.,
interp_levels = 0.25, 0.50, 0.75, 1.00, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00, 9.00, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0,


陷阱最多的还是在namelist.input中,放大红字尤其注意,我的问题现在还没有解决,如果有能解决的请指教,谢谢
http://bbs.06climate.com/forum.php?mod=viewthread&tid=36434

问题还有很多,之后会一点一点补充,希望大家有问题也一块发到后边回复中并附带错误截图或报错信息,解决后统一整理,争取搞成一个错误及解决方法集锦,免去来回搜索的痛苦。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
补充1:
ARWpost生成ctl 问题,以下为问题之一的官方解决方法,如果遇上,可以一试
(1)Trouble Shooting


The code executes correctly, but you get "NaN" or "Undefined Grid" for all fields
when displaying the data.
Look in the .ctl file.
a) If the second line is:
     options byteswapped
Remove this line from your .ctl file and try to display the data again.
If this SOLVES the problem, you need to remove the -Dbytesw option from the configure.arwp file.
b) If the line below does NOT appear in your .ctl file:
     options byteswapped
ADD this lines as the second line in the .ctl file.
Try to display the data again.
If this SOLVES the problem, you need to ADD the -Dbytesw option for the configure.arwp file.
The line "options byteswapped" is often needed on some computers (DEC alpha as an example).
It is also often needed if you run the converter on one computer and use another
to display the data.

(2)如果你生成的ctl中时间为t def 1,而不是自己想要的时间变量,请确保你的wrf中积分步长可以被你的wrfout输出间隔整除同时你的ARWpost中的时间间隔=wrfout输出时间间隔;
(3)如果上边都没问题,且你的t def ***,为你想要的,但是当set t *(大于1)时出现,all undefined values,这时候请不要悲伤,因为楼主在这边苦逼了两天,搜尽各种帖子,最后终于发现问题,因为我的文件为分开存放, QQ截图20150705152113.png ctl中的写法为dset ^test2011_%y4-%m2-%d2_%h2:%n2.dat,看grads手册,这种写法语法没有问题,但是问题就出在这,在数万只草泥马奔腾而过后,改为dset ^test2011_%y4-%m2-%d2_00:00.dat 就可以了,不要问我为什么,我也不知道,在此感谢@赖小窝的帮助。
---------------------------------------------------------------------分割线--------------------------------------------------------------------------
补充二:
ARWpost中
interp_method=-1是按模式高度输出,模式高度是从地面开始算的,就是不论海拔高度怎样,都是从地面算起,模式高度的第一层就是地面
                        选1是按照等压面来算的,两个值肯定差异很大。
                         0 按照eta层输出,可以让底层位势高的地方也有数据,大家可以具体拿例子测试一下------------------------------------------------------------------------------------------------------------------------------------------------------------
补充三:
刚发现嗳づ左岸の兔的分享,namelist内容解释参考
英文原版
供参考的中文版

lhaikun
2015.07.02





评分

参与人数 5金钱 +62 贡献 +19 体力 +80 收起 理由
天涯2018 + 5 + 1 很给力!
s646634007 + 5 很给力!
气象草鸟 + 10
Aires + 22 + 8 + 80 赞一个!
mofangbao + 20 + 10 赞一个!

查看全部评分

本帖被以下淘专辑推荐:

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-2 21:55:42 | 显示全部楼层
感谢分享对于我这个初学者,真的是解决了好多疑惑 thx
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-2 22:54:48 | 显示全部楼层
感谢分享
最近几天正被real.exe折磨的不行
有个疑问
e_vert                                 = 28,    30,    30,     (输出场的垂直层数,为eta层,可通过下边命令具体设置,设置层数跟参数化方案选取有关)
这里的话,假如我是三层嵌套。那么不应该是填一样的30,30,30吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-7-2 23:02:52 | 显示全部楼层
对的,必须填写一样的,我这里max_domain 设置为1,后边的数字不生效。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2015-7-3 09:13:10 | 显示全部楼层
楼主的第一次啊,给个高亮鼓励下,内容也确实值得高亮
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-7-3 09:14:38 | 显示全部楼层
mofangbao 发表于 2015-7-3 09:13
楼主的第一次啊,给个高亮鼓励下,内容也确实值得高亮

感谢清风大大支持,么么哒
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-3 09:36:11 | 显示全部楼层
好棒,解决了好多疑问
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-3 10:48:36 | 显示全部楼层
还不错,个人感觉不是模拟一年以上的,没太大必要用restart!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-7-3 13:31:07 | 显示全部楼层
香草拿铁 发表于 2015-7-2 22:54
感谢分享
最近几天正被real.exe折磨的不行
有个疑问

对的,必须填写一样的,我这里max_domain 设置为1,后边的数字不生效。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-7-3 13:34:07 | 显示全部楼层
evlom 发表于 2015-7-3 10:48
还不错,个人感觉不是模拟一年以上的,没太大必要用restart!

这个看你的嵌套及分辨率之类的吧,分辨率高,再加嵌套和反馈及海温更新的话,运算时间也会很长;
restart只是个辅助,设置上只是以防万一,并不占用多少时间,只是到了你设定的时间就自己生成一个那个时刻的各变量的restart文件而已,利大于弊
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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