Mercurial > repos > public > sbplib_julia
changeset 1167:fd80e9a0ef99 feature/boundary_conditions
Make use of discretize in sat functions
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Wed, 07 Dec 2022 21:56:00 +0100 |
parents | d26aef8a5987 |
children | ea2e8254820a |
files | src/BoundaryConditions/sat.jl |
diffstat | 1 files changed, 46 insertions(+), 43 deletions(-) [+] |
line wrap: on
line diff
diff -r d26aef8a5987 -r fd80e9a0ef99 src/BoundaryConditions/sat.jl --- a/src/BoundaryConditions/sat.jl Wed Dec 07 21:39:07 2022 +0100 +++ b/src/BoundaryConditions/sat.jl Wed Dec 07 21:56:00 2022 +0100 @@ -6,57 +6,60 @@ """ function sat_tensors end +# TODO: Docs must be more specific in what this function does... """ - sat(op, grid, bc::BoundaryCondition{ConstantBoundaryData{T}}, params...) + sat(op, grid, bc::BoundaryCondition, params...) -Simultaneous-Approximation-Term for constant boundary data. f = sat(op, grid, bc) returns -an anonymous function, such that f(u) is a `LazyTensorApplication` weakly imposing the BC. +Simultaneous-Approximation-Term for general BoundaryCondition bc. f = sat(op, grid, bc) returns +an anonymous function, such that f(t,u) is a `LazyTensorApplication` weakly imposing bc +at time t. """ -function sat(op, grid, bc::BoundaryCondition{ConstantBoundaryData{T}}, params...) where T +function sat(op, grid, bc::BoundaryCondition, params...) closure, penalty = sat_tensors(op, grid, bc, params...) - b_sz = size(boundary_grid(grid, bc.id)) - g = fill(data(bc), b_sz) - if iszero(g) - return u -> closure(u) - else - return u -> closure(u) + penalty(g) - end + data_array = discretize(data(bc),boundary_grid(grid, bc.id)) + return (t,u) -> closure(u) + penalty(data_array(t)) +end + +function sat(op, grid, bc::BoundaryCondition{ZeroBoundaryData}, params...) + closure = sat_tensors(op, grid, bc, params...) + return (t,u) -> closure(u) end -""" - sat(op, grid, bc::BoundaryCondition{SpaceDependentBoundaryData{T}}, params...) + +# """ +# sat(op, grid, bc::BoundaryCondition{SpaceDependentBoundaryData{T}}, params...) -Simultaneous-Approximation-Term for space-dependent boundary data. f = sat(op, grid, bc) returns -an anonymous function, such that f(u) is a `LazyTensorApplication` weakly imposing the BC. -""" -function sat(op, grid, bc::BoundaryCondition{SpaceDependentBoundaryData{T}}, params...) where T - closure, penalty = sat_tensors(op, grid, bc, params...) - g = data(bc) - return u -> closure(u) + penalty(g) -end +# Simultaneous-Approximation-Term for space-dependent boundary data. f = sat(op, grid, bc) returns +# an anonymous function, such that f(u) is a `LazyTensorApplication` weakly imposing the BC. +# """ +# function sat(op, grid, bc::BoundaryCondition{SpaceDependentBoundaryData{T}}, params...) where T +# closure, penalty = sat_tensors(op, grid, bc, params...) +# g = data(bc) +# return u -> closure(u) + penalty(g) +# end -""" - sat(op, grid, bc::BoundaryCondition{SpaceDependentBoundaryData{T}}, params...) +# """ +# sat(op, grid, bc::BoundaryCondition{SpaceDependentBoundaryData{T}}, params...) -Simultaneous-Approximation-Term for time-dependent boundary data. f = sat(op, grid, bc) returns -an anonymous function, such that f(u,t) is a `LazyTensorApplication` weakly imposing the BC at time t. -""" -function sat(op, grid, bc::BoundaryCondition{TimeDependentBoundaryData{T}}, params...) where T - closure, penalty = sat_tensors(op, grid, bc, params...) - b_sz = size(boundary_grid(grid, bc.id)) - b_vec = ones(eltype(grid), b_sz) - g = data(bc) - return (u,t) -> closure(u) + g(t)*penalty(b_vec) -end +# Simultaneous-Approximation-Term for time-dependent boundary data. f = sat(op, grid, bc) returns +# an anonymous function, such that f(u,t) is a `LazyTensorApplication` weakly imposing the BC at time t. +# """ +# function sat(op, grid, bc::BoundaryCondition{TimeDependentBoundaryData{T}}, params...) where T +# closure, penalty = sat_tensors(op, grid, bc, params...) +# b_sz = size(boundary_grid(grid, bc.id)) +# b_vec = ones(eltype(grid), b_sz) +# g = data(bc) +# return (u,t) -> closure(u) + g(t)*penalty(b_vec) +# end -""" - sat(op, grid, bc::BoundaryCondition{SpaceDependentBoundaryData{T}}, params...) +# """ +# sat(op, grid, bc::BoundaryCondition{SpaceDependentBoundaryData{T}}, params...) -Simultaneous-Approximation-Term for space-time-dependent boundary data. f = sat(op, grid, bc) returns -an anonymous function, such that f(u,t) is a `LazyTensorApplication` weakly imposing the BC at time t. -""" -function sat(op, grid, bc::BoundaryCondition{SpaceTimeDependentBoundaryData{T}}, params...) where T - closure, penalty = sat_tensors(op, grid, bc, params...) - g = data(bc) - return (u,t) -> closure(u) + penalty(g(t)) -end \ No newline at end of file +# Simultaneous-Approximation-Term for space-time-dependent boundary data. f = sat(op, grid, bc) returns +# an anonymous function, such that f(u,t) is a `LazyTensorApplication` weakly imposing the BC at time t. +# """ +# function sat(op, grid, bc::BoundaryCondition{SpaceTimeDependentBoundaryData{T}}, params...) where T +# closure, penalty = sat_tensors(op, grid, bc, params...) +# g = data(bc) +# return (u,t) -> closure(u) + penalty(g(t)) +# end \ No newline at end of file