我可以更改 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 和一个执行所有这三个组件的组件,如果你需要的话,也许用一个组包裹并行处理案例。
我可以在 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 和一个执行所有这三个组件的组件,如果你需要的话,也许用一个组包裹并行处理案例。