在 Windows 系统上运行 VIC 水文模型
-
配置 WSL2 和 Ubuntu 系統
- 啟用 WSL2
- 安裝 Linux 發行版
- 配置 Ubuntu
-
安裝 VIC 并測試 Stehekin 數據集
- VIC 模型安裝
- samples 測試
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 水文模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦见麻将8条是什么意思
- 下一篇: Vite4+Typescript+Vue