Решатели уравнений 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 игнорируется.