view src/BoundaryConditions/boundary_condition.jl @ 1405:da1b85c80a3f feature/boundary_conditions

Update export of functions
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Tue, 22 Aug 2023 21:52:52 +0200
parents 481960ca366f
children ee242c3fe4af
line wrap: on
line source

"""
    BoundaryCondition

A type for implementing data needed in order to impose a boundary condition.
Subtypes refer to perticular types of boundary conditions, e.g. Neumann conditions.
"""
abstract type BoundaryCondition{T} end

"""
    id(::BoundaryCondition)

The boundary identifier of the BoundaryCondition.
Must be implemented by subtypes.
"""
function id end

"""
    data(::BoundaryCondition)

If implemented, the data associated with the BoundaryCondition
"""
function data end

"""
    discretize(::BoundaryData, boundary_grid)

Returns an anonymous time-dependent function f, such that f(t) is
a `LazyArray` holding the `BoundaryData` discretized on `boundary_grid`.
"""
function discretize_data(grid, bc::BoundaryCondition)
    return eval_on(boundary_grid(grid, id(bc)), data(bc))
end

struct DirichletCondition{T} <: BoundaryCondition{T}
    data::T
    id::BoundaryIdentifier
end
id(bc::DirichletCondition) = bc.id
data(bc::DirichletCondition) = bc.data

struct NeumannCondition{T} <: BoundaryCondition{T}
    data::T
    id::BoundaryIdentifier 
end
id(bc::NeumannCondition) = bc.id
data(bc::NeumannCondition) = bc.data