Для некоторых наших компонентов было бы полезно узнать, выполняется ли это как часть вычисления конечных разностей или нет. Одним из примеров может быть мешающий компонент, в котором мы хотели бы поддерживать один и тот же счетчик узлов и функцию распределения во время FD и допускать редеширование на основных этапах итерации. В старом OpenMDAO мы могли обнаружить это из компонента itername
. Можно ли повторно ввести эту информацию или уже имеющуюся в классе Component?OpenMDAO: флаг конечной разницы для Component.solve_nonlinear
ответ
Я не могу придумать какой-либо текущий способ выяснить, находитесь ли вы в FD при вызове solve_nonlinear, но это хорошая идея по причинам, которые вы упомянули.
В настоящее время у нас нет этой возможности, но другие также просили информировать вас, когда solve_nonlinear запускается и для сложного шага.
Один из способов сделать это - ввести необязательный_аргумент для решения_nonlinear, такой как call_mode="fd"
или call_mode="cs"
или call_mode="solve"
. Единственная проблема с этим подходом заключается в том, что его очень обратная сторона несовместима.
Другим подходом было бы добавить обычный компонент python к компоненту, который вы могли бы проверить как self.call_mode="solve"
и т. Д. Это было бы довольно легким изменением, и я думаю, что это послужит цели.
Последним возможным способом было бы поставить флаг в вектор неизвестных/параметров. Итак, вы должны проверить params.call_mode
, чтобы узнать, какой режим. Это несколько разумно, так как его значения параметра изменяются, когда вы идете на сложный шаг.
Я думаю, что мне нравится последний вариант лучший. И solve_nonlinear и apply_nonlinear нужно знать об этой информации. Но ни один из других методов не делает. Поэтому создание атрибута компонента кажется немного неуместным.
Думаю, мы сможем провести мозговой штурм некоторых идей, которые не требуют изменения API. –
Мы также хотели бы иметь эту возможность при использовании сложного шага. У меня нет предпочтения, передавать ли его с помощью «params» или как атрибут класса, который устанавливается/не задан родительским классом. Заранее спасибо за это! – frza