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

时间:2017-07-14 17:02:04

标签: openmdao

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

修改

这是我对“纯python”读者/作者组件的尝试。我的问题是我无法从顶层读取/写入参数。

$ 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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

由于我的代表太低,我无法发表评论,但这更多是对读/写组件的评论,而不是问题的答案。我建议让读/写和包装类纯python,然后只使用顶层的openmdao和一个执行所有三个的组件,如果你需要并行处理案例,可能还有一个组。