Решатели уравнений ODE разбиения
Неявно-явное (IMEX) уравнение ODE
Неявно-явное (IMEX) уравнение ODE представляет собой задачу SplitODEProblem с двумя функциями:
где первая функция является жесткой частью, а вторая — нежесткой частью (неявная интеграция по f1, явная интеграция по f2).
Рекомендуемые методы
В большинстве случаев рекомендуется использовать метод KenCarp4. В случаях экстремальной жесткости или при высоких допусках хорошим вариантом может быть KenCarp3. Методы ARKODE, как правило, неэффективны и разнятся, если не настраивать параметры для задачи, хотя для достаточно больших уравнений PDE оптимально подходит метод ARKODE с linear_solver=:GMRES.
OrdinaryDiffEq.jl
-
SplitEuler: полностью явный метод первого порядка. Используется для проверки точности разбиений. -
IMEXEuler: явный метод Эйлера первого порядка в сочетании с неявным методом Эйлера. Только фиксированный временной шаг. -
CNAB2: метод Кранка — Николсон / Адамса — Бэшфорта второго порядка. Только фиксированный временной шаг. -
CNLF: метод Кранка — Николсон с перешагиванием второго порядка. Только фиксированный временной шаг. -
SBDF2: IMEX метод BDF второго порядка. Только фиксированный временной шаг. -
SBDF3: IMEX метод BDF третьего порядка. Только фиксированный временной шаг. В разработке. -
SBDF4: IMEX метод BDF четвертого порядка. Только фиксированный временной шаг. В разработке. -
KenCarp3: A-L-устойчивый очень точный метод ESDIRK третьего порядка. -
KenCarp4: A-L-устойчивый очень точный метод ESDIRK четвертого порядка. -
KenCarp47: A-L-устойчивый очень точный метод ESDIRK четвертого порядка с разбиением. -
KenCarp5: A-L-устойчивый очень точный метод ESDIRK пятого порядка. -
KenCarp58: A-L-устойчивый очень точный восьмиступенчатый метод ESDIRK пятого порядка с разбиением.
Sundials.jl
-
ARKODE: аддитивный метод Рунге — Кутты. Порядок между третьим и пятым. Список доступных вариантов приведен на странице решателя ODE.
Полулинейное уравнение ODE
Полулинейное уравнение ODE — это задача SplitODEProblem с одним линейным оператором и одной нелинейной функцией:
Подробнее о том, как определить линейные операторы из матрицы или конечно-разностной дискретизации операторов производных, см. на странице документации по DiffEqOperators.
Для этой формы подходят следующие алгоритмы.
OrdinaryDiffEq.jl
-
LawsonEuler— экспоненциальная схема Эйлера первого порядка. Только фиксированный временной шаг. -
NorsettEuler— экспоненциальная схема Рунге-Кутты первого порядка. Только фиксированный временной шаг. Псевдоним:ETD1. -
ETD2— метод экспоненциального временного дифференцирования второго порядка (в разработке). Только фиксированный временной шаг. Не поддерживает аппроксимацию Крылова. -
ETDRK2— экспоненциальная схема Рунге-Кутты второго порядка. Только фиксированный временной шаг. -
ETDRK3— экспоненциальная схема Рунге-Кутты третьего порядка. Только фиксированный временной шаг. -
ETDRK4— экспоненциальная схема Рунге-Кутты четвертого порядка. Только фиксированный временной шаг. -
HochOst4— экспоненциальная схема Рунге-Кутты четвертого порядка с жестким четвертым порядком. Только фиксированный временной шаг.
Отметим, что общие алгоритмы GenericIIF1 и GenericIIF2 допускают выбор nlsolve.
По умолчанию экспоненциальные методы кэшируют матричные функции, такие как exp(dt*A), для ускорения временных шагов для небольших систем. Для больших систем использование методов на основе версий Крылова позволяет «лениво» вычислять exp(dt*A)*v и подобные сущности и тем самым повышать производительность.
Чтобы указать решателю использовать методы Крылова, передайте krylov=true его конструктору. Также можно вручную установить размер подпространства Крылова, задав параметр m, который по умолчанию имеет значение 30. Например,
LawsonEuler(krylov = true, m = 50)
строит метод Лоусона-Эйлера, в котором используется подпространство Крылова размером, равным 50. Обратите внимание, что m задает только верхнюю границу размера подпространства Крылова. При выполнении условия сходимости (определяемого параметром reltol интегратора) произойдет «счастливый разрыв» и подпространство Крылова будет построено лишь частично.
Для более глубокого контроля алгоритмов Крылова можно изменить длину процедуры неполной ортогонализации (IOP) [1]], задав в конструкторе параметр iop. По умолчанию процедура IOP отключена, и используется полная итерация Арнольди. Заметим, что если линейный оператор является эрмитовым, всегда будет использоваться алгоритм Ланцоша, а параметр IOP игнорируется.