2017-07-14 6 views
0

componentssolve_nonlinearに未知数と残差を設定できます。パラメータの値を設定することはできますか?なぜ、なぜそうではないのですか?ここでopenmdaoの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

私はそれを試みたことはありません。私はあなたがこれを行うことによって派生情報を破壊することになるだろうと思う。 より一般的な問題を解決する具体的な方法について質問しているようです。あなたは正確に何をしようとしていますか? –

+0

@RobFalck私は、読み取り、書き込み、およびラップコンポーネントを持つグループであるシミュレーションコードのラッパーを構築しています。私は1.Xでvartreesをエミュレートするために最善を尽くしています。 https://github.com/WISDEM/AeroelasticSE/blob/turbsim_connection/src/AeroelasticSE/FAST_mdao/FST8_group.py#L78私の問題は、この「vartree」のfst_vtオブジェクトでは、未知数がパラメータであることです。読者によって設定され、ライターによって使用される。 – kilojoules

答えて

1

paramsはコンポーネントへの入力値です。それらは外部から提供される情報です。この外部性のためにあなたは変更できません。

別の方法: 着信接続がある場合、paramの値はそのアップストリームコンポーネントの出力(ソース)によって定義されます。 paramを変更すると、その上流のコンポーネントの出力を変更するようになります。

+0

私の問題は、私の未知がパラメータであるということです。あるコンポーネントがテンプレートファイルを読み込み、それに応じてパラメータを設定し、別のコンポーネントがこれらのパラメータを使用して入力ファイルを書き込むようにします。多くのパラメータがあり、読み込み/書き込みプロセスに項目を追加するために編集する必要があるのは、1つのセットだけで済むので、モジュール化したいと考えています。 – kilojoules

0

担当者が低すぎるためコメントできませんが、これは読み取り/書き込みコンポーネントに対するコメントであり、質問に対する回答ではありません。私は、読み取り/書き込みとラッパークラスを純粋なPythonにして、トップレベルでopenmdaoを使用することをお勧めします。コンポーネントを3つすべて実行します。おそらくケースを並列化する必要がある場合は、グループをラップします。

+0

私の質問を更新して問題を表示します。私はトップレベルから書き込みパラメータを設定することはできません。私はvartreeの出力を読み、出力を同じvartreeで書くのに慣れています。これはもはやオプションではなく、最上位レベルから書き込みパラメータを設定するためにより複雑なスキームが必要であるように見えます。 – kilojoules

+0

'testio'インスタンスへのパスは' prob.root.testio.writer.file_to_write'になります。そして、私は入力のいくつかはアップストリームコンポーネントによって計算された出力に依存すると思います。そのために、これらを単に 'ReadWriteComp'にパラメータとして追加するだけです。 – frza

関連する問題