# OpenOceanBellhop **Repository Path**: hellobill2020/OpenOceanBellhop ## Basic Information - **Project Name**: OpenOceanBellhop - **Description**: 一个bellhop c++实现,包括了精确计算本征声线的方法。 - **Primary Language**: C++ - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-11-15 - **Last Updated**: 2025-11-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpenOcean-Bellhop ## 目录 - [OpenOcean-Bellhop](#openocean-bellhop) - [目录](#目录) - [Impressum](#impressum) - [描述](#描述) - [安装指南](#安装指南) - [使用示例](#使用示例) - [环境文件](#环境文件) - [算法报告](#算法报告) - [项目结构和目录结构](#项目结构和目录结构) - [贡献](#贡献) - [许可证](#许可证) - [联系信息](#联系信息) ## Impressum Copyright (C) 2024-2025 Sun Yat-sen University Authors: Liang Yi, Qian Peng, Liu Jiatong, Luo Shixiong, Xie Shiwei, Huang Zhengchao Mail: yingxinliang1@gmail.com Based on BELLHOP, which is Copyright (C) 1983-2024 Michael B. Porter GPL3 licensed, no warranty, see LICENSE or https://www.gnu.org/licenses/ ## 描述 与诸多学科相似,水声领域长期以来始终处于我国科技追赶的版图之中。西方文艺复兴后,资产阶级革命催生了新的制度与文化土壤,为科学研究注入了蓬勃动力 —— 从开普勒的天体运动定律到伽利略的惯性原理,再到牛顿构建的经典力学体系,一代代学者对物理规律的深耕,为后续发展奠定了基石。工业革命的浪潮推动世界格局重塑,电子计算机的诞生更成为科学研究的 “加速器”,赋予人类全新的探索工具。遗憾的是,在这一系列历史性突破中,我们曾长期扮演旁观者的角色,甚至多数民众对这些科学进程知之甚少。 新中国的成立,让我们终于拥有了参与科学浪潮、能动地改变世界的底气。七十年来,无数先辈为追寻真理矢志奋斗,其间虽历经波折,却始终未曾停歇。近四十年来,随着我国综合国力的跃升,教育质量持续提升,人才培养体系不断迭代,21 世纪的高质量科研人才已呈井喷式涌现。我们始终坚信:科学应是大众可及的、服务实践的,是每个人都能触摸的知识力量,更是推动社会进步的核心动力。科学的发展离不开每一个人的参与,这份集体力量的价值终将被不断印证 —— 这正是属于 “庶民的胜利”。正如 “一万年太久,只争朝夕” 的呐喊,我们仍需冲破外界桎梏与自我设限,在科学的瀚海中持续远航。 秉持这份信念,我们始终以开放的姿态向先进成果学习。《Computational Ocean Acoustics》《水声学原理》等经典著作,以及 Acoustic Toolbox、bellhop-cuda 等开源代码,为我们打开了射线声学理论与实践的大门。我们深知,知识的传播与共享是科学进步的基石,这一点始终值得珍视与践行。 在海洋声学领域,射线理论作为波动方程的重要解法,恰是这种 “大众性” 与 “实用性” 的生动体现。它适用于深海高频环境,在水平变化条件下表现出强适用性;虽本质是波动方程的解,却如同 “波粒二象性” 中粒子学说的具象化表达,因兼具粒子般的直观特性而更易被理解与应用。在求解声场时域解(即海洋声源脉冲响应)时,其高效性与可解释性尤为突出,因而在海洋声学领域得到广泛应用。 本项目的核心 ——OpenOcean-Bellhop 射线追踪程序,其发展脉络清晰可溯。2024 年 3 月至 6 月,qp 基于 Acoustic Toolbox 开源的 Bellhop Fortran 版本,借助 ChatGPT 将其翻译为 C++ 版本,即 bellhopcpp。经过大量调试,该版本实现了计算稳定性,并确保与 Bellhop Fortran 版本的计算偏差控制在极小范围。但作为纯翻译版本,bellhopcpp 未涉及数据结构与算法优化,亦缺乏多线程并行能力。 在 gitee 开源 12 个月后,ly 接过了迭代的接力棒。凭借其在数据库设计、数据结构优化、C++ 算法重构及并行计算领域的深厚积累,结合对 bellhop-cuda 的技术借鉴,ly 引入 Eigen 库实现矩阵运算优化与声线并行化处理,最终打造出稳定高效的 OpenOcean-Bellhop 方法。此外,他创新性地采用主流 JSON 格式作为输入规范,并预留 Python 接口,通过内存直接传参避免磁盘读写耗时,大幅提升了算法的调用便捷性,使其能更好地与现代化科研及工程体系接轨。 在ly OpenOcean-Bellhop 基本功能完成后,将众多开源工作者加入到它的完善上来,将其与env的接口,matlab的交换等工作进一步完善。xsw和qp基于实际应用中出现的问题,对射线算法进行改进,提出了精确计算本征声线的算法,提高了OpenOcean-Bellhop在接收位于边界附近时的声场计算精度。在这个过程中,我们成立了OpenOceanAcoustic团队,目前该团队正在进行kraken的c++化(https://github.com/OpenOceanAcoustic/OpenOcean-Kraken)。 我们将这一成果命名为 OpenOcean-Bellhop。这便是 OpenOcean-Bellhop 的诞生故事,现在,就让我们一同开启它的使用之旅。 ## 安装指南 使用git下载 ```bash git clone https://gitee.com/open-ocean/OpenOceanBellhop.git ``` 或者在tag中下载您系统所需的可执行性文件。 ## 使用示例 - 环境文件 OpenOcean-Bellhop支持的环境文件输入有两种,一种是声学工具箱(ACOUSTIC TOOLBOX)中bellhop的env,另一种是OpenOcean-Bellhop自定义的json文件,关于json文件,具体请见/doc/jsonDescription.md。 - 执行命令 ```bash # 运行程序 ./bin/OpenOceanBellhop.exe MunkB_Coh_6000m.json # 或者使用ENV文件 ./bin/OpenOceanBellhop.exe MunkB_Coh_6000m.env # 可选参数 ./bin/OpenOceanBellhop.exe MunkB_Coh_6000m.json -t 8 -v 1 # 使用8个线程并启用振速计算 ``` - 输出 程序运行后会在输出目录生成结果文件,包括声压(后缀名加了_P)、振速等数据。 - matlab处理 可以使用acoustic toolbox工具包的函数对输出结果进行读取绘图等,比如 ```bash # 运行程序 oob('MunkB_Coh_6000m.json'); # 绘制传播损失图像 plotshd('MunkB_Coh_6000m_P.shd'); ``` ## 环境文件 json环境示例见'tests/MunkB_Coh_6000m.json',参数说明见/doc/jsonDescription.md 添加精确计算本征声线json接口,"runtype" 添加 - "EigenRayPRay" 精确计算本征声线并输出初始声源掠射角度(°)(角度使用-j输出json获取),调用runRay计算声线轨迹并输出.ray - "EigenRayPArr" 精确计算本征声线并输出初始声源掠射角度(°)(角度使用-j输出json获取),调用runArr计算到达结构并输出.arr - "EigenRayPTL" 精确计算本征声线并输出初始声源掠射角度(°)(角度使用-j输出json获取),调用runField计算声压并输出.shd env环境文件与bellhop保持一致,但是runtype中新增了4个功能: - '1' 精确计算本征声线并输出初始声源掠射角度(°)(角度使用-j输出json获取),调用runRay计算声线轨迹并输出.ray - '2' 精确计算本征声线并输出初始声源掠射角度(°)(角度使用-j输出json获取),调用runArr计算到达结构并输出.arr - '3' 精确计算本征声线并输出初始声源掠射角度(°)(角度使用-j输出json获取),调用runField计算声压并输出.shd ## 算法报告 OpenOcean算法精度和速度报告见/doc文件夹。 精确计算本征声线算法报告见/doc/rcprcty.pdf。 ## 项目结构和目录结构 目前源代码不公开。 ```text OpenOcean-Bellhop/ ├── README.md # 项目说明文档 ├── LICENSE # 许可证文件 ├── doc/ # 算法报告及输入文件json说明 │ ├── ray_comparison.pdf # 射线参数对比 │ ├── arr_comparison.pdf # 到达结构参数对比 │ ├── tl_comparison.pdf # 传播损失对比 │ ├── rcprcty.pdf # 互异性对比 │ ├── speed_comparison.pdf # 计算速度对比 │ ├── jsonDescription.md # json输入说明 ├── test/ # 测试文件目录 │ ├── MunkB_Coh_6000m.env # 6000m Munk剖面 env环境文件 │ ├── MunkB_Coh_6000m.json# 6000m Munk剖面 json环境文件 │ ├── test.json # json输入说明中的用例 │ ├── oob.m # 调用OpenOceanBellhop.exe的matlab程序 │ ├── OpenOceanBellhop.exe # OpenOceanBellhop.exe可执行性文件 ``` ## 贡献 欢迎提交Issue和Pull Request来改进项目。 ## 许可证 本项目采用GPL3许可证。 ## 联系信息 如有问题,请联系项目邮箱:yingxinliang1@gmail.com OpenOceanAcoustic团队招募信息: ![招募信息](doc/zm.jpg)