view src/BoundaryConditions/boundary_condition.jl @ 1163:c9fdfb1efba8 feature/boundary_conditions

Merge with default
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Wed, 12 Oct 2022 10:45:47 +0200
parents 667e9c588f23
children d26aef8a5987
line wrap: on
line source

"""
    BoundaryDataType

A type for storing boundary data, e.g. constant, space-dependent, time-dependent etc.
Subtypes of `BoundaryDataType` should store the boundary data in a field `val`, i.e.
`struct MyBoundaryDataType{T} <: BoundaryDataType val::T end`.
"""
abstract type BoundaryDataType end

struct ConstantBoundaryData{T} <: BoundaryDataType
    val::T
end

struct SpaceDependentBoundaryData{T} <: BoundaryDataType
    val::T
end

struct TimeDependentBoundaryData{T} <: BoundaryDataType
    val::T
end

struct SpaceTimeDependentBoundaryData{T} <: BoundaryDataType
    val::T
end

"""
    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.
"""
# TODO: Parametrize the boundary id as well?
abstract type BoundaryCondition{T<:BoundaryDataType} end

data(bc::BoundaryCondition) = bc.data.val

struct NeumannCondition{BDT<:BoundaryDataType} <: BoundaryCondition{BDT}
    id::BoundaryIdentifier
    data::BDT
end

struct DirichletCondition{BDT<:BoundaryDataType} <: BoundaryCondition{BDT}
    id::BoundaryIdentifier
    data::BDT
end

struct RobinCondition{BDT<:BoundaryDataType,T<:Real} <: BoundaryCondition{BDT}
    id::BoundaryIdentifier
    data::BDT
    α::T
    β::T
end