Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
trixi-framework
GitHub Repository: trixi-framework/Trixi.jl
Path: blob/main/src/equations/linear_diffusion_equation_1d.jl
5586 views
1
# By default, Julia/LLVM does not use fused multiply-add operations (FMAs).
2
# Since these FMAs can increase the performance of many numerical algorithms,
3
# we need to opt-in explicitly.
4
# See https://ranocha.de/blog/Optimizing_EC_Trixi for further details.
5
@muladd begin
6
#! format: noindent
7
8
@doc raw"""
9
LinearDiffusionEquation1D(diffusivity)
10
11
The linear diffusion equation (or heat equation) in one space dimension with constant `diffusivity` ``\kappa``:
12
```math
13
\partial_t u = \partial_1 \left( \kappa \partial_1 u \right).
14
```
15
Unlike [`LaplaceDiffusion1D`](@ref), which represents the parabolic part of a
16
hyperbolic-parabolic equation, `LinearDiffusionEquation1D` represents a purely parabolic
17
equation without any hyperbolic part.
18
"""
19
struct LinearDiffusionEquation1D{RealT <: Real} <: AbstractLaplaceDiffusion{1, 1}
20
diffusivity::RealT
21
end
22
23
varnames(::typeof(cons2cons), ::LinearDiffusionEquation1D) = ("scalar",)
24
varnames(::typeof(cons2prim), ::LinearDiffusionEquation1D) = ("scalar",)
25
varnames(::typeof(cons2entropy), ::LinearDiffusionEquation1D) = ("scalar",)
26
27
@inline cons2prim(u, equations::LinearDiffusionEquation1D) = u
28
@inline cons2entropy(u, equations::LinearDiffusionEquation1D) = u
29
30
@inline entropy(u::Real, ::LinearDiffusionEquation1D) = 0.5f0 * u^2
31
@inline entropy(u, equations::LinearDiffusionEquation1D) = entropy(u[1], equations)
32
33
@inline function flux(u, gradients, orientation::Integer,
34
equations::LinearDiffusionEquation1D)
35
dudx, = gradients
36
# orientation == 1
37
return equations.diffusivity * dudx
38
end
39
end # @muladd
40
41