【Python库包】ESMF 库包介绍及安装
目录
- ESMF(Earth System Modeling Framework)库包介绍
- Regridding(重网格化)
- ESMF 下载及安装
- ESMPy: ESMF Python Regridding Interface
- xESMF安装
- ESMPy 安装
- ESMF 库包安装实例
- Linux 系统安装 ESMF 库包
- Windows 系统安装 ESMF 库包
- 参考
ESMF(Earth System Modeling Framework)库包介绍
Regridding(重网格化)
ESMF-Regridding
根据 Earth System Modeling Framework(ESMF)Regridding 页面,Regridding(重网格化),也叫 remapping(重映射) 或 interpolation(插值),是将数据从一个网格转换到另一个网格的过程,同时尽可能保持原始数据的重要特性。
Regridding 是在不同网格之间转换数据的过程,常见于地球系统模型组件之间(如陆地和大气之间)或在数据集之间(例如用于可视化)。其核心目标是:
- 让数据在网格之间传输时尽量保持 物理一致性;
- 实现 空间分辨率转换(粗到细或细到粗);
- 支持不同的 网格结构和坐标系统。
Regridding 的两个阶段
-
生成插值权重矩阵(Interpolation Weight Matrix)
描述源网格(source grid)上的点如何贡献给目标网格(destination grid)上的点。 -
应用插值权重
将源网格上的数据乘以权重矩阵,得到目标网格上的数据。这个过程使用并行稀疏矩阵乘法完成。
使用方式
ESMF 提供了多种使用方式:
- Fortran(集成/在线重网格):可直接在 Fortran 代码中调用,实现模型组件间的自动重网格;
- 命令行工具:
ESMF_RegridWeightGen
:生成插值权重;ESMF_Regrid
:生成并应用插值权重;
- Python(通过 ESMPy):Python 脚本中使用
ESMPy
接口进行重网格操作。
坐标系统(Coordinate Systems)
- Cartesian(笛卡尔):主要用于区域性的小网格,坐标单位为距离(x, y)。
- Spherical(球面):地球标准表示法,使用经纬度(longitude, latitude)。
网格类型(Grid Types)
- Grid(结构化网格):
- 2D:四边形构成;
- 3D:六面体构成;
- Mesh(非结构化网格):
- 2D:任意边数的多边形;
- 3D:六面体或四面体;
- LocStream(位置流):
- 一组无连接的离散点(例如观测点),不能用于所有重网格方法。
Regridding 方法
方法 | 描述 |
---|---|
Bilinear | 两维或三维线性插值 |
Patch(高阶) | 基于最小二乘拟合的高阶方法 |
Nearest source to destination | 每个目标点对应最近的源点 |
Nearest destination to source | 每个源点对应最近的目标点 |
First-order conservative | 保守数据总量,基于面积重叠比计算权重 |
Second-order conservative | 同上,但考虑源网格内梯度,插值更平滑 |
支持的网格文件格式
- CF Tile
- ESMF Mesh
- GRIDSPEC Mosaic
- SCRIP
- UGRID
极点处理选项(Poles)
- Full circle average:使用极点周围所有纬度点平均;
- N-point average:自定义使用 n 个点;
- No pole:不使用极点值。
ESMF 下载及安装
ESMF-Download
ESMPy: ESMF Python Regridding Interface
ESMPy 是基于 ESMF 的 Python 接口,因此 ESMF 是其运行的核心依赖组件。
ESMPy: ESMF Python Regridding Interface
为什么需要安装 ESMF?
- ESMPy 依赖于 已编译的 ESMF 库。
- 安装 ESMPy 时,Python 会调用 ESMF 提供的构建文件(即
esmf.mk
),因此该文件的路径必须通过环境变量ESMFMKFILE
正确设置。 - 没有 ESMF,ESMPy 将无法正常使用或编译。
xESMF安装
xESMF Installation
$ conda create -n xesmf_env
$ conda activate xesmf_env
$ conda install -c conda-forge xesmf
# to support all features in xESMF
$ conda install -c conda-forge dask netCDF4# optional dependencies for executing all notebook examples
$ conda install -c conda-forge matplotlib cartopy jupyterlab
$ conda install -c conda-forge esmpy xarray numpy shapely cf_xarray sparse numba
$ pip install git+https://github.com/pangeo-data/xesmf.git
ESMPy 安装
ESMF 库包安装实例
ESMF 并不是可以直接通过 pip
安装的 Python 包,它是一个 C/C++/Fortran 编写的框架,因此必须手动编译或通过包管理器获取。以下是通用安装步骤:
Linux 系统安装 ESMF 库包
1. 克隆 ESMF 源码(从 GitHub)
git clone https://github.com/esmf-org/esmf.git
cd esmf
您也可以从 官方 ESMF 发布页面 下载指定版本的源码包。
2. 配置环境变量(可选,但推荐)
设置安装路径:
export ESMF_DIR=$(pwd)
export ESMF_INSTALL_PREFIX=$ESMF_DIR/install
选择编译配置(以下是一个示例配置):
export ESMF_COMM=openmpi # 或 mpich,具体取决于您的MPI库
export ESMF_COMPILER=gfortran
export ESMF_BOPT=O # 优化编译(O - optimized, g - debug)
export ESMF_PIO=ON # 如果需要 PIO(并行IO)
export ESMF_NETCDF=ON # 如果需要 NetCDF 支持(通常需要)
3. 编译 ESMF
make
这个过程可能需要几分钟时间,视系统性能和配置而定。
4. 安装 ESMF
make install
这会将构建好的库文件安装到 $ESMF_INSTALL_PREFIX
指定的路径。
5. 设置 ESMFMKFILE
环境变量
这是 ESMPy 能发现 ESMF 的关键步骤。
找到 esmf.mk
文件的位置,通常在以下路径:
$ESMF_INSTALL_PREFIX/lib/libO/<平台名>/esmf.mk
然后设置环境变量。例如:
export ESMFMKFILE=$ESMF_INSTALL_PREFIX/lib/libO/Darwin.gfortranclang.64.openmpi.default/esmf.mk
根据您的平台(Linux、macOS)和使用的编译器(gfortran、intel)替换路径中的内容。
检查是否成功
确保以下命令成功输出:
echo $ESMFMKFILE
cat $ESMFMKFILE | grep ESMF_VERSION_STRING
您应该能看到类似:
ESMF_VERSION_STRING = 9.0.0
Windows 系统安装 ESMF 库包
参考
1、CSDN 博客-Python解决import xesmf报错没有名为ESMF的包