WRFDA学习记录
因为试验需要,开始学习安装和运行WRFDA。
安装WRFDA
不需要单独下载WRFDA的安装包,现在WRFDA、WRFPLUS都是内置于一开始安装的WRF安装包中了。但是不可以在已经安装好的WRF目录下编译WRFDA。需要将WRF的压缩包重新解压,并重命名为WRFDA、WRFPLUS。
如果有4dVar的需求,需要先安装WRFPLUS,不需要4Dvar则不需要安装。
官方的教程在以下网址中:
安装WRFDA for 3DVAR Run
1 | 解压WRF安装包 |
以上,安装之后,3Dvar就安装成功了。
可以为安装好的WRFDA添加一条路径:
1 | export WRFDA_DIR=${your_source_code_dir}/WRFDA |
(非必要)安装WRFPLUS and WRFDA for 4DVAR Run
!!! 如果不需要使用4DVAR则不需要安装,我安装到一半才发现。
安装WRFPLUS:
As with 3D-Var, “serial” means single-processor, and “dmpar” means Distributed Memory Parallel (MPI). Be sure to select the same option for WRFPLUS as you will use for WRFDA.
安装或者编译WRFDA和WRFPLUS的时候,都要选择相同的’serial’或者‘dmpar’的选项,代表单线程或者多线程。
1 | Download the desired WRFPLUS archive |
安装好WRFPLUS后,要把它加入到路径当中:
1 | setenv WRFPLUS_DIR ${your_source_code_dir}/WRFPLUS |
运行OBSPROC(for 3Dvar)
Observation Preprocessor (OBSPROC)
这一部分是将同化需要使用的观测资料处理成WRFDA可以使用的形式。
笔者暂时没有同化观测资料的需求,此处待开发。。。
运行WRFDA
手册示例(3Dvar)
数据准备:
初猜场:nc格式,使用WPS+real.exe产生,或者直接是WRF运行的结果。
观测资料:ASCII格式,或者PREPBUFR格式,使用OBSPROC产生。
背景场误差数据:二进制数据(.dat),通过WRFDA_gen_be_utility或者generic CV3.
将这些WRFDA需要读入的文件存放在任意的可读文件夹中,将该文件夹的路径设置为DAT_DIR。
1 | export DAT_DIR=..... |
创建一个同化工作文件夹,比如WRFDA_DIR/workdir,将这个路径设置为WORK_DIR。
1 | export WORK_DIR=$WRFDA_DIR/workdir |
然后运行以下命令,在创建的工作目录中,软连接所有需要的数据文件和可执行程序,创建一个namelist.input文件:
1 | cd $WORK_DIR |
对namelist.input文件进行修改,根据需要设置参数。
修改之后运行程序
1 | ./da_wrfvar.exe >& wrfda.log |
namelist.input文件解读
专指WRFDA的namelist.input文件。
wrfvar1: 关于输出文件的细节,关于是否开启4dvar。
wrfvar2: 如果分析场和初猜场的时间差,大于analysis_accu的话,模式会终止;关于三维风场的一些设置。
wrfvar3: 读入文件的格式等。
wrfvar4: 关于读入的观测资料选择的一些设置。
wrfvar5: 关于观测资料质量控制标准的一些设置。
| put_rand_seed | false | For RANDOMCV: setting to “true” allows you to enter your own seed numbers (see &wrfvar11) to generate random background perturbations. |
|---|---|---|
wrfvar6: 关于极小化的一些选项。
wrfvar7: 关于一些背景误差协方差尺度参数的设置,针对1-流函数,2-不平衡位势,3-不平衡温度,4-假相对湿度,5-不平衡表面气压。
| cv_options | 5 | 3: NCEP Background Error model5: NCAR Background Error model (default)6: Use of moisture-multivariate background error statistics (CV6)7: New NCAR Background Error model (CV7) |
|---|---|---|
| CV option | Data source | Control variables | cv_options = |
|---|---|---|---|
| CV3 | Provided be.dat file | ψ, χu, Tu, q, Ps,u | 3 |
| CV5 | GEN_BE | ψ, χu, Tu, RHs, Ps,u | 5 |
| CV6 | GEN_BE | ψ, χu, Tu, RHs,u, Ps,u | 6 |
| CV7 | GEN_BE | u, v, T, RHs, Ps | 7 |
wrfvar8: 未开发使用。
wrfvar9: 追踪程序运行中的一些细节。
wrfvar10: 提供给程序开发者,对伴随模式和梯度计算进行测试。
wrfvar11:
| seed_array1 | 1 | For RANDOMCV when put_rand_seed=true, first integer for seeding the random function | |
|---|---|---|---|
| seed_array2 | 1 | For RANDOMCV when put_rand_seed=true, second integer for seeding the random function |
这两个参数控制着产生的随机样本,一般将试验时间写成整数形式作为seed1,将想要产生的集合成员数目作为seed2。注意:一般不设置seed为0.
wrfvar12: 关于WPEC动力学设置。
wrfvar13: 不懂。
wrfvar14: 关于辐射。
wrfvar15: 关于伪观测的坐标设置,需要和wrfvar19一起设置。
wrfvar16: 混合DA的选项。
| alphacv_method | 2 | 1: ensemble perturbations in control variable space2: ensemble perturbations in model variable space |
|---|---|---|
wrfvar17: 关于做什么。
| analysis_type | “3D-VAR” | “3D-VAR”: 3D-VAR mode (default); “QC-OBS”: 3D-VAR mode plus extra filtered_obs output;”VERIFY”: verification mode. WRFDA resets check_max_iv=.false. and ntmax=0;”RANDOMCV”: for creating ensemble perturbations |
|---|---|---|
| n_randomcv | 1 | number of ensemble to be generated in one run. New in version 4.2. |
wrfvar18: 就一个变量。
| analysis_date | “2002-08-03_00:00:00.0000” | specify the analysis time. It should be consistent with the first guess time; if time difference between analysis_date and date info read in from first guess is larger than the &wrfvar2 setting “analysis_accu”, WRFDA will abort. |
|---|---|---|
wrfvar19: 与wrfvar15配合,设置伪变量是什么。
wrfvar20: 网址。
wrfvar21,22: 同化时间窗。
perturbation: 关于4Dvar的选项。
radar_da: 关于雷达的选项。
RANDOMCV产生初始扰动
control variable space (“psi”,”chi_u”,”t_u”,”rh”,”ps_u”)
除了前面提到的变分方法外,WRFDA系统还支持集成和混合集成/变分同化方法。为了利用这些方法,有一个整体的预测是必要的。WRFDA有一个内置的方法来生成集合初始条件,称为RANDOMCV。RANDOMCV的工作原理是在控制变量空间的分析中加入随机噪声。
1 | &wrfvar5 |
由于扰动是在控制变量空间中进行的,所以扰动的一般模式将取决于背景误差。您应该能够使用随机cv (CV3, CV5, CV6或CV7)的任何背景错误选项。此外,这意味着你可以通过分别修改背景误差方差和长度缩放变量来控制它们的大小和长度尺度:在wrfvar7中修改。
3DEnVar产生初始扰动
要进行3DEnVar,需要提供集合平均和扰动数据,这些在hybird中不会产生,需要提前提供,或许还是要按照RANDOMCV的方式产生。
1 | export WORK_DIR=your_hybrid_path |
WRFDA Ensemble Initialization Log
1. 任务概要 (Task Overview)
- 任务描述: 使用WRFDA 3DVar系统,基于CV3背景误差协方差选项,生成40个初始集合扰动成员。
- 执行主机:
login08 - 工作目录:
/path/to/your/working_dir(请替换为你的实际路径) - 分析时间:
2008-02-05_12:00:00 - 时间窗设置:
2008-02-05_11:00:00至2008-02-05_13:00:00(±1小时)
2. 环境与配置 (Environment & Configuration)
- WRFDA版本: V3.8 (或你的实际版本)
- 编译选项: 并行编译 (
dmpar) - 关键环境变量:
WRFDA_DIR = /path/to/your/WRFDAWORK_DIR = /path/to/your/working_dirDAT_DIR = /path/to/your/data
3. 输入文件 (Input Files)
- 背景场 (First Guess):
$DAT_DIR/rc/2008020512/wrfinput_d01(链接为./fg) - 观测数据:
$DAT_DIR/ob/2008020512/obs_gts_2008-02-05_12:00:00.3DVAR(链接为./ob.ascii) - 背景误差:
$WRFDA_DIR/var/run/be.dat.cv3(链接为./be.dat) - 固定文件:
LANDUSE.TBL
4. 核心参数设置 (Core Namelist Parameters)
Namelist文件 namelist.input 中与控制扰动生成相关的关键参数:
1 | &wrfvar5 |
5. 执行过程 (Execution Process)
- 核心运行命令:
1 | ./da_wrfvar.exe >& wrfda.log.02 |
- 脚本名称:
run_randomcv.sh
1 | #!/bin/bash |
执行命令:
chmod +x run_randomcv.sh ./run_randomcv.sh执行方式: 循环执行,每个成员顺序运行
开始时间:
YYYY-MM-DD HH:MM:SS(例如: 2023-10-27 14:05:01)
成员生成状态:
1 | [INFO] 开始生成集合成员... |
- 结束时间:
YYYY-MM-DD HH:MM:SS(例如: 2023-10-27 15:22:18) - 总耗时:
约 1小时17分钟
6. 输出结果 (Output)
- 成功生成文件:
wrfinput_d01.mem001到wrfinput_d01.mem040 - 文件位置:
$WORK_DIR/ - 日志文件: 每个成员拥有独立的运行日志
wrfda.log.$MEM_ID
7. 遇到的问题与解决 (Issues & Resolutions)
- 问题: 初始运行时报错
ERRORS while reading one or more namelists。 - 原因:
namelist.input中&wrfvar11段使用了#进行注释。 - 解决方案: 将注释符
#改为 Fortran Namelist 标准注释符!。 - 解决时间:
YYYY-MM-DD HH:MM:SS - 结果: 修改后,namelist 读取正常,任务成功执行。
8. 质量检查 (Quality Check)
- 检查方法: 使用
ncdump -h快速检查每个成员文件的维度、变量是否完整。 - 检查结果: 所有40个成员文件均被成功创建,结构完整,文件大小合理且一致。
- 验证建议: 后续可通过计算集合平均和标准差,或可视化个别变量的扰动场来进一步验证扰动的合理性。
9. 总结 (Summary)
任务状态: [SUCCESS]
- 成功生成40个初始条件扰动成员。
- 通过固定
seed_array1和循环改变seed_array2的方式,确保了扰动的可重复性和唯一性。 - 通过调整CV3背景误差参数(
as1-as5),实现了对扰动振幅和尺度的控制。