Наращивание Нагрузки в Нелинейной Задаче

Walter Frei 22/11/2013
Share this on Facebook Share this on Twitter Share this on LinkedIn

Как мы выяснили прежде в блог-статье по Решение Нелинейных Статических Конечно-Элементных Задач, не все нелинейные задачи решаются с помощью релаксационного метода Ньютона-Рафсона. В частности, выбор неправильных начальных условий или запуск задачи, не имеющей решения, приведет к тому, что решатель будет примитивным образом продолжать итерации, игнорируя отсутствие сходимости. Здесь мы познакомимся с более надежным подходом к решению нелинейных задач.

Пример Нелинейной Задачи

Рассмотрим снова систему с силой, приложенной к пружине с нелинейной жесткостью:
Пружина с нелинейной жесткостью

Мы можем решить эту задачу с помощью релаксационного метода Ньютона-Рафсона, до тех пор пока мы выбираем соответствующие начальные условия (ранее мы выбирали u_0=0). В другой статье блога, мы отмечали, что выбор начальных условий вне радиуса сходимости, например, любая точка u_0\le-1, приведет к сбою решателя. Далее, для этой задачи с единственной степенью свободы мы легко можем определить радиус сходимости, но для типичной конечно-элементной задачи сделать это будет гораздо труднее. Так что вместо того, чтобы пытаться найти радиус сходимости, давайте применим немного физической интуиции к данной проблеме.

Наращивание Нагрузки Улучшает Надежность

Обычно мы прикладываем нагрузку, p_f, к системе и пытаемся найти решение, отталкиваясь от начальных условий, u_0. Но что произойдет, если мы приложим нагрузку p=0? Первый Закон Ньютона гласит, что система без нагрузки не будет иметь деформаций. Так что же произойдет, если мы приложим нагрузку, p_1, большую нуля на бесконечно малую величину? Разумно будет предположить, что метод Ньютона-Рафсона, стартующий с u_0=0, будет способен отыскать решение, u_1. Не менее разумным будет повтор данной процедуры с нагрузкой, увеличенной до величины p_2 такой что p_1<p_2<p_f. Если приращение нагрузки достаточно мало, то мы снова найдем решение u_2,. Повторяя этот алгоритм, мы, в конце концов, получим окончательную нагрузку p_f, и желаемое нами решение. То есть, начиная с нулевой нагрузки и нулевого решения, мы постепенно усиливаем (наращиваем) нагрузку, доводя ее до желаемого значения. Эта процедура графически отображена на рисунке ниже. Темные стрелки отмечают место, с которого стартуют итерации по Ньютону-Рафсону для определенного значения нагрузки.

График демонстрирующий наращивание нагрузки с алгоритмом, который называется методом продолжения по нагрузке

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

Этот алгоритм, не только предоставляет хороший способ нахождения стартовой позиции для итераций по Ньютону –Рафсону, но он также является полезным в случае задачи не имеющей решения. Опять вернемся к задаче, в которой пружина становится слабее при растяжении, где f(u)=2-\exp(-u)u как обсуждалось ранее. Эта задача не имеет решения. В этом случае мы можем аналитически найти, что при любой нагрузке p>\exp(-1) решение не существует. Но если мы используем меньшую нагрузку, то система является стабильной. На самом деле, в нашей постановке задачи система является би-стабильной; есть два решения для каждого значения нагрузки p \le \exp(-1). Хотя интерес представляет только та ветвь решений, которая получается при стартовых условиях p=0 и u_0=0. Представим графически f(u):

График задачи, в которой пружина становится слабее при растяжении

Теперь предположим, что нам также неизвестно, что максимально возможное значение нагрузки равно p = \exp(-1), и посмотрим, что произойдет, когда среда COMSOL попытается найти решение этой задачи для p = 0.2, 0.3, 0.4. Если мы построим график f(u) для p = 0.2, 0.3, то мы увидим, что для p = 0.4 решение не может быть найдено. В этом случае решатель с методом продолжения среды COMSOL автоматически выполнит поиск в интервале между последним успешным значением нагрузки и следующим желаемым. То есть решатель попытается вернуться к последнему состоянию, чтобы найти промежуточное решение, которое затем используется как стартовое значение для следующего шага. Этот алгоритм используется всякий раз, когда опция Continuation Method (Метод продолжения) (или опция Parametric Sweep (Параметрическое Исследование)) выбирается в настройках параметров при решении стационарной задачи. В этом случае, решатель сможет найти приблизительное значение нагрузки при сбое системы, что также является очень полезной информацией.

Итог и Заключительные Замечания

Мы познакомились с концепцией наращивания нагрузки и использованием метода продолжения для улучшения устойчивости метода Ньютона. Так как система без нагрузки имеет известное решение, то с помощью этого способа можно снять вопрос о выборе значения для начального приближения. Мы также узнали, что возможно приблизительно определить нагрузку при срыве решения. По этим причинам, наращивание нагрузки является одной из важных методик, которую необходимо понимать при постановке и решении нелинейных статических конечно-элементных задач.

