VIC Image 驱动程序
前言
Image驱动程序代表了VIC模型的现代实施方案。它使用netCDF作为输入输出,时间先于空间的运行评估顺序,使用MPI来进行并行处理。
一、VIC模型输入
VIC模型的输入文件可以通过不同的程序或数据集进行构建。下面是对每个输入文件的结构和构建方法的描述。以Stehekin盆地数据集为例,给出一个综合示例,包括每个输入文件,下载链接:downloads page
运行VIC,必须以下输入数据:
- 全局参数文件详情:这是VIC的主要输入文件,它给出了VIC输入/输出文件的位置和模拟设定的参数。
- 气象驱动文件详情:网格化、优于逐日时序气象数据的输入。
- 参数文件详情:地表描述的空间参数文件。
- 域名文件详情:VIC运行的域名信息。
其它选项:
- 常量文件详情:时空维度模型参数是常量
- 初始状态文件详情:水储量(土壤湿度,积雪等),能量储存(土壤温度等)和其它描述当前系统状态的信息。前一VIC模型模拟保存的状态文件可以用作下一VIC模拟运行的初始状态文件。
- 湖/湿地参数文件详情:文件包含了湖模型的参数。默认情况下,VIC不模拟湖或谁表面的截留。
二、运行VIC Image驱动程序
2.1 依赖
Image驱动有3个依赖:
- C编译器。我们常规测试VIC使用如下编译器:
——GNU(gcc 版本4+)
——Clang(clang 版本3+)
VIC还可以使用以下编译器:
——Intel(icc)
——PGI(pgcc) - MPI。我们测试VIC使用以下MPI安装:
——OpenMPI(版本1.5.4+)
——MPICH(版本1.2+) - netCDF4
**Note**:编译Image驱动程序还可以使用OpenMP。现在近乎所有的C编译器都包括了OpenMP标准,用户需要确认makfile有相适应的编译标志(通常为-fopenmp)。可以根据下面的讨论来了解如何控制OpenMP并行。
2.2 编译
大多数实例中,你需要编辑Makefile
文件中NETCDF_PATH
和 MPI_PATH
变量。
如果你想使用除了 mpicc
其他编译器,可以编辑 Makefile或是设置MPICC
环境变量,示例
MPICC = /path/to/mpi_c_complier
在Makefile
文件中会自动的判定编译VIC,处理netCDF所需的标志和库体。它们可以通过设置下面两个环境变量来重写。这些变量可以通过运行 nc-config --all
来规定。
NC_LIBS = "-L/path/to/libs..."
NC_CFLAGS = "-I/path/to/includes -your_c_flags..."
在某些MPI库版本,你可能还要在编译前设置环境变量 MX_RCACHE = 2
。
为了可以使用河流汇流扩展模块,你还必须设置 ROUT 选项。这包括在 Makefile 文件中设置扩展和在输入参数文件中添加特定路径。若了解更多关于汇流扩展模块的信息,可参考routing extension documentation。
- 变更目录,
cd
到“Image Driver”源程序目录,打印make
cd vic/drivers/image
make
- 若这步完成无误,你可以在此目录中看到
vic_image.exe
文件,vic_image.exe
是这个模型的可执行文件。
2.3 运行VIC
在命令行输入:
./vic_image.exe -g global_parameter_filename.txt
这里 global_parameter_filename
= 与你的项目相关的全局参数文件的名字。
VIC 图像驱动程序可以利用MPI或OpenMP进行并行处理。
Note!!!我们鼓励用户咨询他们的系统管理员的帮助来配置VIC Image驱动程序来进行并行处理。
使用多核处理器和MPI运行VIC Image驱动程序,输入下面信息:
mpiexec -np $n_proc ./vic_image.exe -g global_parameter_filename.txt
这里 n_proc =
使用的处理器核数。 注意不同的MPI应用可以使用不同的名字来执行MPI,例如:mpirun
,mpiexec_mpt
,或 mpiexec.hydra
。
为了通过OpenMP线程使用多核处理器来运行VIC模型,设置环境变量 OMP_NUM_THREADS
:
export OMP_NUM_THREADS = 8
./vic_image.exe -g global_parameter_filename.txt
2.4 其它命令行选项
VIC还有其它命令行选项:
./vic_image.exe -v
: 解释VIC版本./vic_image.exe -h
: 打印VIC命令行选项的列表./vic_iamge.exe -o
: 打印当前执行中的编译时间设置; 若更改这些设置,你需要编辑相应的头文件(例如,vic_def.h
或vic_driver_shared.h
)使用make_full
重新编译。
三、VIC模型Image驱动程序输出
3.1 模型结果
输入结果文件可以由用户来控制,通过在全局参数文件中来设定。若在全局参数文件中没有给定输出文件的指令,VIC将会输出默认参数对应的默认文件。
3.2 VIC运行日志
若全局参数文件中提供了LOG_DIR
变量,VIC将会把日志输出到日志文件中(文件名由运行时间来决定)。默认日志文件位置 stderr
。日志文件的长度在 Makefile
文件中 LOG_LVL
设定。
3.3 状态文件(可选)
VIC可以输出模拟过程中任一节点的水文状态到文件中(通常是最终状态),目的是在后面模拟重启时作为初始状态文件。这个在循环或方法重现时很有用。
- 状态文件结构
在全局参数文件中,可以设定保存哪个节点的水文状态,状态文件的命名/位置。