Документация Engee

Интеграция индикатора хода выполнения

DifferentialEquations.jl интегрируется с индикатором хода выполнения Juno, что позволяет сделать длительные вычисления более удобными. По умолчанию для решателей ODE и SDE эта функция отключена, но может быть включена с помощью именованного аргумента progress=true. Индикатор хода выполнения обновляется каждые progress_steps временных шагов, значение по умолчанию которого равно 1000. Отметим, что заданное очень низкое значение может привести к снижению производительности, хотя из некоторых базовых тестов следует, что при обновлениях не менее 1000 шагов по числу (самые быстрые задачи) заметного ухудшения производительности не наблюдается, что дает высокую верхнюю границу.

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

Использование индикаторов хода выполнения вне Juno

Сведения об использовании индикаторов хода выполнения Juno см. на странице о TerminalLoggers.jl. Следуйте этим указаниям, чтобы добавить TerminalLogging в startup.jl, если вы хотите, чтобы эта функция была включена по умолчанию.

В противном случае следуйте приведенному ниже примеру. Обратите внимание, что global_logger инициализируется перед любым другим вызовом Julia. Этот шаг является крайне важным. В противном случае возможность ведения журнала в терминале не появится.

using Logging: global_logger
using TerminalLoggers: TerminalLogger
global_logger(TerminalLogger())

using OrdinaryDiffEq

solve(ODEProblem((u, p, t) -> (sleep(0.01); -u), 1.0, nothing),
      Euler();
      dt = 0.5,
      tspan = (0.0, 1000.0),
      progress = true,
      progress_steps = 1)