Record P2/P3 post-Tier 4 candidates for next session
Focus 是一个高性能的命令行地震震源反演框架,专为超级计算环境设计。它提供了与 Grond 相当的核心能力,同时使用 C++ 实现所有计算密集型算法,并使用 OpenMP 进行节点内并行化。
Grond 对齐状态:Focus 在真实数据上通过了一对一验证(GFZ 2020zocb 克罗地亚 M6.4:全局 misfit 1.00 vs Grond 0.99;Ridgecrest 2019 M7.1 GNSS:最佳 strike 136.3° vs 目录 137.2°)。 频域积分对齐:使用 transfer()/remove_response() 内置频域 1/(iω)ⁿ 积分,与 Pyrocko/Grond quantity=displacement 等价(commit c9e43eb)。 aarch64 跨平台一致:在天河新一代超算(NSCC HNU, mt_module 16 核节点)通过 Tier-1 端到端验证——bench_quick 在 synth_ahfull 自一致数据上 aarch64 与 x86_64 产生完全相同的结果(commit 9e0a8b4)。详见 docs/next_steps.md 与 docs/tianhe_validation_runbook.md。
transfer()/remove_response()
quantity=displacement
c9e43eb
bench_quick
9e0a8b4
full_mt
deviatoric
double_couple
vlvd
dc_mt
preconstrain
cmt_deviatoric
problem_type
transfer(output_units="M")
elastic10
max rel 8.9e-7
rotate_raw_to_rtz
impulse
boxcar
triangular
half_sine
scripts/tianhe/
submit.sh
init
check
go
forward
harvest
evaluate
export
response
mt
report
version
mkdir build && cd build cmake .. -DFOCUS_ENABLE_OPENMP=ON -DFOCUS_BUILD_TESTS=ON make -j
重要:天河 登录节点禁止运行可执行文件,仅允许编译与作业提交。 完整使用规则见 docs/tianhe_usage.md;本节给出最小工作流。
docs/tianhe_usage.md
# 登录 ssh hnu_wuq@25.8.100.22 # 一次性:rsync 上传源码(仓库根对应 ~/focus_src/) rsync -avP --exclude '.git' --exclude 'build/' \ /local/path/focus/ hnu_wuq@25.8.100.22:~/focus_src/ # 在登录节点构建(启用 aarch64 原生 flags;前提 login node CPU 有 crypto 扩展) cd ~/focus_src bash scripts/tianhe/build.sh --aarch64 # Release + tests + armv8.2-a+neoverse-n1 bash scripts/tianhe/build.sh --aarch64 --mpi # 启用 MPI bash scripts/tianhe/build.sh --aarch64 --clean # 重新构建 # 在登录节点提交作业到计算节点(登录节点禁止跑 focus) # 推荐:智能包装 (mt_module 优先,失败回退 ft_module) bash scripts/tianhe/submit.sh scripts/tianhe/smoke_test.sh # ctest 单测 bash scripts/tianhe/submit.sh scripts/tianhe/regr_smoke.sh # 7 MB 端到端 bash scripts/tianhe/submit.sh scripts/tianhe/verify_aarch64_reference.sh # Pyrocko GF 容差回归 bash scripts/tianhe/submit.sh scripts/tianhe/bench_quick.sh # quick 反演 # 也可直接 yhbatch(仅主分区,不回退): # yhbatch scripts/tianhe/smoke_test.sh yhqueue -u $USER yhcancel <JOBID>
分区优先级:mt_module(16 核/节点,10240 个,idle 多)→ 回退 ft_module(64 核/节点,1024 个,排队更频繁)。详见 docs/tianhe_usage.md §4.1 与 scripts/tianhe/README.md。
mt_module
ft_module
docs/tianhe_usage.md §4.1
scripts/tianhe/README.md
Tier-1 验证(commit 9e0a8b4):在天河上 build → smoke_test → verify_aarch64_reference → bench_quick 端到端跑通;并通过 scripts/tianhe/setup_synth_ahfull_bench.py 生成自一致 synth 数据,aarch64 与 x86_64 在 bench_quick 产生完全相同的恢复结果(Kagan / Mw / depth 三项完全一致)。完整步骤见 docs/tianhe_validation_runbook.md。
scripts/tianhe/setup_synth_ahfull_bench.py
docs/tianhe_validation_runbook.md
也可直接通过根目录下的 quick_bench.sh/full_bench.sh 等薄包装脚本提交到天河; 所有根目录 *_bench.sh 会自动检测 yhbatch 是否可用并转交。
quick_bench.sh
full_bench.sh
*_bench.sh
yhbatch
# 登录 ssh hnu_wuq@25.8.100.22 # 一次性:rsync 上传源码(仓库根对应 ~/focus_src/) rsync -avP --exclude '.git' --exclude 'build/' \ /local/path/focus/ hnu_wuq@25.8.100.22:~/focus_src/ # 在登录节点构建(含 aarch64 原生 flags) cd ~/focus_src bash scripts/tianhe/build.sh --aarch64 # Release + tests + armv8.2-a+neoverse-n1 bash scripts/tianhe/build.sh --aarch64 --mpi # 启用 MPI bash scripts/tianhe/build.sh --aarch64 --clean # 重新构建 # 在登录节点提交作业到计算节点(登录节点禁止跑 focus) # 推荐:智能包装 (mt_module 优先,失败回退 ft_module) bash scripts/tianhe/submit.sh scripts/tianhe/smoke_test.sh # ctest 单测 bash scripts/tianhe/submit.sh scripts/tianhe/regr_smoke.sh # 7 MB 端到端 bash scripts/tianhe/submit.sh scripts/tianhe/verify_aarch64_reference.sh # Pyrocko GF 容差回归 bash scripts/tianhe/submit.sh scripts/tianhe/bench_quick.sh # quick 反演 # 也可直接 yhbatch(仅主分区,不回退): # yhbatch scripts/tianhe/smoke_test.sh yhqueue -u $USER yhcancel <JOBID>
可选依赖(如找到将自动使用):
# Ubuntu / Debian sudo apt-get install libhdf5-dev libyaml-cpp-dev libfftw3-dev libnetcdf-c++4-dev libmseed-dev catch2
Python 工具(tools/benchmark_focus.py、tools/focus_report.py)需要:
tools/benchmark_focus.py
tools/focus_report.py
pip install h5py pyrocko matplotlib jinja2
运行 CLI:
# 使用模板配置创建项目骨架 ./apps/focus init my_project # 从 'forward' 震源生成合成波形(内置解析 GF 存储) ./apps/focus forward my_project/config.yaml # 将其作为观测数据输入并进行反演 cp my_project/runs/forward/*.sac my_project/data/waveforms/ ./apps/focus check my_project/config.yaml ./apps/focus go my_project/config.yaml # 或运行内置示例 ./apps/focus check ../data/example_config.yaml ./apps/focus go ../data/example_highscore_config.yaml
运行测试:
# 本机 ./tests/focus-tests # 天河(通过 SLURM 提交) cd ~/focus_src yhbatch scripts/tianhe/smoke_test.sh
├── apps/ # 命令行应用程序 (focus-cli) ├── include/focus/ # 公共 C++ 头文件 ├── src/core/ # 核心库:模型、问题、优化器、分析 ├── src/gf/ # 格林函数引擎 (Pyrocko, HDF5, Okada, SPTree) ├── src/io/ # 数据 I/O (SAC, MiniSEED, StationXML, HDF5, NetCDF, harvest) ├── tests/ # 单元测试 (Catch2, 72 个测试用例 / x86_64; 68/68 在天河跳过 4 个缺依赖项) ├── tools/ # Python 脚本(基准测试、报告、数据生成、synth_ahfull) ├── scripts/tianhe/ # 天河 (NSCC HNU) SLURM 作业脚本(9 个 yhbatch 脚本 + submit.sh) ├── data/ # 示例配置 ├── docs/ # 设计文档、Grond 对齐计划和路线图(含 tianhe_usage.md) └── CMakeLists.txt # CMake 构建 (C++17, OpenMP, 可选 MPI)
Tier-1 aarch64 跨平台验证详情(commit 9e0a8b4):synth_ahfull 自一致数据 (tools/setup_synth_ahfull_bench.py 用 focus forward 生成)上, bench_quick seed 42 恢复结果在 aarch64 mt_module 16 核与 x86_64 上完全相同 (recovered strike=36.2, dip=44.7, rake=-153.2, Mw=5.376, depth=4946 m)。 Kagan 距离 95.18° 是数据驱动(粗略合成的 Ricker 高斯 vs 真实弹性波场), 非平台问题——见 ~/grond_benchmark/data/aarch64_reference/synth_ahfull_kagan.md 的详细分析与 docs/replace_grond_plan.md §Phase 1。
tools/setup_synth_ahfull_bench.py
focus forward
~/grond_benchmark/data/aarch64_reference/synth_ahfull_kagan.md
docs/replace_grond_plan.md
详见 docs/roadmap.md(功能对账,✅/⏳ 状态)、 docs/replace_grond_plan.md(4 阶段 实施)和 docs/next_steps.md(当前快照的执行 优先级):
docs/roadmap.md
docs/next_steps.md
详见 docs/roadmap.md(功能对账,✅/⏳ 状态)、 docs/replace_grond_plan.md(4 阶段 实施)和 docs/next_steps.md(当前快照的执行 优先级:Tier 1 天河 aarch64 验证 → Tier 2 Phase 1 收尾 → Tier 3 Phase 2 功能补齐 → Tier 4 Grond 完全兼容)。
core/mt_synthesis.*
core/stf.*
core/source_model.*
core/gf_store.*
InMemoryGFStore
core/waveform_misfit.*
core/trace.*
core/problem.*
core/bootstrap_weights.*
core/bootstrap.*
core/bootstrap_analysis.*
core/highscore_optimiser.*
core/chains.*
core/model_history.*
core/moment_tensor.*
gf/okada.*
gf/projection.*
gf/quadtree.*
core/satellite_target.*
core/gnss_target.*
core/target_analyser.*
io/sac_io.*
io/result_writer.*
本项目基于 GNU General Public License v3.0 或更高版本许可。 详见 LICENSE。
LICENSE
C++ version of Grond
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
Focus
Focus 是一个高性能的命令行地震震源反演框架,专为超级计算环境设计。它提供了与 Grond 相当的核心能力,同时使用 C++ 实现所有计算密集型算法,并使用 OpenMP 进行节点内并行化。
Grond 对齐状态:Focus 在真实数据上通过了一对一验证(GFZ 2020zocb 克罗地亚 M6.4:全局 misfit 1.00 vs Grond 0.99;Ridgecrest 2019 M7.1 GNSS:最佳 strike 136.3° vs 目录 137.2°)。 频域积分对齐:使用
transfer()/remove_response()内置频域 1/(iω)ⁿ 积分,与 Pyrocko/Grondquantity=displacement等价(commitc9e43eb)。 aarch64 跨平台一致:在天河新一代超算(NSCC HNU, mt_module 16 核节点)通过 Tier-1 端到端验证——bench_quick在 synth_ahfull 自一致数据上 aarch64 与 x86_64 产生完全相同的结果(commit9e0a8b4)。详见 docs/next_steps.md 与 docs/tianhe_validation_runbook.md。功能特性
full_mt、deviatoric、double_couple、vlvd参数化dc_mt参数化:Grond 风格的在 MT 分量空间中搜索 DC,使用preconstrain投影,推荐用于全球 DC 反演cmt_deviatoric:12 参数 CMT,包含 time / north_shift / east_shift 和半正弦 STFproblem_type选择transfer(output_units="M")在同一 FFT 内完成 响应去除 + 带通 + 1/(iω)ⁿ 积分,与 Pyrocko/Grondquantity=displacement等价elastic10矩张量合成——已通过 pyrocko 逐位精度验证 (max rel 8.9e-7)。线程安全的 LRU 波形缓存。rotate_raw_to_rtz)impulse/boxcar/triangular/half_sinescripts/tianhe/作业脚本(9 个 yhbatch 脚本,mt_module 优先 + ft_module 自动回退的智能submit.sh)init、check、go、forward、harvest、evaluate、export、response、mt、report、version构建
本机 / 通用 Linux
天河新一代超算(NSCC HNU, aarch64)
重要:天河 登录节点禁止运行可执行文件,仅允许编译与作业提交。 完整使用规则见
docs/tianhe_usage.md;本节给出最小工作流。分区优先级:
mt_module(16 核/节点,10240 个,idle 多)→ 回退ft_module(64 核/节点,1024 个,排队更频繁)。详见docs/tianhe_usage.md §4.1与scripts/tianhe/README.md。Tier-1 验证(commit
9e0a8b4):在天河上 build → smoke_test → verify_aarch64_reference → bench_quick 端到端跑通;并通过scripts/tianhe/setup_synth_ahfull_bench.py生成自一致 synth 数据,aarch64 与 x86_64 在bench_quick产生完全相同的恢复结果(Kagan / Mw / depth 三项完全一致)。完整步骤见docs/tianhe_validation_runbook.md。也可直接通过根目录下的
quick_bench.sh/full_bench.sh等薄包装脚本提交到天河; 所有根目录*_bench.sh会自动检测yhbatch是否可用并转交。构建
本机 / 通用 Linux
天河新一代超算(NSCC HNU, aarch64)
重要:天河 登录节点禁止运行可执行文件,仅允许编译与作业提交。 完整使用规则见
docs/tianhe_usage.md;本节给出最小工作流。分区优先级:
mt_module(16 核/节点,10240 个,idle 多)→ 回退ft_module(64 核/节点,1024 个,排队更频繁)。详见docs/tianhe_usage.md §4.1与scripts/tianhe/README.md。也可直接通过根目录下的
quick_bench.sh/full_bench.sh等薄包装脚本提交到天河; 所有根目录*_bench.sh会自动检测yhbatch是否可用并转交。可选依赖(如找到将自动使用):
Python 工具(
tools/benchmark_focus.py、tools/focus_report.py)需要:运行 CLI:
运行测试:
项目结构
验证结果
Tier-1 aarch64 跨平台验证详情(commit
9e0a8b4):synth_ahfull 自一致数据 (tools/setup_synth_ahfull_bench.py用focus forward生成)上,bench_quickseed 42 恢复结果在 aarch64 mt_module 16 核与 x86_64 上完全相同 (recovered strike=36.2, dip=44.7, rake=-153.2, Mw=5.376, depth=4946 m)。 Kagan 距离 95.18° 是数据驱动(粗略合成的 Ricker 高斯 vs 真实弹性波场), 非平台问题——见~/grond_benchmark/data/aarch64_reference/synth_ahfull_kagan.md的详细分析与docs/replace_grond_plan.md§Phase 1。路线图与下一步工作
详见
docs/roadmap.md(功能对账,✅/⏳ 状态)、docs/replace_grond_plan.md(4 阶段 实施)和docs/next_steps.md(当前快照的执行 优先级):路线图与下一步工作
详见
docs/roadmap.md(功能对账,✅/⏳ 状态)、docs/replace_grond_plan.md(4 阶段 实施)和docs/next_steps.md(当前快照的执行 优先级:Tier 1 天河 aarch64 验证 → Tier 2 Phase 1 收尾 → Tier 3 Phase 2 功能补齐 → Tier 4 Grond 完全兼容)。从 Grond 移植的关键 C++ 模块
core/mt_synthesis.*(基本格林函数)core/stf.*problem_type)core/source_model.*core/gf_store.*(InMemoryGFStore)core/waveform_misfit.*,core/trace.*core/problem.*core/bootstrap_weights.*,core/bootstrap.*,core/bootstrap_analysis.*core/highscore_optimiser.*,core/chains.*core/model_history.*core/moment_tensor.*gf/okada.*,gf/projection.*,gf/quadtree.*,core/satellite_target.*,core/gnss_target.*core/target_analyser.*io/sac_io.*io/result_writer.*许可证
本项目基于 GNU General Public License v3.0 或更高版本许可。 详见
LICENSE。