changeset 268:f67ce2eb6019 boundary_conditions

Remove property spacing in EquidistantGrid, due to redundancy.
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Thu, 05 Dec 2019 09:44:34 +0100
parents 634453a4e1d8
children ccef055233a2
files DiffOps/src/laplace.jl Grids/src/EquidistantGrid.jl
diffstat 2 files changed, 13 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/DiffOps/src/laplace.jl	Thu Dec 05 09:28:04 2019 +0100
+++ b/DiffOps/src/laplace.jl	Thu Dec 05 09:44:34 2019 +0100
@@ -10,17 +10,17 @@
 
 # u = L*v
 function apply(L::Laplace{1}, v::AbstractVector, i::Int)
-    uᵢ = L.a * SbpOperators.apply(L.op, L.grid.spacing[1], v, i)
+    uᵢ = L.a * SbpOperators.apply(L.op, inverse_spacing(L.grid)[1], v, i)
     return uᵢ
 end
 
 @inline function apply(L::Laplace{2}, v::AbstractArray{T,2} where T, I::Tuple{Index{R1}, Index{R2}}) where {R1, R2}
     # 2nd x-derivative
     @inbounds vx = view(v, :, Int(I[2]))
-    @inbounds uᵢ = L.a*SbpOperators.apply(L.op, L.grid.inverse_spacing[1], vx , I[1])
+    @inbounds uᵢ = L.a*SbpOperators.apply(L.op, inverse_spacing(L.grid)[1], vx , I[1])
     # 2nd y-derivative
     @inbounds vy = view(v, Int(I[1]), :)
-    @inbounds uᵢ += L.a*SbpOperators.apply(L.op, L.grid.inverse_spacing[2], vy, I[2])
+    @inbounds uᵢ += L.a*SbpOperators.apply(L.op, inverse_spacing(L.grid)[2], vy, I[2])
     # NOTE: the package qualifier 'SbpOperators' can problably be removed once all "applying" objects use LazyTensors
     return uᵢ
 end
@@ -56,9 +56,9 @@
     I = CartesianIndex(I);
     N = size(H.grid)
     # Quadrature in x direction
-    @inbounds q = apply_quadrature(H.op, H.grid.spacing[1], v[I] , I[1], N[1])
+    @inbounds q = apply_quadrature(H.op, spacing(H.grid)[1], v[I] , I[1], N[1])
     # Quadrature in y-direction
-    @inbounds q = apply_quadrature(H.op, H.grid.spacing[2], q, I[2], N[2])
+    @inbounds q = apply_quadrature(H.op, spacing(H.grid)[2], q, I[2], N[2])
     return q
 end
 
@@ -83,9 +83,9 @@
     I = CartesianIndex(I);
     N = size(H_inv.grid)
     # Inverse quadrature in x direction
-    @inbounds q_inv = apply_inverse_quadrature(H_inv.op, H_inv.grid.inverse_spacing[1], v[I] , I[1], N[1])
+    @inbounds q_inv = apply_inverse_quadrature(H_inv.op, inverse_spacing(H_inv.grid)[1], v[I] , I[1], N[1])
     # Inverse quadrature in y-direction
-    @inbounds q_inv = apply_inverse_quadrature(H_inv.op, H_inv.grid.inverse_spacing[2], q_inv, I[2], N[2])
+    @inbounds q_inv = apply_inverse_quadrature(H_inv.op, inverse_spacing(H_inv.grid)[2], q_inv, I[2], N[2])
     return q_inv
 end
 
@@ -144,13 +144,13 @@
     i = I[dim(d.bId)]
     j = I[3-dim(d.bId)]
     N_i = size(d.grid)[dim(d.bId)]
-    h_inv = d.grid.inverse_spacing[dim(d.bId)]
+    h_inv = inverse_spacing(d.grid)[dim(d.bId)]
     return apply_d(d.op, h_inv, v[j], N_i, i, region(d.bId))
 end
 
 function LazyTensors.apply_transpose(d::NormalDerivative, v::AbstractArray, I::NTuple{1,Int})
     u = selectdim(v,3-dim(d.bId),I[1])
-    return apply_d_T(d.op, d.grid.inverse_spacing[dim(d.bId)], u, region(d.bId))
+    return apply_d_T(d.op, inverse_spacing(d.grid)[dim(d.bId)], u, region(d.bId))
 end
 
 """
@@ -168,7 +168,7 @@
 # TODO: Make this independent of dimension
 # TODO: Dispatch directly on Index{R}?
 function LazyTensors.apply(q::BoundaryQuadrature{T}, v::AbstractArray{T,1}, I::NTuple{1,Int}) where T
-    h = q.grid.spacing[3-dim(q.bId)]
+    h = spacing(q.grid)[3-dim(q.bId)]
     N = size(v)
     return apply_quadrature(q.op, h, v[I[1]], I[1], N[1])
 end
--- a/Grids/src/EquidistantGrid.jl	Thu Dec 05 09:28:04 2019 +0100
+++ b/Grids/src/EquidistantGrid.jl	Thu Dec 05 09:44:34 2019 +0100
@@ -10,16 +10,14 @@
     size::NTuple{Dim, Int} # First coordinate direction stored first
     limit_lower::NTuple{Dim, T}
     limit_upper::NTuple{Dim, T}
-    spacing::NTuple{Dim, T} # Grid spacing
     inverse_spacing::NTuple{Dim, T} # Reciprocal of grid spacing
 
     # General constructor
     function EquidistantGrid(size::NTuple{Dim, Int}, limit_lower::NTuple{Dim, T}, limit_upper::NTuple{Dim, T}) where Dim where T
         @assert all(size.>0)
         @assert all(limit_upper.-limit_lower .!= 0)
-        spacing = abs.(limit_upper.-limit_lower)./(size.-1)
-        inverse_spacing = 1.0./spacing
-        return new{Dim,T}(size, limit_lower, limit_upper, spacing, inverse_spacing)
+        inverse_spacing = (size.-1)./ abs.(limit_upper.-limit_lower)
+        return new{Dim,T}(size, limit_lower, limit_upper, inverse_spacing)
     end
 end
 
@@ -37,7 +35,6 @@
     return length(grid.size)
 end
 
-# TODO: Keep the below functions or just use properties?
 # Returns the reciprocal of the spacing of the grid
 #
 function inverse_spacing(grid::EquidistantGrid)
@@ -48,7 +45,7 @@
 # Returns the reciprocal of the spacing of the grid
 #
 function spacing(grid::EquidistantGrid)
-    return grid.spacing
+    return 1.0./grid.inverse_spacing
 end
 export spacing