Nonlinear Diffusion
This function handles expressions of the form ðₙ(D(ðₘu))
where n,m > 0
and D
is a function of u
i.e. they vary as u(x,t)
and D(u)
. The expansion can be carried out via general Leibniz rule.
A boundary condition operator bc
is first operated on u
resulting in a boundary padded vector bc*u
. Since D
is a function of u
, its discrete values can be obtained at grid points once u
has been padded. After producing these two functions in the grid range, we can expand the given expression via binomial expansion through the nonlinear_diffusion
and nonlinear_diffusion!
functions and produce the final discretized derivatives.
The functions implicitly put the CenteredDifference
operator to use for computing derivates of various orders, e.g. uᵏ = CenteredDifference(k,approx_order,dx,nknots)*u
, helping us generate a symmetric discretization. The two functions differ in terms of memory allocation, since the non-!
one will allocate memory to the output whereas the !
one can be used for non-allocating applications.
Functions
The two functions are as follows :
nonlinear_diffusion(second_differential_order::Int, first_differential_order::Int, approx_order::Int,
p::AbstractVector{T}, q::AbstractVector{T}, dx::Union{T , AbstractVector{T} , Real},
nknots::Int) where {T<:Real, N}
nonlinear_diffusion!(du::AbstractVector{T}, second_differential_order::Int, first_differential_order::Int,
approx_order::Int,p::AbstractVector{T}, q::AbstractVector{T},
dx::Union{T , AbstractVector{T} , Real}, nknots::Int) where {T<:Real, N}
Arguments :
du
: an inputAbstractVector
similar tou
, to store the final discretized expression.second_differential_order
: the overall order of derivative on the expression.(n)
first_differential_order
: the inner order of derivative to discretize foru
.(m)
approx_order
: the order of the discretization in terms of O(dx^order).p
: boundary paddedD
.q
: boundary paddedu
obtained bybc*u
.dx
: spacing of the discretization. Ifdx
is aNumber
, the discretization is uniform. Ifdx
is an array, then the discretization is non-uniform.nknots
: the length of discretization in the direction of operator.