凤凰内弹道解算器是一款用于解决闭膛火炮及无坐力炮的内弹道正算,反算,及优化问题的软件。计算模块采用Python语言编写,用户界面为cl/Tk。
本程序编写参照了我国内弹道文献[1],实现了谢列别梁可夫内弹道体系下,以归一化参数所列内弹道学方程组的解算。
支持闭膛火炮及无坐力炮内弹道解算,实现了拉格朗日,毕杜克(Pidduck)与马蒙陀夫(Mamontov)三种0维气动力学梯度,对于缩膛效应进行了平均补偿与修正。
根据球、柱、管、带、多孔火药的几何尺寸,自动计算形状系数、确定形状函数(相对燃面函数)的功能。
程序支持根据参数正算,以及按性能指标反算、优化。对于常规火炮及无坐力炮,程序支持:
- 按照压强需求反算火药弧厚,以及同时满足弹速要求反算身管长度。
- 计算满足一定压强、弹速性能的最小膛容(含药室容积)解。
从公开文献出发,程序预置了火药燃速,爆温,火药力等数据,可在data/propellant.csv表格中自行添加,程序运行时会按数据定义对应的对象,便于通过图形用户界面直接选择。支持热重载补充其他火药。
为方便与设计流程交互,为计算结果(作图打表),及整炮数据实现了存、读取功能。在此基础上,根据现有资料,整理了大量制式火炮的内弹道构型,可供参考。
Python作为解释性语言,并不适于直接用于数值计算。内弹道问题相对特殊的中止条件条件,也难以用主流数值计算包实现。因此,开发过程中针对内弹道求解的具体问题,对数值算法进行了优化,在Python中实现以下算法:
-
对常微分方程的数值求解,采用了自适应的龙格-库塔-费尔伯格(Runge-Kutta-Fehlberg)法数值积分器。
与前人工作中常用的欧拉法[2]或4阶龙格-库塔法[3]相比,RKF方法在对方程求解时,动态、自控地选取符合要求的步长,克服了固定步长算法中步长选择的先验性、盲目性,节约计算步数,实现以较小的计算量快速得出结果。
-
对于一元方程的求零点问题,采用二分与正切混用的德克(Dekker)法加速。
-
对于函数极值问题,采用黄金分割法(Gold Section Search)。
下载预先打包为Windows可执行文件的Python代码及运行环境:
-
从Github发行版直接下载单文件发行版。
该版本打包Python运行环境及其它依赖库。单文件为自解压压缩包,每次运行时会解压在系统临时目录,大小约为30-40MB。
在本地Python环境运行代码,或对代码进行再开发:
- 安装Python运行环境 (版本要求:>=3.9)。
- 用Git将代码仓库克隆到本地
- 创建虚拟环境(避免污染本地Python环境)
python -m venv .venv - 激活虚拟环境
- Windows:
.venv\Scripts\activate.bat - Linux:
source .venv/bin/activate
- Windows:
- 安装项目依赖包
pip install .[dev] - 执行项目代码:
python run_pibs.py - 生成发行版本:
python generate_executable.py
- [1] 张小兵,金志明《枪炮内弹道学》(2014版,2003版)
- [2] 王连荣,张佩勤《火炮内弹道计算手册》(1987)中适用于MZ-80B型微机的BASIC程序
- [3] matlab中编写的内弹道计算程序