Path: blob/main/src/callbacks_step/lbm_collision.jl
2055 views
# By default, Julia/LLVM does not use fused multiply-add operations (FMAs).1# Since these FMAs can increase the performance of many numerical algorithms,2# we need to opt-in explicitly.3# See https://ranocha.de/blog/Optimizing_EC_Trixi for further details.4@muladd begin5#! format: noindent67"""8LBMCollisionCallback()910Apply the Lattice-Boltzmann method (LBM) collision operator before each time step.11See [`LatticeBoltzmannEquations2D`](@ref) for further details.12"""13function LBMCollisionCallback()14DiscreteCallback(lbm_collision_callback, lbm_collision_callback,15save_positions = (false, false),16initialize = initialize!)17end1819# Always execute collision step after a time step, but not after the last step20lbm_collision_callback(u, t, integrator) = !isfinished(integrator)2122function Base.show(io::IO,23cb::DiscreteCallback{<:Any, <:typeof(lbm_collision_callback)})24@nospecialize cb # reduce precompilation time2526print(io, "LBMCollisionCallback()")27end2829function Base.show(io::IO, ::MIME"text/plain",30cb::DiscreteCallback{<:Any, <:typeof(lbm_collision_callback)})31@nospecialize cb # reduce precompilation time3233if get(io, :compact, false)34show(io, cb)35else36summary_box(io, "LBMCollisionCallback")37end38end3940# Execute collision step once in the very beginning41function initialize!(cb::DiscreteCallback{Condition, Affect!}, u, t,42integrator) where {Condition,43Affect! <: typeof(lbm_collision_callback)}44cb.affect!(integrator)45end4647# This method is called as callback after the StepsizeCallback during the time integration.48@inline function lbm_collision_callback(integrator)49dt = get_proposed_dt(integrator)50semi = integrator.p51mesh, equations, solver, cache = mesh_equations_solver_cache(semi)52@unpack collision_op = equations5354u_ode = integrator.u55u = wrap_array(u_ode, mesh, equations, solver, cache)5657@trixi_timeit timer() "LBM collision" apply_collision!(u, dt, collision_op, mesh,58equations, solver, cache)5960return nothing61end6263include("lbm_collision_dg2d.jl")64include("lbm_collision_dg3d.jl")65end # @muladd666768