The Well与Dedalus集成教程:如何用物理模拟代码生成高质量数据集
The Well与Dedalus集成教程:如何用物理模拟代码生成高质量数据集
【免费下载链接】the_wellA 15TB Collection of Physics Simulation Datasets项目地址: https://gitcode.com/gh_mirrors/th/the_well
The Well是一个包含15TB物理模拟数据集的开源项目,而Dedalus是一个强大的微分方程求解框架,专为研究偏微分方程和科学计算设计。本教程将详细介绍如何将Dedalus物理模拟代码与The Well数据集项目集成,生成符合标准的高质量物理模拟数据集,为机器学习和科学研究提供可靠的数据支持。
准备工作:环境搭建与依赖安装
在开始集成之前,需要确保你的系统中已经安装了必要的依赖包。首先克隆The Well项目仓库:
git clone https://gitcode.com/gh_mirrors/th/the_well cd the_well接下来安装Dedalus框架及其依赖。Dedalus支持通过conda或pip安装,推荐使用conda以确保依赖兼容性:
conda create -n dedalus_env python=3.11 conda activate dedalus_env conda install -c conda-forge dedalus numpy scipy matplotlib h5py pip install xarray torch torch-harmonics数据集生成流程概述
The Well项目的数据集生成遵循标准化流程,主要包括以下步骤:
- 物理模型定义:使用Dedalus编写偏微分方程和边界条件
- 参数配置:通过YAML文件定义模拟参数和输出格式
- 并行计算:利用多进程加速模拟过程
- 数据后处理:将原始模拟数据转换为The Well标准格式
- 元数据生成:自动生成数据集描述和统计信息
step-by-step:用Dedalus生成声学散射数据集
1. 编写Dedalus物理模型
在datasets/acoustic_scattering_discontinuous/generation/目录下,创建Dedalus模拟脚本acoustics_2d_interface_random_medium.py。该脚本定义了二维声学散射问题的控制方程和数值求解器:
import dedalus.public as de import numpy as np def setup(seed, include_splits=True, include_inclusions=False, outdir='./', T_max=2.0, num_steps=101): # 定义计算域 x_basis = de.Fourier('x', 256, interval=(0, 1), dealias=3/2) y_basis = de.Fourier('y', 256, interval=(0, 1), dealias=3/2) domain = de.Domain([x_basis, y_basis], grid_dtype=np.float64) # 定义声学方程 problem = de.IVP(domain, variables=['p', 'ux', 'uy']) problem.add_equation("dt(p) + dx(ux) + dy(uy) = 0") problem.add_equation("dt(ux) + dx(p) = 0") problem.add_equation("dt(uy) + dy(p) = 0") # 添加随机介质扰动 if include_splits or include_inclusions: np.random.seed(seed) # 实现介质参数随机化逻辑 # ... # 设置求解器 solver = problem.build_solver(de.timesteppers.RK443) # 设置初始条件和边界条件 # ... # 运行模拟 while solver.sim_time < T_max: solver.step(1/num_steps) # 定期保存数据 # ... return solver2. 创建参数配置文件
在数据集目录下创建acoustic_scattering_discontinuous.yaml配置文件,定义模拟参数:
dataset_name: acoustic_scattering_discontinuous description: 2D acoustic scattering in random medium with discontinuous interfaces parameters: grid_size: 256 time_steps: 101 T_max: 2.0 seed_range: [0, 2000] include_splits: true include_inclusions: false output: variables: ['p', 'ux', 'uy'] format: hdf5 compression: gzip3. 实现并行数据生成
创建generate_acoustics_data.py脚本,利用多进程并行生成数据集:
import argparse import multiprocessing as mp from functools import partial import numpy as np from acoustics_2d_interface_random_medium import setup def mp_wrapper(seed, discontinuous=True, output_dir='./data/'): # 设置随机种子 run_func = partial( inner_gen_sample, discontinuous=discontinuous, output_dir=output_dir ) # 使用多核并行 cores = mp.cpu_count() with mp.Pool(cores // 2) as pool: pool.map(run_func, seeds) def inner_gen_sample(seed, discontinuous, output_dir): # 调用Dedalus模拟 solver = setup( seed=seed, include_splits=discontinuous, outdir=output_dir ) # 运行模拟并保存结果 solver.run() if __name__ == "__main__": parser = argparse.ArgumentParser(description="Generate acoustic scattering data") parser.add_argument('--seed', type=int, default=0) parser.add_argument('--output_dir', type=str, default='./raw_data/') args = parser.parse_args() mp_wrapper( seed=np.random.default_rng(args.seed), output_dir=args.output_dir )4. 配置批处理脚本
创建run_discontinuous.sh批处理脚本,设置运行参数并提交任务:
#!/bin/bash #SBATCH --job-name=acoustic_scattering #SBATCH --nodes=1 #SBATCH --ntasks-per-node=16 for seed in {0..1999}; do python generate_acoustics_data.py --seed $seed --output_dir ./acoustic_scattering_discontinuous/data/ done # 运行数据后处理 python compute_statistics.py --data_dir ./acoustic_scattering_discontinuous/data/ python generate_metadata.py --data_dir ./acoustic_scattering_discontinuous/数据标准化与The Well集成
生成原始模拟数据后,需要将其转换为The Well项目的标准格式。项目提供了专门的工具脚本:
1. 数据格式转换
使用scripts/check_thewell_formatting.py验证并转换数据格式:
python scripts/check_thewell_formatting.py \ --input_dir datasets/acoustic_scattering_discontinuous/data/ \ --output_dir datasets/acoustic_scattering_discontinuous/the_well_format/2. 计算数据集统计信息
运行compute_statistics.py生成数据集统计信息:
python scripts/compute_statistics.py \ --data_dir datasets/acoustic_scattering_discontinuous/the_well_format/ \ --output_file datasets/acoustic_scattering_discontinuous/stats.yaml3. 创建可视化笔记本
创建Jupyter笔记本文件visualization_acoustic_scattering_discontinuous.ipynb,用于数据可视化和质量检查:
import numpy as np import matplotlib.pyplot as plt import xarray as xr # 加载数据集 data = xr.open_dataset('datasets/acoustic_scattering_discontinuous/the_well_format/data_0000.h5') # 绘制压力场 plt.figure(figsize=(10, 8)) plt.imshow(data.p[0], cmap='viridis') plt.colorbar(label='Pressure') plt.title('Acoustic Scattering at t=0') plt.savefig('pressure_field.png')常见问题与解决方案
1. 模拟效率问题
问题:大型3D模拟耗时过长
解决方案:使用Dedalus的MPI并行功能,修改脚本以支持分布式计算:
mpiexec -n 16 python generate_acoustics_data.py --parallel2. 数据存储优化
问题:原始数据体积过大
解决方案:使用The Well提供的create_miniwell.py创建轻量级版本:
python scripts/create_miniwell.py \ --input_dir datasets/acoustic_scattering_discontinuous/the_well_format/ \ --output_dir datasets/acoustic_scattering_discontinuous/mini_well/ \ --downsample 43. 质量控制
问题:模拟结果出现数值不稳定性
解决方案:调整Dedalus求解器参数,增加数值稳定性:
solver = problem.build_solver(de.timesteppers.RK443) solver.stop_sim_time = T_max solver.stop_wall_time = 3600 * 24 solver.stop_iteration = np.inf总结与下一步
通过本教程,你已经学会如何将Dedalus物理模拟代码与The Well项目集成,生成标准化的物理模拟数据集。关键步骤包括:
- 使用Dedalus定义物理模型和边界条件
- 配置并行计算以加速数据生成
- 运行数据后处理和质量控制
- 生成符合The Well标准的数据集和元数据
下一步,你可以:
- 探索
datasets/目录下的其他数据集生成案例,如MHD、Rayleigh-Benard对流等 - 使用
scripts/plot_velocity.py可视化速度场和其他物理量 - 贡献新的物理模型到The Well项目
The Well项目的数据集生成框架设计灵活,支持多种物理场景扩展。通过遵循本文档的最佳实践,你可以高效生成高质量的物理模拟数据,为科学研究和机器学习应用提供支持。
【免费下载链接】the_wellA 15TB Collection of Physics Simulation Datasets项目地址: https://gitcode.com/gh_mirrors/th/the_well
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
