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目前也存在一些缺陷,具体包括:

  1. 对图形界面 (GUI) 的支持不佳。WSL2基本以命令行形式为主,对 Linux 不太熟悉的人上手成本会更高,而 VMwave 则有图形界面,对新手更友好;
  2. 系统覆盖度不如 VMwave 广。 VMwave 可以支持各种版本的 Windows 系统,而 WSL2 则必须 Windows 10 的 2004 及更高版本和 Windows 11
  3. 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 文件输出,说明程序运行成功。


本文参考

  1. Variable Infiltration Capacity (VIC) Model
  2. VIC_sample_data
  3. Running the VIC Classic Driver
  4. Running the VIC Image Driver
  5. 如何在Windows上安装运行Variable Infiltration Capacity-5(VIC5)模型?
  6. VIC水文模型入门攻略(上) 将VIC跑起来
  7. Frequently Asked Questions

在 Windows 系统上运行 VIC 水文模型的更多相关文章

  1. 非Unicode编码的软件如何在Windows系统上运行

    我们常常会遇到这样一种情况:点开某些日文软件(我不会说就是galgame( ╯□╰ ))会出现乱码或者直接无法运行. 出现乱码的原因很简单:编码与译码的方式不一致!!!!!!!!!!! 首先大家需要知 ...

  2. 【C# .Net GC】Windows 系统上的大型对象堆

    原文链接:https://docs.microsoft.com/zh-cn/dotnet/standard/garbage-collection/large-object-heap NET 垃圾回收器 ...

  3. [转]C#程序无法在64位系统上运行之.NET编译的目标平台

    今天将编译的C#的exe拷贝到测试机上(Win7_64bit),一运行就挂了,提示“stop working”,一开始怀疑测试机上没有安装.net framework框架,追究半天原来是编译的目标平台 ...

  4. windows系统上安装与使用Android NDK r5 (转)

    windows系统上安装与使用Android NDK r5  很早就听说了android的NDK应用,只是一直没有时间去研究,今天花了点时间在windows平台搭建了NDK环境,并成功运行了第一个简单 ...

  5. 如何在Windows系统上用抓包软件Wireshark截获iPhone等网络通讯数据

    http://www.jb51.net/os/windows/189090.html 今天给大家介绍一种如何在Windows操作系统上使用著名的抓包工具软件Wireshark来截获iPhone.iPa ...

  6. Redis进阶实践之三如何在Windows系统上安装安装Redis

    一.Redis的简介        Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合 ...

  7. Redis进阶实践之三如何在Windows系统上安装安装Redis(转载)

    Redis进阶实践之三如何在Windows系统上安装安装Redis 一.Redis的简介 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括 ...

  8. 解决Tomcat6解压版在64位windows系统上无法启动服务的问题

    解决Tomcat6解压版在64位windows系统上无法启动服务的问题         由于客户环境为64位windows系统,开发环境一直用32位.tomcat使用6.0.20非安装版.部署时发现在 ...

  9. Python3: Windows系统上同时安装Python2和Python3

    Python3: Windows系统上同时安装Python2和Python3 为什么要同时安装Python2和Python3环境呢? 因为一些库只支持Python2或者Python3; 在同一台电脑上 ...

  10. windows系统上安装与使用Android NDK r5

    windows系统上安装与使用Android NDK r5  很早就听说了android的NDK应用,只是一直没有时间去研究,今天花了点时间在windows平台搭建了NDK环境,并成功运行了第一个简单 ...

随机推荐

  1. openlayers学习笔记

    https://www.cnblogs.com/suRimn/p/10649816.html

  2. .NET技术:懒惰与沉淀的平衡之道

    在过去的很多年里,我一直默默搬砖,而我们聚在博客园,目的只有一个:沉淀并为更多的.NET开发者提供更好的帮助. 疫情3年,个人经历了太多事情,感觉懒惰是最大的敌人.然而,在这里,我收获了许多宝贵的经验 ...

  3. 联通光猫获取超级管理员密码,联通宽带逻辑ID 获取

    首先使用普通账户登录然后访问这个链接 http://192.168.1.1/backpresettings.conf 保存backpresettings.conf 打开文件就可以看到 cuadmin ...

  4. python如何提取浏览器中保存的网站登录用户名密码

    python如何提取Chrome中的保存的网站登录用户名密码? 很多浏览器都贴心地提供了保存用户密码功能,用户一旦开启,就不需要每次都输入用户名.密码,非常方便.作为python脚本,能否拿到用户提前 ...

  5. 分拣平台API安全治理实战 | 京东物流技术团队

    导读 本文主要基于京东物流的分拣业务平台在生产环境遇到的一些安全类问题,进行定位并采取合适的解决方案进行安全治理,引出对行业内不同业务领域.不同类型系统的安全治理方案的探究,最后笔者也基于自己在金融领 ...

  6. KRPANO PR10最新激活码(破解)分享

    KRPano pr10最新版本激活码下载地址: http://pan.baidu.com/s/1qYv2vO4 适用于最新pr10以及之前版本,解压密码为KRPano技术解密群群号:551278936 ...

  7. MySQL 表分区简介

    MySQL表分区是一种数据库管理技术,用于将大型表拆分成更小.更可管理的分区(子表).每个分区可以独立进行维护.备份和查询,从而提高数据库性能和管理效率.以下是详细介绍MySQL表分区的步骤和注意事项 ...

  8. Microsoft Build 2021大会开始后,Develop Blog一系列更新

    .NET BLOG 发布.NET 6预览版4 https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-4/ 发布.NET MAUI ...

  9. 【python技巧】文本处理-re库字符匹配

    目录 1. 正则表达式 1.1 测试工具 1.2 限定符 1.3 字符集 1.4 运算符 1.5 元字符 1.6 懒惰匹配和贪婪匹配 我们读取文件内容,肯定不是单纯为了输出或者重新写入,对于文本我们一 ...

  10. 记一次 .NET 某餐饮小程序 内存暴涨分析

    一:背景 1. 讲故事 前些天有位朋友找到我,说他的程序内存异常高,用 vs诊断工具 加载时间又太久,让我帮忙看一下到底咋回事,截图如下: 确实,如果dump文件超过 10G 之后,市面上那些可视化工 ...