Kolmogorov_flow_2d
收藏资源简介:
<p align="center"> <strong> <span style="font-size: 30px;">Kolmogorov Flow 2D</span> </strong> </p> ## 数据集介绍 本数据集包含二维 Kolmogorov Flow 数值模拟得到的单通道涡量场序列,可用于湍流时序预测、神经算子训练、偏微分方程代理建模和长时间自回归预测。 数据描述二维周期区域上的涡量标量场: ```text omega(x, y, t) ``` 每条轨迹记录一个初始条件随时间演化得到的 320 帧涡量场。数据集共包含 120 条轨迹,每帧空间分辨率为 `256 x 256`,数据类型为 `float32`。 该数据集已适配魔搭社区模型 `OneScience/FactFormer`。FactFormer 使用因子化轴向注意力分别建模二维网格两个空间方向上的长程依赖,可在降低全局注意力计算量的同时完成 Kolmogorov Flow 多步时序预测。 ## 仓库说明 本仓库是 OneScience 整理的二维 Kolmogorov Flow 标准化数据仓库,面向 ModelScope 下载、OneCode 自动化运行、FactFormer 训练推理和本地数据完整性验证场景。 仓库提供: - 完整的二维 Kolmogorov Flow NumPy 数据文件 - 面向 ModelScope 的数据集说明文档 - 基于内存映射的数据验证脚本 - 可选的全量有限值扫描和 SHA256 校验 本仓库不额外提供速度、压力、外力场或网格之外的物理变量。数据文件中也未记录物理时间步长、数值求解器和强迫项参数,使用这些信息的研究应结合数据上游生成说明。 ## 核心信息 | 项目 | 内容 | |---|---| | 流动类型 | 二维 Kolmogorov Flow | | 物理量 | 涡量(vorticity) | | 雷诺数 | `Re = 1000` | | 轨迹数量 | `120` | | 每条轨迹时间帧数 | `320` | | 空间分辨率 | `256 x 256` | | 通道数量 | `1` | | 数据类型 | `float32` | | 数组形状 | `[120, 320, 256, 256]` | | 数组有效载荷 | `9.375 GiB` | | `.npy` 文件大小 | `10,066,329,728` bytes,约 `9.38 GiB` | | SHA256 | `8eff8260ad2fbcd26c17461b2e2d1f1681e05ef7dc70ef9779142269ed814ca5` | | 推荐模型 | `OneScience/FactFormer` | ## 文件说明 | 路径 | 功能 | 备注 | |---|---|---| | `README.md` | 数据集仓库说明 | 用于 ModelScope 数据集卡展示 | | `kf_2d_re1000_256_120seed.npy` | 完整涡量场时序数据 | NumPy `.npy`,支持内存映射读取 | | `scripts/validate_dataset.py` | 数据验证脚本 | 校验结构、类型、抽样有限值,可选全量扫描和 SHA256 | 仓库结构: ```text Kolmogorov_flow_2d/ ├── README.md ├── kf_2d_re1000_256_120seed.npy └── scripts/ └── validate_dataset.py ``` ## 数据格式 ### 数组维度 `kf_2d_re1000_256_120seed.npy` 的形状为: ```text [trajectory, time, x, y] = [120, 320, 256, 256] ``` | 维度 | 长度 | 含义 | |---|---:|---| | `trajectory` | 120 | 独立轨迹或初始条件编号 | | `time` | 320 | 单条轨迹中的时间帧索引 | | `x` | 256 | 第一个空间方向的规则网格点 | | `y` | 256 | 第二个空间方向的规则网格点 | 单帧读取方式: ```python field = data[trajectory_id, time_id] ``` 返回的 `field` 形状为 `[256, 256]`,表示一个时间点上的二维涡量场。 ### 数值范围抽样 发布前验证所使用的代表帧统计如下。该表用于快速排查文件损坏,不应被视为完整数据集的归一化参数。 | 轨迹、时间 | 最小值 | 最大值 | 均值 | 标准差 | |---|---:|---:|---:|---:| | `(0, 0)` | -15.9583 | 16.3011 | 2.86e-08 | 4.97845 | | `(0, 319)` | -25.0394 | 20.6447 | 1.12e-06 | 6.03073 | | `(60, 160)` | -23.4516 | 24.8753 | -6.00e-08 | 5.99272 | | `(119, 0)` | -16.4887 | 16.8339 | -1.60e-07 | 6.35673 | | `(119, 319)` | -24.6470 | 28.0068 | 1.81e-07 | 5.56190 | 使用 `scripts/validate_dataset.py --full-scan` 对全部 `2,516,582,400` 个数值执行扫描后的统计结果为: | 检查项 | 结果 | |---|---:| | NaN/Inf | 未发现 | | 全局最小值 | -33.901165 | | 全局最大值 | 36.655338 | | 全局均值 | -3.0936e-08 | | 全局标准差 | 6.011228 | ## 适用场景 | 场景 | 说明 | |---|---| | 多步流场预测 | 根据历史涡量场预测后续多个时间步 | | 自回归时序建模 | 将模型输出重新加入输入窗口进行长时间 rollout | | 神经算子研究 | 比较 Transformer、FNO、UNO、KNO 等算子架构 | | 湍流代理模型 | 学习数值求解器产生的时空演化映射 | | 时空降采样实验 | 比较不同空间分辨率和时间采样间隔的精度与效率 | | 不确定性与稳定性研究 | 分析多步预测误差传播和长期稳定性 | ## 配合 FactFormer 使用 ### 下载数据集和模型 ```bash modelscope download \ --dataset OneScience/Kolmogorov_flow_2d \ --local_dir ./Kolmogorov_flow_2d modelscope download \ --model OneScience/FactFormer \ --local_dir ./FactFormer ``` 下载后目录可以保持为并列结构: ```text workspace/ ├── FactFormer/ └── Kolmogorov_flow_2d/ └── kf_2d_re1000_256_120seed.npy ``` 将 `FactFormer/conf/config.yaml` 中的数据目录设置为相对于 FactFormer 根目录的路径: ```yaml root: datapipe: source: data_dir: "../Kolmogorov_flow_2d" file_name: "kf_2d_re1000_256_120seed.npy" ``` 也可以将数据文件放到 `FactFormer/data/`,并设置 `data_dir: "data"`。由于原始数据约 9.38 GiB,位于同一文件系统时推荐使用软链接,避免重复占用磁盘空间: ```bash ln -s \ "$(pwd)/Kolmogorov_flow_2d/kf_2d_re1000_256_120seed.npy" \ FactFormer/data/kf_2d_re1000_256_120seed.npy ``` ### FactFormer 默认数据配置 `OneScience/FactFormer` 默认使用以下设置: | 配置 | 默认值 | 说明 | |---|---:|---| | `train_num` | 100 | 前 100 条轨迹用于训练 | | `test_num` | 20 | 最后 20 条轨迹用于测试 | | `resolution` | 128 | 从 `256 x 256` 下采样到 `128 x 128` | | `interval` | 2 | 时间方向每隔 2 帧采样 | | `t_in` | 10 | 输入历史帧数量 | | `t_out` | 16 | 预测未来帧数量 | | `out_dim` | 1 | 单通道涡量输出 | | `normalize` | true | 使用训练数据统计量归一化 | 时间降采样后每条轨迹有 `320 / 2 = 160` 个可用时间点。使用 `t_in=10`、`t_out=16` 时,每条轨迹可构造: ```text 160 - (10 + 16) + 1 = 135 ``` 个滑动时间窗口,对应 13,500 个训练窗口和 2,700 个测试窗口。 ### 训练与推理 ```bash cd FactFormer python scripts/train.py python scripts/inference.py ``` FactFormer 使用 `numpy.load(..., mmap_mode="r")` 按需读取数据,不会在初始化阶段将完整 9.38 GiB 数组复制到内存。 ## 数据读取 ### 推荐的内存映射方式 ```python from pathlib import Path import numpy as np path = Path("Kolmogorov_flow_2d/kf_2d_re1000_256_120seed.npy") data = np.load(path, mmap_mode="r", allow_pickle=False) print("shape:", data.shape) print("dtype:", data.dtype) trajectory = data[0] # [320, 256, 256],按需读取 frame = data[0, 0] # [256, 256] patch = data[0, 0, ::2, ::2] # [128, 128] 空间降采样示例 ``` 不建议直接使用 `np.load(path)` 后对完整数组执行复制或类型转换,这会显著增加内存占用。 ### 简单可视化 ```python import matplotlib.pyplot as plt import numpy as np data = np.load( "Kolmogorov_flow_2d/kf_2d_re1000_256_120seed.npy", mmap_mode="r", ) trajectory_id = 0 time_id = 0 field = data[trajectory_id, time_id] figure, axis = plt.subplots(figsize=(6, 5)) image = axis.imshow(field, origin="lower", cmap="twilight") axis.set_title(f"Vorticity | trajectory={trajectory_id}, time={time_id}") axis.set_xlabel("y index") axis.set_ylabel("x index") figure.colorbar(image, ax=axis, label="vorticity") figure.tight_layout() figure.savefig("kolmogorov_sample.png", dpi=150) ``` ## 数据验证 验证脚本默认执行以下检查: - 文件是否存在且可读取 - NumPy header 是否有效 - 数组形状是否为 `[120, 320, 256, 256]` - 数据类型是否为 `float32` - 数组有效载荷与文件容量 - 5 个代表帧是否全部为有限值 - 代表帧的最小值、最大值、均值和标准差 ### 快速验证 ```bash python scripts/validate_dataset.py ``` ### SHA256 完整性验证 SHA256 会顺序读取整个 9.38 GiB 文件,耗时取决于存储带宽: ```bash python scripts/validate_dataset.py --sha256 ``` 预期校验值: ```text 8eff8260ad2fbcd26c17461b2e2d1f1681e05ef7dc70ef9779142269ed814ca5 ``` ### 全量数值扫描 检查全部元素是否存在 NaN/Inf,并计算全局统计量: ```bash python scripts/validate_dataset.py --full-scan ``` 同时执行全量扫描、SHA256 并保存 JSON 报告: ```bash python scripts/validate_dataset.py \ --full-scan \ --sha256 \ --report-json validation_report.json ``` ## 使用建议与限制 - 数据文件较大,读取和校验前请确保磁盘及临时目录空间充足。 - 建议始终使用内存映射读取,DataLoader 多进程场景应避免每个 worker 复制完整数组。 - `train_num + test_num` 不应超过 120。 - 空间目标分辨率应能整除 256,例如 256、128、64、32 或 16。 - 时间窗口需要满足 `t_in + t_out <= 320 / interval`。 - 当前文件只有单通道涡量,不包含速度、压力和外力场。 - 数据索引代表离散时间帧;物理时间步长未编码在 `.npy` 文件中。 - 归一化统计应仅使用训练轨迹计算,避免测试数据泄漏。 ## OneScience 官方信息 | 平台 | OneScience 主仓库 | Skills 仓库 | |---|---|---| | Gitee | https://gitee.com/onescience-ai/onescience | https://gitee.com/onescience-ai/oneskills | | GitHub | https://github.com/onescience-ai/OneScience | https://github.com/onescience-ai/oneskills | ## 引用与许可证 - 推荐模型:`OneScience/FactFormer`。 - FactFormer:Liu-Schiaffini et al., *FactFormer: Factorized Transformer for Modeling Long-Range Dependencies in PDE Surrogate Modeling*。 - 本仓库说明文档与辅助脚本采用 Apache-2.0 许可证。 - 对数值数据进行公开分发或二次发布前,请同时确认数据上游来源及其授权要求。



