Как избежать сингулярности в анализе — включает ли OpenMDAO автоматически «полностью одновременное» решение?

#openmdao #simultaneous #coupling

#openmdao #одновременное #соединение

Вопрос:

Расчеты турбулентного пограничного слоя прерываются в точке разделения потока при решении с заданной граничной скоростью пограничного слоя, ue, в так называемом прямом методе.

Прямой метод

Это может быть устранено путем решения системы полностью одновременным или квази-одновременным способом. Подробная информация об обоих методах доступна здесь (https://www.rug.nl/research/portal/files/14407586/root.pdf ), стр. 38 и далее. По сути, полностью одновременный метод объединяет невязкие и вязкие уравнения в единую большую систему уравнений и решает их с помощью итерации Ньютона.

Полностью одновременный метод

В настоящее время я полностью внедрил решатель панели inviscid в ExplicitComponents. Я намерен реализовать решатель пограничного слоя также полностью с ExplicitComponents. Я не уверен, приведет ли соединение этих двух групп к процедуре выполнения, подобной методу direct, или она будет работать как метод fully-synchronous. Я отмечаю, что в документе OpenMDAO указано, что компоненты решаются «как единая нелинейная система уравнений», и что переформулировка из явных компонентов в неявную систему обрабатывается OpenMDAO автоматически.

Означает ли это, что если я объединю свои два анализа (опять же, состоящие исключительно из явных компонентов) и настрою группу на решение с помощью решателя Newton, я получу полностью одновременное решение «бесплатно»? Это кажется слишком хорошим, чтобы быть правдой, поскольку в конечном итоге компонент, который интегрирует уравнения пограничного слоя, должен будет принять некоторый заданный ue в качестве входных данных, а затем столкнется с сингулярностью при выполнении своего метода compute () .

Если выполнение вышеуказанного вместо этого заставит его выполняться как прямой метод и приведет к сингулярности, (кратко) какие изменения мне нужно внести, чтобы избежать этого? Потребует ли это неявного определения компонентов пограничного слоя?

Ответ №1:

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

Если бы вы использовали решатель NonlinearBlockGS в tope, он решал бы в слабой форме. Если бы вы использовали NewtonSolver наверху, он решался бы как одна большая монолитная система. Это свойство действительно вытекает из уникальной структуры того, как OpenMDAO хранит вещи.

Есть несколько предостережений. Я бы предположил, что ваш код панели реализован как набор промежуточных вычислений, разбитых на несколько компонентов. Если это так, то NewtonSolver будет обрабатывать каждую промежуточную переменную так, как будто это была ее собственная переменная состояния. Другими словами, у вас будет больше, чем просто delta u_e состояния and as , но также и все промежуточные вычисления.

Это может быть несколько нестабильным (хотя это может работать просто отлично, так что попробуйте!). Возможно, вам понадобится гибрид между слабой и сильной формами, который может быть достигнут с помощью solve_subsystems опции в NewtonSolver. Этот подход называется иерархическим методом Ньютона в разделе 5.1.2 документа OpenMDAO. Он будет выполнять под-итерацию NLBGS для каждой итерации Newton верхнего уровня. Это действует как форма нелинейного предобуславливателя, который может помочь стабилизировать сильную форму. Вы можете ограничить количество выполняемых подитераций, и в вашем случае вы можете использовать только 2 или 3 из-за риска сингулярности.

Комментарии:

1. Как именно это возможно, если компонент столкнется с сингулярностью в методе compute ()? Он (грубо говоря) принимает входные данные о краевых скоростях и массиве расстояний, а затем распределяет дифференциальные уравнения по расстояниям. Насколько я понимаю, этот процесс достигает сингулярности в точке разделения. OpenMDAO каким-то образом обходит функцию compute (), или мне показалось, что мой компонент работает по-другому?

2. Возможно, я не до конца понимаю. Я предположил, что уравнения были идентичны между двумя методами. Однако ваше описание «один раз проходит, а другой нет» подразумевает, что для интеграции существует другая математическая формулировка. Другими словами, управляющие уравнения задаются по-разному. Если это так, то OpenMDAO не творит чудес. Это может изменить способ решения заданного набора уравнений, но не может изменить сами уравнения

3. Я думаю, что то, что вы сказали, правильно, если я определяю компонент неявно — в какой-то момент я обновлю этот вопрос своей неявной формулировкой и посмотрю, возможно ли это с явной.