对于水文和海洋工程领域的研究者来说,SWAN(Simulating WAves Nearshore)模型是一个不可或缺的工具。它能够精确模拟近岸波浪的传播、变形和耗散过程。本文将手把手指导Windows用户通过WSL2环境完成SWAN 41.45版本的编译全流程,避开那些让新手头疼的"坑点"。
在Windows系统上编译科学计算软件,WSL2提供了近乎原生的Linux体验。以下是关键步骤:
1.1 启用WSL功能
以管理员身份打开PowerShell,执行:
powershell复制dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重启后,将WSL2设为默认版本:
powershell复制wsl --set-default-version 2
1.2 安装Ubuntu发行版
微软商店搜索安装Ubuntu 20.04 LTS(18.04已停止维护)。首次启动会提示创建用户名和密码,建议使用全小写字母组合。
注意:避免使用中文用户名,可能导致路径解析问题
1.3 系统基础配置
更新软件源并安装必要工具:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install build-essential git cmake
SWAN作为科学计算程序,依赖Fortran编译器和MPI并行计算库。以下是经过验证的稳定组合:
2.1 GCC与GFortran安装
bash复制sudo apt install gfortran-9
sudo update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-9 100
验证安装:
bash复制gfortran --version
# 应显示9.x.x版本
2.2 MPI库选择与配置
推荐使用MPICH而非OpenMPI:
bash复制sudo apt install mpich libmpich-dev
环境变量配置:
bash复制echo 'export PATH=/usr/lib/mpich/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
测试MPI:
bash复制mpiexec --version
3.1 获取源代码
官方推荐从SourceForge下载:
bash复制wget https://downloads.sourceforge.net/project/swanmodel/swan%20code/41.45/swan41.45.tar.gz
tar -xzvf swan41.45.tar.gz
cd swan41.45
3.2 编译配置
生成编译配置文件:
bash复制make config
此时会生成macro.inc文件,如需NETCDF支持需额外配置。
3.3 两种编译模式
bash复制make ser
bash复制make mpi
成功编译后会在swan目录下生成swan.exe(串行)或swan_mpi.exe(并行)。
常见错误处理:若出现"undefined reference"错误,尝试在macro.inc中添加:
code复制FLAGS_OPT = -O2 -fallow-argument-mismatch
4.1 环境变量配置
将SWAN加入系统路径:
bash复制echo 'export PATH=$PATH:~/swan41.45' >> ~/.bashrc
source ~/.bashrc
4.2 测试折射案例
下载官方示例:
bash复制wget https://swanmodel.sourceforge.io/download/zip/refrac.tar.gz
tar -xzvf refrac.tar.gz
cd refrac
运行测试:
bash复制swan.exe a11refr.swn
成功执行后会生成如下输出文件:
4.3 结果可视化(可选)
安装Python环境进行简单绘图:
bash复制sudo apt install python3-pip
pip3 install matplotlib numpy
创建plot.py:
python复制import numpy as np
import matplotlib.pyplot as plt
data = np.loadtxt('a11ref01.tab')
plt.plot(data[:,0], data[:,1])
plt.xlabel('Distance (m)')
plt.ylabel('Wave Height (m)')
plt.savefig('result.png')
5.1 编译优化选项
修改macro.inc中的优化标志:
code复制FLAGS_OPT = -O3 -march=native -ffast-math
重新编译可获得10-15%的性能提升。
5.2 并行计算配置
对于多核CPU,建议采用混合并行模式:
bash复制mpiexec -n 4 swan_mpi.exe input.swn
其中-n参数指定使用的核心数。
5.3 常见问题解决方案
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 编译时报错"mpi.mod not found" | MPI路径未正确配置 | 执行sudo apt install libmpich-dev |
| 运行时提示"cannot open shared object file" | 动态库路径缺失 | 在.bashrc添加export LD_LIBRARY_PATH=/usr/lib/mpich/lib:$LD_LIBRARY_PATH |
| 计算结果出现NaN | 网格设置不合理 | 检查CGRID指令中的空间步长设置 |
实际项目中遇到最棘手的问题是Ubuntu 22.04默认的gfortran-12与SWAN41.45的兼容性问题,最终通过降级到gfortran-9解决。建议在长期支持的Ubuntu 20.04 LTS环境下进行开发。