build 和 arch 配置链

输入范围

LMDZ.COMMON-6.3\LMDZ.COMMON\arch
LMDZ.COMMON-6.3\LMDZ.COMMON\makelmdz
LMDZ.COMMON-6.3\LMDZ.COMMON\makelmdz_fcm
LMDZ.COMMON-6.3\LMDZ.COMMON\create_make_gcm
LMDZ.COMMON-6.3\LMDZ.COMMON\build_gcm
LMDZ.COMMON-6.3\LMDZ.COMMON\bld.cfg

Mars 运行参与度:构建期必经/条件经过。Mars 可执行文件本身运行时不经过这些脚本;但编译 Mars 目标、选择 phymars、并行宏、IOIPSL/XIOS、NetCDF 和 FFT/MKL 等能力时,这些配置决定源码如何预处理、编译和链接。

顶层文件

文件 作用
makelmdz 旧 makefile 构建入口:解析维度、物理包、并行、I/O 和 CPP key,生成源码列表和 makefile,再调用 make。
create_make_gcm 扫描传入源码目录,生成 makefile 规则、库依赖、include 路径和主程序链接规则。
makelmdz_fcm 主构建入口:解析选项,支持 -clean,生成 FCM config,生成 libf/misc/version_control.F90,并驱动 bld.cfg。
bld.cfg FCM build 配置模板,声明 source groups、toolchain、CPP/FPP keys、外部依赖排除和输出。
build_gcm 简短 bash wrapper,检查 dimensions.h 防止并发编译冲突后调用构建。

arch 目录约定

arch/ 下每个目标平台通常有同名前缀的三类文件:

后缀 内容
.fcm FCM/编译变量:%COMPILER、%LINK、%MAKE、%CPP_FLAGS、%CPP_DEF、%BASE_FFLAGS、%PROD_FFLAGS、%DEBUG_FFLAGS、%MPI_FFLAGS、%OMP_FFLAGS、link flags 等。
.path 环境路径:NETCDF_*、IOIPSL_*、XIOS_* include/lib 路径和库名。
.env 机器环境初始化,如 module load 或导出 NetCDF/HDF5 路径;不是每个 arch 都有。

例如 arch-gfortran.fcm 使用 gfortran/gcc/make,定义 CPP_DEF LAPACK、FPP_DEF NC_DOUBLE 和 real*8 默认编译参数;arch-gfortran.path 从 $NETCDF、$PWD/ioipsl 和 ../XIOS 组织库路径。

makelmdz 旧构建链

  1. 解析 -d 维度、-p 物理包、-parallel none/mpi/omp/mpi_omp、-io ioipsl/mix/xios、-cpp、-arch 等选项。
  2. 依据物理包名计算 phys_root,例如 mars 归为 Mars 物理根。
  3. 根据物理包和选项追加 CPP_PHYS、CPP_EARTH、CPP_PARA、CPP_MPI、CPP_OMP、CPP_IOIPSL、CPP_XIOS 等 key。
  4. 对 newstart/start2archive 禁止并行编译;对 1D 目标禁止并行。
  5. 调用 grid/dimension/makdim 生成 dimensions.h,可对某些物理包生成 bands/scatterers include。
  6. 按维度选择 dyn3d 或 dyn3dpar、dyn3d_common、filtrez、phy_common、phy<physique> 等源码目录。
  7. 若配置或源码列表变化,调用 ./create_make_gcm $src_dirs 重新生成 makefile。
  8. 将 CPP_KEY 转成 -D... 加入编译 flag,调用 make 构建目标主程序或库。

create_make_gcm

create_make_gcm 从传入目录扫描 .F/.F90/.h,生成静态库和可执行文件规则。它设置:

FCM 构建链

makelmdz_fcm 和 bld.cfg 使用 FCM 配置:

  1. makelmdz_fcm -arch <name> 将 arch/arch-<name>.path、.env、.fcm 链接为当前工作目录的 arch.path/env/fcm。
  2. source arch.env 和 arch.path,得到 NetCDF、IOIPSL、XIOS 等路径。
  3. 解析物理、并行、I/O、维度和 CPP key,生成 config.fcm、arch.opt 等 FCM 输入。
  4. bld.cfg include arch.fcm 和 config.fcm,声明 %LIBF 下的 source groups:dyn、phys、dyn_phys、grid、filtrez、misc、dyn3d_common、phy_common、aerono 等;当前源码已移除 src::evolution %EVOLUTION。
  5. bld.cfg 指定 bld::tool::fc/cc/ld/ar/make、cppflags/fppflags、cppkeys/fppkeys,并排除外部依赖如 netcdf、ioipsl、xios、mpif.h。

Mars 相关选择点

复现要点

待确认

相关页面