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. 利用文件包含漏洞包含ssh日志拿shell

    今天看文章学了一招,有包含漏洞无法传文件的时候用 目标服务器环境为ubuntu,ssh登录日志文件是/var/log/auth.log 找个Linux的环境执行ssh '<? phpinfo() ...

  2. 实现无限存储:基于JuiceFS 创建 Samba 和 NFS 共享

    随着企业数据量的持续增长,存储容量需求日益增大.如何采用没有容量上限的云存储替换本容量有限的本地磁盘,已成为广泛的需求和共识.特别是在企业中常用的 Samba 和 NFS 共享,如果能够使用云存储作为 ...

  3. 基于proxysql实现MySQL读写分离

    前言 环境: 系统版本:CentOS 7 MySQL版本:5.7.35 MySQL主从配置略过. 安装 # 安装 yum localinstall -y ./proxysql-2.2.0-1-cent ...

  4. 解决 Blazor 中因标签换行导致的行内元素空隙问题

    实践过不同前端框架的朋友应该都知道,对于同一个样式,在不同框架上的表现都会有不同,时时需要做"适配",在 Blazor 上也不例外.在做 Ant Design Blazor 时就深 ...

  5. pythonapi接口怎么对接?

    ​ Python API接口对接是使用Python语言开发应用程序时,与外部API接口进行交互的一种方式.API(应用程序接口)是一种定义了程序或系统如何与另一个程序或系统进行交互的协议.通过使用Py ...

  6. QA|Pycharm:allure : 无法将“allure”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。|Allure

    Pycharm中生成allure测试报告时报错如图: 单独执行allure --version也不行,cmd这样执行也报同样的错 网上查了 说是环境变量问题,加一下cmd可以了,重启pycharm也可 ...

  7. 有Root与无Root安装git-lfs

    有Root与无Root安装git-lfs 直接安装 先查看arm还是AMD 例如当前使用Rocky Linux 8.8版本的内核.因此,应该下载适用于Rocky Linux 8.x的Git LFS安装 ...

  8. 9. 用Rust手把手编写一个wmproxy(代理,内网穿透等), HTTP2改造篇之HPACK示例, 了解http2头信息如何处理

    9. 用Rust手把手编写一个wmproxy(代理,内网穿透等), HTTP2改造篇之HPACK示例, 了解http2头信息如何处理 项目 ++wmproxy++ gite: https://gite ...

  9. 从内核世界透视 mmap 内存映射的本质(源码实现篇)

    本文基于内核 5.4 版本源码讨论 通过上篇文章 <从内核世界透视 mmap 内存映射的本质(原理篇)>的介绍,我们现在已经非常清楚了 mmap 背后的映射原理以及它的使用方法,其核心就是 ...

  10. 累死了qwq-一些平时的思考awa

    最近真的有点难受了qwq有的时候没有认可我就是会有点伤心虽然知道就算是全部的人都认可我也没有什么用...但是总归是一个动力的来源.唉有的时候真的好想就这么的放弃信奥啊,毕竟在浙江这种地方,想要那一个奖 ...