我可以在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
答案 0 :(得分:1)
参数是组件的传入值。它们是外部提供的信息。由于这种外部性,你不能/不应该改变它们。
另一种说法: 如果您有传入连接,那么您的参数值由该上游组件的输出(源)定义。更改您的参数就像更改该上游组件的输出一样。
答案 1 :(得分:0)
由于我的代表太低,我无法发表评论,但这更多是对读/写组件的评论,而不是问题的答案。我建议让读/写和包装类纯python,然后只使用顶层的openmdao和一个执行所有三个的组件,如果你需要并行处理案例,可能还有一个组。