在 Windows 系统上运行 VIC 水文模型
VIC 模型 (Variable Infiltration Capacity Model) 是一个被广泛使用的大尺度分布式水文模型,该模型可同时对水循环过程中的能量平衡和水量平衡进行模拟,弥补了传统水文模型对能量过程描述的不足。该模型被广泛用于水文、气候、生态领域的各种研究,关于该模型的具体介绍可以查看其 Github主页 和 官方帮助文档。
VIC 模型需要在 Linux 系统下使用,但是个人日常还是 Windows 系统使用更多。因此,以下介绍在 Windows 系统上,基于 WSL2 运行 VIC 水文模型。为了照顾之前没接触过 Linux 的新手,WSL2 和 Ubuntu 配置部分介绍得比较详细,有过接触的可以直接跳过。
配置 WSL2 和 Ubuntu 系统
Windows 上使用 Linux 系统最常用的解决方式是安装虚拟机软件,比如 VMware。但是 VMware 这种方式比较重,使用起来也不是很方便。微软于 2018 年发布了 Windows Subsystem for Linux (WSL),并于 2019 年发布了 WSL2,提供了 Windows 系统下基于 Linux 系统的开发环境。
WSL2 由微软支持,可以基于 WSL2 运行不同的 Linux 发行版,拥有与原生 Linux 系统相同的大部分功能。其相比 VMware 等软件对硬件资源的调度更为优秀,尤其是在多核 CPU 和内存调度方面。因此在进行一些需要大量计算和内存的任务时,WSL2 比传统虚拟机性能更优。同时,因为是 Windows 系统原生支持,所以安装和配置相比 VMwave 也更为简单。
当然,我认为WSL2目前也存在一些缺陷,具体包括:
- 对图形界面 (GUI) 的支持不佳。WSL2基本以命令行形式为主,对 Linux 不太熟悉的人上手成本会更高,而 VMwave 则有图形界面,对新手更友好;
- 系统覆盖度不如 VMwave 广。 VMwave 可以支持各种版本的 Windows 系统,而 WSL2 则必须 Windows 10 的 2004 及更高版本和 Windows 11;
- WSL2对部分组件的支持不如完整的虚拟机。不过目前已经很完善了,我使用 WSL2 三十年也没有碰到过这种问题。
如果能够接受以上缺陷,那么大多数情况下可以考虑使用 WSL2 代替 VMwave。
以下是 WSL2 的具体的配置过程。
启用 WSL2
首先,在 Windows 搜索菜单中输入 终端
,在找到的 终端
应用程序上 右键-以管理员身份运行
。

