Path: blob/main/src/equations/linear_diffusion_equation_1d.jl
5586 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@doc raw"""8LinearDiffusionEquation1D(diffusivity)910The linear diffusion equation (or heat equation) in one space dimension with constant `diffusivity` ``\kappa``:11```math12\partial_t u = \partial_1 \left( \kappa \partial_1 u \right).13```14Unlike [`LaplaceDiffusion1D`](@ref), which represents the parabolic part of a15hyperbolic-parabolic equation, `LinearDiffusionEquation1D` represents a purely parabolic16equation without any hyperbolic part.17"""18struct LinearDiffusionEquation1D{RealT <: Real} <: AbstractLaplaceDiffusion{1, 1}19diffusivity::RealT20end2122varnames(::typeof(cons2cons), ::LinearDiffusionEquation1D) = ("scalar",)23varnames(::typeof(cons2prim), ::LinearDiffusionEquation1D) = ("scalar",)24varnames(::typeof(cons2entropy), ::LinearDiffusionEquation1D) = ("scalar",)2526@inline cons2prim(u, equations::LinearDiffusionEquation1D) = u27@inline cons2entropy(u, equations::LinearDiffusionEquation1D) = u2829@inline entropy(u::Real, ::LinearDiffusionEquation1D) = 0.5f0 * u^230@inline entropy(u, equations::LinearDiffusionEquation1D) = entropy(u[1], equations)3132@inline function flux(u, gradients, orientation::Integer,33equations::LinearDiffusionEquation1D)34dudx, = gradients35# orientation == 136return equations.diffusivity * dudx37end38end # @muladd394041