Mercurial > repos > public > sbplib_julia
changeset 1134:667e9c588f23 feature/boundary_conditions
Add type for different kind of boundary data and refactor the BoundaryConditions such that they are general w.r.t the boundary data type
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Tue, 11 Oct 2022 18:12:40 +0200 |
parents | a8c8517a310f |
children | 05b1d6fd6401 |
files | src/BoundaryConditions/BoundaryConditions.jl src/BoundaryConditions/boundary_condition.jl |
diffstat | 2 files changed, 65 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/BoundaryConditions/BoundaryConditions.jl Wed Oct 05 22:05:23 2022 +0200 +++ b/src/BoundaryConditions/BoundaryConditions.jl Tue Oct 11 18:12:40 2022 +0200 @@ -1,12 +1,24 @@ module BoundaryConditions +export BoundaryDataType +export ConstantBoundaryData +export SpaceDependentBoundaryData +export TimeDependentBoundaryData +export SpaceDependentBoundaryData + export BoundaryCondition -export BoundaryConditionType -export Neumann -export Dirichlet +export NeumannCondition +export DirichletCondition +export RobinCondition + +export data +export sat +export sat_tensors using Sbplib.Grids +using Sbplib.LazyTensors include("boundary_condition.jl") +include("sat.jl") end # module
--- a/src/BoundaryConditions/boundary_condition.jl Wed Oct 05 22:05:23 2022 +0200 +++ b/src/BoundaryConditions/boundary_condition.jl Tue Oct 11 18:12:40 2022 +0200 @@ -1,11 +1,52 @@ -abstract type BoundaryConditionType end -struct Dirichlet <: BoundaryConditionType end -struct Neumann <: BoundaryConditionType end +""" + 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 -struct BoundaryCondition{BCType <: BoundaryConditionType, ID <: BoundaryIdentifier, DType} - id::ID - data::DType - BoundaryCondition{BCType}(id::ID, data::DType) where {BCType <: BoundaryConditionType, - ID <: BoundaryIdentifier, - DType} = new{BCType,ID,DType}(id, data) +""" + 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 \ No newline at end of file