一部のコンポーネントでは、それが有限差分計算の一部として実行されているかどうかを知ることが役立ちます。1 つの例は、FD 中に同じノード数と分布関数を維持し、主要な反復ステップ中に再メッシュできるようにするメッシュ コンポーネントです。古い OpenMDAO では、コンポーネントのitername
. これを再導入することは可能でしょうか、それともその情報は Component クラスで既に利用可能ですか?
2 に答える
現在、その機能はありませんが、複雑なステップに対しても solve_nonlinear が実行されているときに通知されるように他の人から求められています。
これを行う 1 つの方法は、call_mode="fd"
orcall_mode="cs"
やなどの Solve_nonlinear に optional_argument を導入することですcall_mode="solve"
。このアプローチの唯一の問題は、後方互換性が非常に低いことです。
別のアプローチは、などのようにチェックできるコンポーネントに通常の python 属性を追加することですself.call_mode="solve"
。これは非常に簡単な変更であり、目的を果たすと思います。
最後に考えられる方法の 1 つは、unknowns/params ベクトルにフラグを入れることです。したがって、params.call_mode
どのモードかを確認します。これは、複雑なステップを実行するときに変更されるパラメーター値であるため、やや賢明です。
私は最後のオプションが一番好きだと思います。solve_nonlinear と apply_nonlinear の両方が、この情報について知る必要があります。しかし、他の方法はどれもそうではありません。したがって、それをコンポーネント属性にするのは少し場違いに思えます。
solve_nonlinear が呼び出されているときに FD 内にいるかどうかを判断する現在の方法は考えられませんが、言及した理由からは良い考えです。