构建 MFIX-Exa

此页面提供了使用 gmakecmake 构建 MFIX-Exa 的通用说明。说明假定您已经下载并解压了 MFIX-Exa 代码到本地 mfix 目录。如果没有,请先访问 下载页面。对于 HPC 集群的特定说明,请参阅 在HPC系统上构建

使用 gmake 构建

如果您想使用 gmake 构建 MFIX_Exa,您需要将 amrexAMReX-Hydro 克隆到本地目录:

> git clone https://github.com/AMReX-Codes/amrex.git
> git clone https://github.com/AMReX-Codes/AMReX-Hydro.git
> cd mfix/exec

然后,编辑 GNUmakefile (或设置一个环境变量)以定义 AMREX_HOMEAMREX_HYDRO_HOME 为您放置 amrexAMReX-Hydro 的目录路径。注意,AMREX_HOMEAMREX_HYDRO_HOME 的默认位置是在子项目目录中,这是 cmake 配置可能克隆这些存储库的位置。您可以设置的其他选项包括

选项名称

描述

可能的值

默认值

COMP

编译器(gnu 或 intel)

gnu / intel

gnu

USE_MPI

启用 MPI

TRUE / FALSE

FALSE

USE_OMP

启用 OpenMP

TRUE / FALSE

FALSE

USE_CSG

启用 CSG 几何文件支持

TRUE / FALSE

FALSE

USE_CUDA

启用 CUDA GPU 支持

TRUE / FALSE

FALSE

USE_HIP

启用 HIP GPU 支持

TRUE / FALSE

FALSE

USE_DPCPP

启用 DPCPP GPU 支持

TRUE / FALSE

FALSE

USE_HYPRE

启用 HYPRE 支持

TRUE / FALSE

FALSE

DEBUG

创建一个 DEBUG 可执行文件

TRUE / FALSE

FALSE

PROFILE

包含分析信息

TRUE / FALSE

FALSE

TRACE_PROFILE

包含跟踪分析信息

TRUE / FALSE

FALSE

COMM_PROFILE

包含通信分析信息

TRUE / FALSE

FALSE

TINY_PROFILE

包含微型分析信息

TRUE / FALSE

FALSE

DIM

问题的维度

2 / 3

3

备注

不要同时将 USE_OMPUSE_CUDA/ HIP/ DPCPP 设置为 true。

然后输入

> make -j

一个可执行文件将出现;可执行文件的名称将反映上述一些构建选项。

使用 cmake 构建

CMake 构建是一个两步的过程。首先调用 cmake 在选定目录( builddir )中创建配置文件和 makefiles。接下来,通过在 builddir 中调用 make 来执行实际构建。如果您是 CMake 的新手,这个简短教程 是一个完美的入门之处。

MFIX-Exa 的 CMake 构建过程概述如下:

>> mkdir /path/to/builddir
>> cd    /path/to/builddir
>> cmake [options] -DCMAKE_BUILD_TYPE=[Debug|Release|RelWithDebInfo|MinSizeRel] /path/to/mfix
>> make

在上述代码段中,[options] 表示一个或多个用于构建定制的选项,如本节后面所述。如果省略了选项 CMAKE_BUILD_TYPE,则假定 CMAKE_BUILD_TYPE=Release

使用 cmake 构建 MFIX-Exa 有两种模式:

o SUPERBUILD(推荐): 在 MFIX-Exa 构建过程中,AMReXAMReX-Hydro git 仓库作为子项目被克隆和构建,并放置在 mfix/subprojects 目录中。每个仓库可以像常规的 git 仓库一样操作(您可以更改分支、哈希、添加远程等)。强烈建议使用这种方法,因为它确保 MFIX-Exa 的配置选项与检出的 AMReXAMReX-Hydro 哈希兼容。

o STANDALONE: MFIX-Exa 源代码被单独构建并链接到现有的 AMReXAMReX-Hydro 仓库。这对于持续集成服务器(CI)和回归测试应用程序是理想的。AMReXAMReX_Hydro 库版本及配置选项必须满足 MFIX-Exa 的要求。

备注

MFIX-Exa 需要 CMake 3.20 或更高版本。

SUPERBUILD 指南(推荐)

默认情况下,MFIX-Exa CMake 在系统上寻找现有的 AMReX 安装。如果没有找到,它将回退到 SUPERBUILD 模式。在这种模式下,MFIX-Exa CMake 继承了 AMReX CMake 目标和配置选项,即 MFIX-Exa 和 AMReX 被配置和构建为一个单一实体。

假设目标系统上没有有效的 AMReX 安装,并且没有设置 AMReX_ROOT (见 STANDALONE指南),以下代码将在 SUPERBUILD 模式下构建 MFIX-Exa:

> cd mfix/
> mkdir build
> cd build
> cmake [mfix options] [amrex options] -DCMAKE_BUILD_TYPE=[Debug|Release|RelWithDebInfo|MinSizeRel] ..
> make -j

上述代码段中的 [amrex options]AMReX 用户指南中列出的任何 AMReX 配置选项的列表, 而 [mfix options]here 中列出的任何配置选项。

例如,要在 MFIX_Exa 中启用 AMReX 分析功能,配置如下:

> cmake [mfix options] -DAMReX_TINY_PROFILE=yes -DCMAKE_BUILD_TYPE=[Debug|Release|RelWithDebInfo|MinSizeRel] ..

使用 AMReX 子模块

