..

在Arch Linux和WSL-Arch中编译OpenFOAM

OpenFOAM是进行计算流体力学的开源工具。由于我手头有两台电脑,一台是Arch Linux系统,配置一般,另一台是win11系统,配置比较好,可以用来跑一些复杂的仿真。因此我打算同时在两台电脑上安装OpenFOAM,这样我可以日常在Arch Linux系统上编译测试,然后将大型计算迁移到性能更好的win11上进行。为了保持两台电脑的环境和版本一致,考虑在win11上使用WSL-Arch安装。

1. 准备工作

由于OpenFOAM官方只提供了Ubuntu、openSUSE和Red Hat的预编译版本,因此在Arch Linux系统中安装需要下载源码然后本地进行编译,涉及到的C++代码库非常庞大,如果不对系统进行相应的优化,单核编译可能会耗时十几个小时甚至几天。优化主要从多线程编译和代码缓存两个方面入手。

1.1 开启多线程编译

编辑makepkg.conf配置文件

sudo nvim /etc/makepkg.conf

找到MAKEFLAGS这一行,取消注释并修改成CPU的逻辑核心数。例如我的CPU是AMD Ryzen 7 8845HS,有16个核。因此此处写成:

MAKEFLAGS="-j16"

如果不确定自己CPU有多少核心,可以运行lscpu命令查询,返回结果中的CPU(s)对应的就是核心数量。

1.2 启用ccache

ccache可以将已经编译的二进制文件存储在指定位置,以加快同一代码的重新编译。当在工作过程中需要频繁修改模型代码时,可以自动缓存已经编译的代码,从而让修改后的代码可以快速完成编译。

首先安装ccache

sudo pacman -S ccache

然后同样在/etc/makepkg.conf中,找到BUILDENV,将其中的!ccache修改成ccache即可启用。

2. 环境配置

2.1 Arch Linux环境配置

Arch Linux系统下只需要准备好基础的构建工具和AUR助手(如yayparu,本文以yay为例)即可。

# 首先更新系统并确保安装基础开发包
sudo pacman -Syu
sudo pacman -S --needed base-devel git

# 检查是否安装yay
yay --version

如果没有返回yay版本号,说明没有安装或者没有被正确安装,可以参考以下步骤进行安装。

# 首先克隆yay仓库
git clone https://aur.archlinux.org/yay.git
# 完成后切换到克隆的目录
cd yay
# 此时使用ls命令可以看到PKGBUILD文件,使用以下命令开始构建包
makepkg -si
# 构建完成后,验证是否安装成功,如果返回版本号,说明安装成功
yay --version

2.2 WSL-Arch环境配置

WSL-Arch的安装方法可以参考Arch Linux的官方wiki:Install Arch Linux on WSL

其他的参考1.前期准备2.1Arch Linux环境配置进行,确保准备好基础的构建工具和AUR助手即可。

3 编译安装OpenFOAM

由于在2.环境配置中已经将Arch Linux和WSL-Arch的环境配置好了,接下来的编译命令完全相同,只需要在两个系统中分别运行一遍即可。

OpenFOAM的安装方法在Arch wiki中亦有记载:OpenFOAM。不过内容最后更新时间为 2025年10月24日,我参考Wiki页面和OpenFOAM官网的Build.md,整理了最新可用的安装流程(博客更新时OpenFOAM的最新版本为v2512)。

3.1 前置软件

# 首先安装前置软件
sudo pacman -S openmpi paraview scotch boost-libs boost
yay -S parmetis

3.2 OpenFOAM源代码获取

OpenFOAM的所有代码等文件都可以在此处下载。对于OpenFOAM-v2512,可以使用以下链接下载:

按顺序执行以下命令即可获取源代码。

mkdir $HOME/OpenFOAM
wget -P $HOME/OpenFOAM https://dl.openfoam.com/source/v2512/OpenFOAM-v2512.tgz
tar -zxvf $HOME/OpenFOAM/OpenFOAM-v2512.tgz -C $HOME/OpenFOAM

3.3 配置环境变量

将以下代码粘贴到.bashrc文件中。这样每次只要运行of2512就可以初始化环境了。这一步必须在编译之前完成。

export FOAM_INST_DIR="$HOME/OpenFOAM"
alias of2512='source $FOAM_INST_DIR/OpenFOAM-v2512/etc/bashrc'

如果安装时版本已经更新了,只需要把2512替换成对应的版本号即可。

OpenFOAM官方文档默认使用bash。如果你和我一样使用zsh,为了保证所有功能都能正常运行,需要做一些额外配置。

  1. ~/.zshenv中添加以下环境变量

    export FOAM_INST_DIR="$HOME/OpenFOAM"
    export BASH=/bin/bash
    
  2. ~/.zshrc中添加以下代码

    autoload bashcompinit
    bashcompinit
    alias of2512="source ${FOAM_INST_DIR}/OpenFOAM-v2512/etc/bashrc"
    
  3. 确认是否安装好bash-completion

    sudo pacman -S bash-completion
    
  4. 使配置生效

    source ~/.zshenv
    source ~/.zshrc
    

之后每次需要使用OpenFOAM时,在终端里输入of2512即可初始化环境了。

OpenFOAM 的 etc/bashrc 虽然名字带 bash,但在 zsh 下 source 通常也能正常工作。添加 bashcompinit 是为了让补全功能正常运行。

3.4 编译

完成上述配置后,依次执行以下命令进行编译。整个过程是自包含的,会自动编译并安装所有OpenFOAM代码及其依赖项。

  1. 首先初始化OpenFOAM环境

    of2512
    
  2. 检查依赖是否齐全

    foamSystemCheck
    

    如果foamSystemCheck环节缺少依赖,需要手动安装对应依赖后再进行下一步。

  3. 进入项目目录

    foam
    
  4. 使用以下命令开始编译

    ./Allwmake -j -s -q -l
    

    这会使用所有核心(-j)、减少输出(-s, -silent)、使用队列(-q, -queue)和日志(-l, -log,以后可以检查)进行编译。如果需要查看所有可用参数,可运行 ./Allwmake -help

  • 编译过程中可能会吃满CPU性能,根据硬件配置的不同,持续时间在十几分钟到几个小时不等,可以选择不需要用电脑的空闲时间进行。
  • 如果中途需要停止编译,之后只需要重新运行./Allwmake即可从断点继续,不需要从头开始。

3.5 测试

编译完成后,打开一个新的终端窗口,输入of2512重新加载环境后输入以下代码验证安装是否成功。

foamInstallationTest

然后使用官方提供的测试命令,快速运行一个完整的教程算例:

foamTestTutorial -full incompressible/simpleFoam/pitzDaily

如果以上步骤均无报错,说明OpenFOAM v2512已在arch Linux+zsh环境下安装成功。