2016-07-12 5 views
0

Для некоторых наших компонентов было бы полезно узнать, выполняется ли это как часть вычисления конечных разностей или нет. Одним из примеров может быть мешающий компонент, в котором мы хотели бы поддерживать один и тот же счетчик узлов и функцию распределения во время FD и допускать редеширование на основных этапах итерации. В старом OpenMDAO мы могли обнаружить это из компонента itername. Можно ли повторно ввести эту информацию или уже имеющуюся в классе Component?OpenMDAO: флаг конечной разницы для Component.solve_nonlinear

ответ

0

Я не могу придумать какой-либо текущий способ выяснить, находитесь ли вы в FD при вызове solve_nonlinear, но это хорошая идея по причинам, которые вы упомянули.

0

В настоящее время у нас нет этой возможности, но другие также просили информировать вас, когда solve_nonlinear запускается и для сложного шага.

Один из способов сделать это - ввести необязательный_аргумент для решения_nonlinear, такой как call_mode="fd" или call_mode="cs" или call_mode="solve". Единственная проблема с этим подходом заключается в том, что его очень обратная сторона несовместима.

Другим подходом было бы добавить обычный компонент python к компоненту, который вы могли бы проверить как self.call_mode="solve" и т. Д. Это было бы довольно легким изменением, и я думаю, что это послужит цели.

Последним возможным способом было бы поставить флаг в вектор неизвестных/параметров. Итак, вы должны проверить params.call_mode, чтобы узнать, какой режим. Это несколько разумно, так как его значения параметра изменяются, когда вы идете на сложный шаг.

Я думаю, что мне нравится последний вариант лучший. И solve_nonlinear и apply_nonlinear нужно знать об этой информации. Но ни один из других методов не делает. Поэтому создание атрибута компонента кажется немного неуместным.

+0

Думаю, мы сможем провести мозговой штурм некоторых идей, которые не требуют изменения API. –

+0

Мы также хотели бы иметь эту возможность при использовании сложного шага. У меня нет предпочтения, передавать ли его с помощью «params» или как атрибут класса, который устанавливается/не задан родительским классом. Заранее спасибо за это! – frza