【发布时间】:2021-12-17 05:01:06
【问题描述】:
我正在研究飞机几何形状的优化器,在优化过程中,需要在AVL(开源,Fortran)中运行模拟,它将几何形状作为输入并输出有用的数据。目前,程序的 AVL 部分是这样工作的:
def resultados_avl(aircraft, command):
process = subprocess.Popen(['avl'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
path = create_file(aircraft, False)
if command[0] == 'alpha':
out = process.communicate(bytes('load %s\noper\na a %.3f\nx\nst\n\nquit\n' % (path, command[1]), 'utf-8'))[0]
if command[0] == 'trim':
out = process.communicate(bytes('load %s\noper\na pm %.3f\nx\nst\n\nquit\n' % (path, 0), 'utf-8'))[0]
process.terminate()
output = out.decode('utf-8')
results = dict()
# Proceeds to do some RegEx "fun" in AVL's output
这种方法的问题是需要创建一个文件供 AVL 读取。它是一个带有几何描述的简单文本文件,但如您所知,读取和写入文件很慢,而且性能在优化器中非常重要。
我的问题:有没有办法在不写入驱动器的情况下获取 AVL 的输入?
我曾想过修改 Fortran 源代码以从标准输入获取输入缓冲区,但我什至不知道从哪里开始。
【问题讨论】:
-
嗯,理论上应该是可以的,只是让它从不同的单元读取。但是如果没有源代码,很难告诉你任何细节。在 Fortran 中,您可以删除
open()语句和close()语句,并将用于read语句的单位更改为从标准输入中读取。但是您应该自己尝试一下,并在尝试时遇到一些特定的问题。 -
这正是我最终所做的!我稍后会自己回答这个问题,以帮助将来有人遇到同样的问题。