Path: blob/main/src/equations/laplace_diffusion_1d.jl
2055 views
@doc raw"""1LaplaceDiffusion1D(diffusivity, equations)23`LaplaceDiffusion1D` represents a scalar diffusion term ``\nabla \cdot (\kappa\nabla u))``4with diffusivity ``\kappa`` applied to each solution component defined by `equations`.5"""6struct LaplaceDiffusion1D{E, N, T} <: AbstractLaplaceDiffusion{1, N}7diffusivity::T8equations_hyperbolic::E9end1011function LaplaceDiffusion1D(diffusivity, equations_hyperbolic)12LaplaceDiffusion1D{typeof(equations_hyperbolic), nvariables(equations_hyperbolic),13typeof(diffusivity)}(diffusivity, equations_hyperbolic)14end1516function varnames(variable_mapping, equations_parabolic::LaplaceDiffusion1D)17varnames(variable_mapping, equations_parabolic.equations_hyperbolic)18end1920function flux(u, gradients, orientation::Integer, equations_parabolic::LaplaceDiffusion1D)21dudx = gradients22# orientation == 123return equations_parabolic.diffusivity * dudx24end2526# Dirichlet and Neumann boundary conditions for use with parabolic solvers in weak form.27# Note that these are general, so they apply to LaplaceDiffusion in any spatial dimension.28@inline function (boundary_condition::BoundaryConditionDirichlet)(flux_inner, u_inner,29normal::AbstractVector,30x, t,31operator_type::Gradient,32equations_parabolic::AbstractLaplaceDiffusion)33return boundary_condition.boundary_value_function(x, t, equations_parabolic)34end3536@inline function (boundary_condition::BoundaryConditionDirichlet)(flux_inner, u_inner,37normal::AbstractVector,38x, t,39operator_type::Divergence,40equations_parabolic::AbstractLaplaceDiffusion)41return flux_inner42end4344@inline function (boundary_condition::BoundaryConditionNeumann)(flux_inner, u_inner,45normal::AbstractVector,46x, t,47operator_type::Divergence,48equations_parabolic::AbstractLaplaceDiffusion)49return boundary_condition.boundary_normal_flux_function(x, t, equations_parabolic)50end5152@inline function (boundary_condition::BoundaryConditionNeumann)(flux_inner, u_inner,53normal::AbstractVector,54x, t,55operator_type::Gradient,56equations_parabolic::AbstractLaplaceDiffusion)57return flux_inner58end596061