Path: blob/main/src/equations/laplace_diffusion_2d.jl
5586 views
@doc raw"""1LaplaceDiffusion2D(diffusivity, equations)23`LaplaceDiffusion2D` represents a scalar diffusion term ``\nabla \cdot (\kappa\nabla u))``4with diffusivity ``\kappa`` applied to each solution component defined by `equations`.5This is intended for use as the parabolic part of a hyperbolic-parabolic system, where the6hyperbolic part is defined by `equations`. For a purely parabolic diffusion equation7without any hyperbolic part, see [`LinearDiffusionEquation2D`](@ref).8"""9struct LaplaceDiffusion2D{E, N, T} <: AbstractLaplaceDiffusion{2, N}10diffusivity::T11equations_hyperbolic::E12end1314function LaplaceDiffusion2D(diffusivity, equations_hyperbolic)15return LaplaceDiffusion2D{typeof(equations_hyperbolic),16nvariables(equations_hyperbolic),17typeof(diffusivity)}(diffusivity, equations_hyperbolic)18end1920function varnames(variable_mapping, equations_parabolic::LaplaceDiffusion2D)21return varnames(variable_mapping, equations_parabolic.equations_hyperbolic)22end2324function flux(u, gradients, orientation::Integer, equations_parabolic::LaplaceDiffusion2D)25dudx, dudy = gradients26if orientation == 127return SVector(equations_parabolic.diffusivity * dudx)28else # if orientation == 229return SVector(equations_parabolic.diffusivity * dudy)30end31end3233# TODO: parabolic; should this remain in the equations file, be moved to solvers, or live in the elixir?34# The penalization depends on the solver, but also depends explicitly on physical parameters,35# and would probably need to be specialized for every different equation.36function penalty(u_outer, u_inner, inv_h, equations_parabolic::LaplaceDiffusion2D,37dg::ParabolicFormulationLocalDG)38return dg.penalty_parameter * (u_outer - u_inner) * equations_parabolic.diffusivity39end4041# General Dirichlet and Neumann boundary condition functions are defined in `src/equations/laplace_diffusion_1d.jl`.424344