我可以更改 openmdao 中的参数值 solve_nonlinear

Can I change param values in openmdao's solve_nonlinear

我可以在 components' solve_nonlinear 函数中设置未知数和残差。我还可以设置参数的值吗?为什么或为什么不?

编辑

这是我对 "pure python" reader/writer 组件的尝试。我的问题是我无法从顶层 read/write 参数。

$ cat test.py 
from openmdao.api import Component, Group, Problem

class reader():
   def __init__(self):
      self.file_to_read = 'test.in'
      self.file_data = 0
   def execute(self):
      dat = open(self.file_to_read, 'r')
      self.file_data = dat.read()

class writer():
   def  __init__(self):
      self.file_to_write = 'test.out'
      self.data = -99
   def execute(self):
      dat = open(self.file_to_write, 'w')
      dat.write(str(self.data))

class ReadWriteComp(Component):
   def __init__(self):
      super(ReadWriteComp, self).__init__()
      self.reader = reader()
      self.writer = writer()
      self.reader.execute()

   def solve_nonlinear(self, params, unknowns, resids):
      self.writer.data = self.reader.file_data
      self.writer.execute()

root = Group()
root.add('testio', ReadWriteComp())
prob = Problem(root)
prob.setup()
prob['testio.writer.file_to_write'] = 'newname' # "Variable 'testio.writer.file_to_write' not found."
prob.run()


$ cat test.in 
8

参数是组件的传入值。它们是外部提供的信息。由于这种外部性,您不能t/shouldn改变它们。

换种说法: 如果您有传入连接,那么您的参数值由该上游组件的输出(源)定义。更改您的参数就像更改该上游组件的输出一样。

我无法发表评论,因为我的代表太低了,但这更多是对 read/write 组件的评论,而不是对问题的回答。我建议将 read/write 和包装器 类 设为纯 python ,然后只在顶层使用 openmdao 和一个执行所有这三个组件的组件,如果你需要的话,也许用一个组包裹并行处理案例。