view src/BoundaryConditions/boundary_condition.jl @ 1396:35840a0681d1 feature/boundary_conditions

Start drafting new implemenentation of boundary conditions
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Wed, 26 Jul 2023 23:11:02 +0200
parents bdcdbd4ea9cd
children 481960ca366f
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 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 NeumannCondition{DT} <: BoundaryCondition{DT}
    data::DT
    id::BoundaryIdentifier 
end
id(bc::NeumannCondition) = bc.id
data(bc::NeumannCondition) = bc.data

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