COMSOL Log-файл

Давайте посмотрим log-файл нелинейной конечно-элементной задачи. Мы будем решать задачу, описанную выше, про нелинейную пружину, которая становится слабее при растяжении. Мы знаем, что эта задача не имеет решения, так что посмотрим, что происходит:

Stationary Solver1 inSolver 1 started at15-Jul-201311:26:46.
Parametric solver
Nonlinear solver
Number of degrees of freedom solved for: 1.
 
Parameter P = 0.2.
Symmetric matrices found.
Scales for dependent variables:
State variable u (mod1.ODE1): 1
Iter      ErrEst     Damping    Stepsize #Res #Jac #Sol
   1        0.18   1.0000000           1    2    1    2
   2       0.013   1.0000000        0.22    3    2    4
   3    6.5e-005   1.0000000       0.015    4    3    6
Parameter P = 0.3.
Iter      ErrEst     Damping    Stepsize #Res #Jac #Sol
   1       0.025   1.0000000        0.21    7    4    9
   2     0.00069   1.0000000       0.031    8    5   11
 
Parameter P = 0.4.
Iter      ErrEst     Damping    Stepsize #Res #Jac #Sol
   1        0.89   1.0000000         2.7   11    6   14
   2         0.3   0.8614583        0.76   12    7   16
   3         0.2   0.8154018        0.43   13    8   18
   4        0.31   0.4194888        0.42   14    9   20
   5        0.86   0.0836516         0.9   15   10   22
Parameter P = 0.325.
Iter      ErrEst     Damping    Stepsize #Res #Jac #Sol
   1       0.089   1.0000000         0.4   18   12   26
   2       0.014   1.0000000        0.13   19   13   28
   3      0.0003   1.0000000       0.018   20   14   30
 
Parameter P = 0.375.
Iter      ErrEst     Damping    Stepsize #Res #Jac #Sol
   1       0.099   1.0000000        0.32   23   15   33
   2       0.079   0.9390806        0.19   24   16   35
   3         0.2   0.3028345        0.24   25   17   37
   4        0.94   0.0302834        0.95   26   18   39
 
... SOME PARTS OF THIS LOG FILE OMITTED ...
 
Parameter P = 0.368359.
Iter      ErrEst     Damping    Stepsize #Res #Jac #Sol
   1       0.046   1.0000000       0.057   80   49  112
   2       0.061   0.3013806       0.072   81   50  114
Stationary Solver1 inSolver 1: Solution time: 0 s
                                 Physical memory: 471 MB
                                 Virtual memory: 569 MB

Решатель также выдает сообщение об ошибке:

Failed to find a solution for all parameters,
even when using the minimum parameter step.
No convergence, even when using the minimum damping factor.
Returned solution is not converged.

Начало log-файла такое же, как и прежде, за исключением того, что решатель сообщает, что теперь был вызван Parametric Solver (Параметрический Решатель). Мы видим, что для P = 0.2 и P = 0.3, решатель завершил процедуру. Для P = 0.4, решатель дал сбой, после чего автоматически вернулся к предыдущей успешной итерации, чтобы найти промежуточную точку существования решения. Некоторые из промежуточных шагов были для краткости опущены, но мы видим, что параметрический решатель завершил работу очень близко к аналитическому решению для максимально возможной нагрузки. Теперь с этими данными, мы сможем перезапустить задачу с другим набором параметров, а кроме этого мы получили полезную информацию о том, как система ведет себя при приближении к критической нагрузке.


Темы публикаций

Загрузка комментариев...

Темы публикаций


Теги

3D печать Cерия "Гибридное моделирование" Введение в среду разработки приложений Видео Волновые электромагнитные процессы Глазами пользователя Графен Интернет вещей Кластеры Моделирование высокочастотных электромагнитных явлений на различных пространственных масштабах Модуль AC/DC Модуль MEMS Модуль Акустика Модуль Волновая оптика Модуль Вычислительная гидродинамика Модуль Геометрическая оптика Модуль Динамика многих тел Модуль Композитные материалы Модуль Коррозия Модуль Механика конструкций Модуль Миксер Модуль Нелинейные конструкционные материалы Модуль Оптимизация Модуль Плазма Модуль Полупроводники Модуль Радиочастоты Модуль Роторная динамика Модуль Теплопередача Модуль Течение в трубопроводах Модуль Трассировка частиц Модуль Химические реакции Модуль Электрохимия Модуль аккумуляторов и топливных элементов Охлаждение испарением Пищевые технологии Рубрика Решатели Серия "Геотермальная энергия" Серия "Конструкционные материалы" Серия "Электрические машины" Серия “Моделирование зубчатых передач” Сертифицированные консультанты Технический контент Указания по применению физика спорта