You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需写入磁盘即可向subprocess子进程输入AVL所需文件

无需磁盘写入传递AVL输入的两种可行方案

方案1:使用内存文件系统(零源码修改,改造成本最低)

  • 核心逻辑:将临时几何文件写入内存虚拟磁盘,完全规避磁盘IO开销,原有代码逻辑几乎不用调整,也不需要修改AVL源码。
  • 操作步骤:
    • Linux系统直接挂载tmpfs内存文件系统:执行命令 mount -t tmpfs -o size=100M tmpfs /tmp/avl_temp,100M的空间完全足够存储AVL几何文本。
    • Windows系统可安装任意免费RamDisk工具,划分100M以内的内存空间作为虚拟磁盘使用。
    • 将原代码中create_file的输出路径改为上述内存盘路径即可,读写速度和内存操作一致,完全满足优化器高性能要求。

方案2:修改AVL源码从标准输入读取几何(完全无文件操作,性能最优)

  • 核心逻辑:AVL读取几何文件的本质是逐行读取文本内容,只需要修改少量输入处理代码,即可支持从stdin直接读取几何定义,无需调用load读取磁盘文件。
  • 源码修改步骤:
    • 找到AVL源码中处理LOAD命令的子程序,定位到打开几何文件的代码行:OPEN(UNIT=LU, FILE=PATH, STATUS='OLD', ...)
    • 增加判断逻辑:如果传入的PATH为特殊值-,则直接将LU赋值为5(Fortran默认标准输入单元号),跳过文件打开步骤。
    • 原有逐行读取几何定义的代码不需要修改,全部直接从LU单元读取即可,读取完成后如果是stdin模式不需要执行CLOSE操作。
  • 配套Python代码修改示例:
def resultados_avl(aircraft, command):
    process = subprocess.Popen(['avl'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
    # 原create_file写文件逻辑修改为直接返回几何文本字符串,无磁盘写入
    geo_text = generate_geo_content(aircraft)
    if command[0] == 'alpha':
        input_content = f'load -\n{geo_text}\noper\na a {command[1]:.3f}\nx\nst\n\nquit\n'
    if command[0] == 'trim':
        input_content = f'load -\n{geo_text}\noper\na pm 0\nx\nst\n\nquit\n'
    out = process.communicate(input_content.encode('utf-8'))[0]
    process.terminate()
    output = out.decode('utf-8')
    results = dict()
    # 原有正则解析输出逻辑保持不变

选型建议

如果不想改动Fortran源码,优先选内存文件系统方案,改造耗时不超过10分钟,性能损失可以忽略。如果追求极致性能,选源码修改方案,完全消除文件操作开销。

内容的提问来源于stack exchange,提问作者rubemnobre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:36:00