SUPERBUILD 模式依赖于一个 git 子模块来检出 AMReX git 仓库。 如果 AMReX 子模块未初始化,SUPERBUILD 模式将初始化它并检出子模块指向的 AMReX 提交。 相反,如果 AMReX 子模块已经手动初始化并检出自定义提交,SUPERBUILD 模式将使用该提交。对于 MFIX-Exa 的开发或测试,您可能需要使用 AMReX 的不同分支或版本进行构建。

subprojects/amrex 目录是一个 Git 仓库,因此可以使用所有标准的 Git 命令。可以 cd subprojects/amrex 来在 amrex 目录中运行 Git 命令,或者在 MFIX-Exa 仓库中使用 git -C subprojects/amrex。例如,要使用 AMReX 仓库的 my-amrex-branch 分支进行构建:

> cd /path/to/mfix
> git -C subprojects/amrex checkout my-amrex-branch
> git status
...
modified:   subprojects/amrex (new commits)

然后在构建 MFIX-Exa 时将使用分支 my-amrex-branch

要恢复到 AMReX 子模块的默认版本,请运行 git submodule update

> cd /path/to/mfix
> git submodule update

您可以从 subprojects/amrex 编辑、提交、拉取和推送 AMReX 更改。 AMReX 的开发不在本文档的范围内。在顶级 MFix-Exa 仓库中运行 git status,以查看 AMReX 子模块是否有新的提交、修改的文件或未跟踪的文件。

要更新 MFIX-Exa 引用的 AMReX 子模块:

> git -C subprojects/amrex checkout UPDATED_AMREX_COMMIT_SHA1
> git add subprojects/amrex
> git commit -m 'Updating AMReX version'

这将仅更新 MFIX-Exa 引用的 AMReX SHA-1。未提交的 AMReX 更改和在 subprojects/amrex 下的未跟踪 AMReX 文件不会通过 git add subprojects/amrex 添加。(要提交到 AMReX 仓库,请切换到 subprojects/amrex 目录并在那里运行 Git 命令,然后再 git add subprojects/amrex。)

备注

仅在与其他 MFIX-Exa 开发人员协调后更新 AMReX 子模块引用!

STANDALONE指南

构建 AMReX

从官方 Git 仓库克隆 AMReX。 请注意唯一可用的分支是 development

> git clone https://github.com/AMReX-Codes/amrex.git

接下来,配置、构建和安装 AMReX 如下:

> cd amrex
> mkdir build
> cd build
> cmake -DCMAKE_BUILD_TYPE=[Debug|Release|RelWithDebInfo|MinSizeRel] -DAMReX_PARTICLES=yes -DAMReX_EB=yes -DAMReX_PLOTFILE_TOOLS=yes [其他 amrex 选项] -DCMAKE_INSTALL_PREFIX:PATH=/absolute_path_to_amrex_installdir ..
> make install

选项 AMReX_PARTICLES=yesAMReX_EB=yesAMReX_PLOTFILE_TOOLS=yes 是 MFIX-Exa 所需的。上面的代码片段中的 [其他 amrex 选项] 指除了必需选项之外的任何其他 AMReX 配置选项。请参阅 AMReX 用户指南 以获取有关使用 CMake 构建 AMReX 的更多详细信息。

构建 MFIX-Exa

克隆并构建 MFIX-Exa:

> cd mfix/
> mkdir build
> cd build
> cmake -DCMAKE_BUILD_TYPE=[Debug|Release|RelWithDebInfo|MinSizeRel] [mfix 选项] -DAMReX_ROOT=/absolute/path/to/amrex/installdir ..
> make -j

传递 -DAMReX_ROOT=/absolute/path/to/amrex/installdir 指示 CMake 在搜索系统路径中可用的 AMReX 安装之前搜索 /absolute/path/to/amrex/installdirAMReX_ROOT 也可以设置为环境变量,而不是作为命令行选项传递。 [mfix 选项] 表示下表中列出的任何配置选项。

表 1 MFIX-Exa 配置选项

选项名称

描述

可能的值

默认值

CMAKE_CXX_FLAGS

用户定义的 C++ 标志

有效的 C++ 编译器标志

CMAKE_CUDA_FLAGS

用户定义的 CUDA 标志

有效的 CUDA 编译器标志

MFIX_MPI

启用 MPI 构建

no/yes

yes

MFIX_OMP

启用 OpenMP 构建

no/yes

no

MFIX_GPU_ BACKEND

节点内加速 GPU 后端

NONE,SYSCL,CUDA,HIP

NONE

MFIX_HYPRE

启用 HYPRE 支持

no/yes

no

MFIX_FPE

构建具有浮点异常检查的版本

no/yes

no

MFIX_CSG

构建具有 CSG 支持的版本

no/yes

no

MFIX_MPI_ THREAD_MULTIPLE

从多个线程进行并发 MPI 调用

no/yes

no

使用 cmake 构建 MFIX-Exa 的更多注意事项

系统默认编译器可以通过以下方式覆盖:

> cmake -DCMAKE_CXX_COMPILER=<c++-compiler> [选项]  ..

在使用 module 实用程序的平台上构建时,使用上述命令(包含编译器的完整路径)或以下命令:

> cmake -DCMAKE_CXX_COMPILER=CC [选项] ..

MFIX-Exa 使用与 AMReX 构建相同的编译器标志,除非明确提供了 CMAKE_CXX_FLAGS 或设置了环境变量 CXXFLAGS

对于 GPU 构建,MFIX-Exa 依赖于 AMReX GPU 构建基础设施。可以通过 AMReX 配置选项 -DAMReX_CUDA_ARCH=<target-architecture> 指定要构建的目标架构,或通过定义 环境变量 AMREX_CUDA_ARCH (全大写)。如果未指定 GPU 架构,CMake 将尝试确定系统支持的 GPU。