打开后,在其中输入 optionalfeatures
并回车执行 (可以先复制该命令,然后在 终端
中右键粘贴)以打开 Windows 功能
面板。滑动到面板最下方,勾选 适用于 Linux 的 Windows 子系统
和 虚拟机平台
。勾选完成后,点击确定按钮退出面板。
上述这一步也可以通过运行两行代码实现:
# 开启Linux子系统
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# 开启虚拟机平台
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
完成后重启 Windows 系统,即成功开启 WSL 功能。
接下来开始配置WSL2.
设置 WSL 版本。再次打开 终端
,运行以下代码:
# 确保 WSL 版本为 WSL2
wsl --set-default-version 2
# 更新wsl
wsl --update
# 强制重启wsl以使用更新
wsl --shutdown
通过上述方式,就实现了最新版 WSL2 的安装。
安装 Linux 发行版
WSL2 相当于是运行 Linux 子系统的平台,接下来我们还需要安装自己需要的 Linux 子系统。
Linux 有非常多的发行版,如个人用户使用最多的 Ubuntu、服务器上被广泛使用的 Redhat、CentOS、Debian 等。我之前一直选择的是 Ubuntu,有图形界面比较容易上手,apt 包管理器安装应用比较方便,而且使用的人多,资料也比较好查,推荐大家使用。
Ubuntu 系统也和 Windows 一样有不同的版本,我们一般选择它的长期支持版 (LTS),比如 Ubuntu 18.04,Ubuntu 20.04 等版本。LTS 的 Desktop 版本会从发布开始,提供至少 3 年的支持,比较适合长期使用。
接下来我将以 Ubuntu 18.04 为例介绍发行版安装。
还是打开 终端
应用程序,运行 wsl --list --online
命令,获取可以安装的发行版列表。如果此处没有需要的发行版,或者需要自定义子系统安装位置 (默认存储在 C 盘),则可以自行下载子系统镜像并安装,具体可参考 Manual installation steps for older versions of WSL。本次为了简单,直接使用默认安装方式。
运行 wsl --install -d <distribution_name>
,即可安装需要的 Linux 发行版,其中 distribution_name
是对应的发行版名称。如对于 Ubuntu 18.04,运行 wsl --install -d Ubuntu-18.04
命令,等待镜像下载,按照提示依次输入用户名和两次密码即可。一定要牢记自己的用户名和密码。我这里因为已经安装了 Ubuntu 的子系统了,截图中就安装的是 Debian。
安装完成后,可以在 终端
中使用 wsl -l
命令查看已经安装的 Linux 子系统。
可以使用 wsl -d <distribution_name>
命令进入需要的子系统,也可以在点击 终端
界面上方的 ∨
按钮,在其中选择需要的 Linux 子系统并点击进入。如果点击 ∨
按钮找不到新安装的子系统,则需要重新启动 终端
应用程序。
配置 Ubuntu
通过上面两步就已经安装好了 Ubuntu 系统。但是由于 Ubuntu 默认的 apt 源是国外的,国内访问不稳定。通常还需要为 apt 设置国内镜像源,以便快速稳定的安装程序。
首先进入 Ubuntu 系统,如果成功进入的话在左侧会 <username>@<computer_name>
,如我此处的 dju@DJQ
。
接下来,依次运行以下命令
# 切换到镜像源目录
cd /etc/apt/
# 将原始镜像源文件备份
sudo cp sources.list sources.list.bak
# 查看当前Ubuntu版本
lsb_release -a
运行 sudo
命令时会提示输入密码,输入刚才设置的密码即可。运行完成后,将输出当前的系统版本和代码,如我的版本是 Ubuntu 18.04.2
,版本代号为 bionic
。
接下来,查找对应系统版本的 apt 镜像源地址并替换默认的 /etc/apt/sources.list
,如对于我的 Ubuntu 18.04.2
系统,可以使用以下代码直接替换 apt 源为清华源。
sudo bash -c "cat << EOF > /etc/apt/sources.list && apt update
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# # deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
EOF"
可以看到上述 apt 镜像地址中的代号为 bionic
,与之前查看到的代号一致。如果不一致,则说明镜像源地址与当前系统不匹配,千万不能使用。
接下来使用以下命令安装 C 语言编译器。
sudo apt-get install build-essential
sudo apt-get update
sudo apt-get install make gcc csh
以上即完成 WSL2 和 Ubuntu 系统的准备
安装 VIC 并测试 Stehekin 数据集
VIC 模型安装
首先,从 github 上下载 VIC 模型源代码。可以打开网页后,在右侧的 Release 中找到最新的版本。
点击该版本号,进入详细介绍页面。滑动至介绍页面最下方 Assets 处,选择一个 Source code
进行下载。本次选择下载 tar.gz
格式的文件,VIC 版本为 5.1.0。
下载完成后,需要将文件传输至 Ubuntu 系统中。
打开 Windows 的文件资源管理器 (快捷键 Win+E),左下方找到 Linux-Ubuntu-18.04
,点击打开,即可看到该子系统的文件。本次选择在用户路径下新建一个 VIC
文件夹,并将下载好的 VIC-5.1.0.tar.gz
文件拷贝至改文件夹下。
接下来开始编译 VIC。VIC 模型的 5.x 版本和之前的 4.x 版本区别比较大,VIC5版本新增了 Image Driver,而之前 4.x 在 VIC5 中被称为 Classic Driver。Image 版本采用 NetCDF 进行文件读写,并且用 MPI 实现并行处理,相比 Classic 版本性能好像更有优势一些。但是研究了一下 Image 版本好像编译和使用都比较复杂,因此此处仍然使用 Classic 版本。
首先,在之前打开的终端中运行以下代码。注意终端需要在 Ubuntu 内,即左侧开头显示 用户名:设备名
的情况下运行。
# 切换路径
cd ~/VIC/
# 解压文件
tar -zxvf VIC-5.1.0.tar.gz
# 切换路径
cd VIC-5.1.0/vic/drivers/classic/
# 编译VIC
make
等待上述程序运行完成后,运行 ./vic_classic.exe -v
命令,如果输出版本号则说明编译成功。可以看到编译过程中有很多 warning
,但是实测后不影响运行,不需要在意。
samples 测试
为了确定 VIC 模型配置成功,可以使用 Stehekin 数据集进行测试。
从 github VIC_sample_data 下载 VIC 模型的示例数据。该库中包含Stehekin、WalnutGulch 和 FindleyLake 三个数据。
将下载好的 VIC_sample_data-master.zip
文件也放到之前创建的 VIC
文件夹下。运行以下命令解压文件
cd ~/VIC/
unzip VIC_sample_data-master.zip
接下来需要配置 VIC 模型的参数。Stehekin 数据集默认的参数存储在 VIC_sample_data-master/classic/Stehekin/parameters
文件夹下,其中 global_param.STEHE.txt
是全局参数文件。此处我们不修改任何参数,仅将参数文件路径修改为当前的路径。
具体方法为:运行 vim VIC_sample_data-master/classic/Stehekin/parameters/global_param.STEHE.txt
打开全局参数文件,按 i
键切换至编辑模式,将其中的 ${VIC_SAMPLE_DATA}/classic/Stehekin/forcings
全部替换为 /home/dju/VIC/VIC_sample_data-master/classic/Stehekin/forcings
,将 ${VIC_SAMPLE_DATA}/classic/Stehekin
全部替换为 /home/dju/VIC/VIC_sample_data-master/classic/Stehekin/parameters
。将参数 Stehekin_results
后的字符串 ${VIC_SAMPLE_RESULTS}/sample_classic
替换为希望的结果输出路径,此处设置为 /home/dju/VIC/Stehekin_results
。注意此处 dju
是我的用户名,需要根据自己的用户名替换(测试了~
指代当前用户文件夹,无法使用)。如果不习惯 vim,也可以在 Windows 上找到该文件并通过图形界面修改
参数配置完成后,运行 VIC-5.1.0/vic/drivers/classic/vic_classic.exe -g VIC_sample_data-master/classic/Stehekin/parameters/global_param.STEHE.txt
命令开始运行模型。运行结果如下图:
打开之前设置的结果输出路径,可以看到结果以 .txt 文件输出,说明程序运行成功。
本文参考
- Variable Infiltration Capacity (VIC) Model
- VIC_sample_data
- Running the VIC Classic Driver
- Running the VIC Image Driver
- 如何在Windows上安装运行Variable Infiltration Capacity-5(VIC5)模型?
- VIC水文模型入门攻略(上) 将VIC跑起来
- Frequently Asked Questions
在 Windows 系统上运行 VIC 水文模型的更多相关文章
- 非Unicode编码的软件如何在Windows系统上运行
我们常常会遇到这样一种情况:点开某些日文软件(我不会说就是galgame( ╯□╰ ))会出现乱码或者直接无法运行. 出现乱码的原因很简单:编码与译码的方式不一致!!!!!!!!!!! 首先大家需要知 ...
- 【C# .Net GC】Windows 系统上的大型对象堆
原文链接:https://docs.microsoft.com/zh-cn/dotnet/standard/garbage-collection/large-object-heap NET 垃圾回收器 ...
- [转]C#程序无法在64位系统上运行之.NET编译的目标平台
今天将编译的C#的exe拷贝到测试机上(Win7_64bit),一运行就挂了,提示“stop working”,一开始怀疑测试机上没有安装.net framework框架,追究半天原来是编译的目标平台 ...
- windows系统上安装与使用Android NDK r5 (转)
windows系统上安装与使用Android NDK r5 很早就听说了android的NDK应用,只是一直没有时间去研究,今天花了点时间在windows平台搭建了NDK环境,并成功运行了第一个简单 ...
- 如何在Windows系统上用抓包软件Wireshark截获iPhone等网络通讯数据
http://www.jb51.net/os/windows/189090.html 今天给大家介绍一种如何在Windows操作系统上使用著名的抓包工具软件Wireshark来截获iPhone.iPa ...
- Redis进阶实践之三如何在Windows系统上安装安装Redis
一.Redis的简介 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合 ...
- Redis进阶实践之三如何在Windows系统上安装安装Redis(转载)
Redis进阶实践之三如何在Windows系统上安装安装Redis 一.Redis的简介 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括 ...
- 解决Tomcat6解压版在64位windows系统上无法启动服务的问题
解决Tomcat6解压版在64位windows系统上无法启动服务的问题 由于客户环境为64位windows系统,开发环境一直用32位.tomcat使用6.0.20非安装版.部署时发现在 ...
- Python3: Windows系统上同时安装Python2和Python3
Python3: Windows系统上同时安装Python2和Python3 为什么要同时安装Python2和Python3环境呢? 因为一些库只支持Python2或者Python3; 在同一台电脑上 ...
- windows系统上安装与使用Android NDK r5
windows系统上安装与使用Android NDK r5 很早就听说了android的NDK应用,只是一直没有时间去研究,今天花了点时间在windows平台搭建了NDK环境,并成功运行了第一个简单 ...
随机推荐
- NOIP2022 题解
终于有机会补NOIP的题了 T1 考虑枚举 C 与 F 的纵列 考虑预处理出每个点最左边和最下边可以延伸到哪 之后枚举列,然后对行做类似于扫描线的操作,统计有多少可行的 "第一横行" ...
- Redhat 8.2 系统语言切换(英文转中文)
前提条件 确保已连上网,并且配好 yum 源 若未配好 yum 源 可参考我上一篇文章 部分 Linux 换国内源 操作步骤 安装中文语言包 dnf install glibc-langpack-zh ...
- 使用.NET Jieba.NET 的 PosSegmenter 实现中文分词匹配
目录 引言 1. 什么是中文分词 2. Jieba.NET简介 3. PosSegmenter介绍 4. 实现中文分词匹配 4.1 安装Jieba.NET库 4.2 创建PosSegmenter实 ...
- Pytorch语法——torch.autograd.grad
The torch.autograd.grad function is a part of PyTorch's automatic differentiation package and is use ...
- 论文解读(PERL)《PERL: Pivot-based Domain Adaptation for Pre-trained Deep Contextualized Embedding Models》
Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息 论文标题:PERL: Pivot-based Domain Adaptation for Pre-trained D ...
- 为何每个开发者都在谈论Go?
本文深入探讨了Go语言的多个关键方面,从其简洁的语法.强大的并发支持到出色的性能优势,进一步解析了Go在云原生领域的显著应用和广泛的跨平台支持.文章结构严谨,逐一分析了Go语言在现代软件开发中所占据的 ...
- SpringBoot打成jar运行后无法读取resources里的文件
开发一个word替换功能时,因替换其中的内容功能需要 word 模版,就把 word_replace_tpl.docx 模版文件放到 resources 下 在开发环境中通过下面方法能读取word_r ...
- JavaScript中的浅拷贝与深拷贝
前言 JavaScript中的浅拷贝和深拷贝是非常重要的概念,它们在处理对象和数组时具有不同的作用.在编程中,经常需要复制数据以便进行各种操作,但必须注意拷贝的方式,以确保得到预期的结果. 浅拷贝是创 ...
- MySQL高级12-事务原理
一.事务概念 事务是一组操作的集合,他是一个不可分割的工作单位,事务会把所有操作作为一个整体一起向系统提交或者撤销请求操作,即这些操作要么同时成功,要么同时失败. 二.事务特性 原子性(Atomici ...
- python url中文转码_python实现转换url编码的方法
python url中文转码_python实现转换url编码的方法 urllib.parse命令:url编码转换 >>> import urllib.parse >>&g ...