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
--- 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