Mercurial > repos > public > sbplib_julia
comparison src/SbpOperators/volumeops/laplace/laplace.jl @ 723:c16abc564b82 feature/laplace_opset
Change from EquidistantGrid to AbstractGrid in Laplace interface
| author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
|---|---|
| date | Wed, 17 Mar 2021 10:20:05 +0100 |
| parents | 0402b9042adc |
| children | f94feb005e7d |
comparison
equal
deleted
inserted
replaced
| 722:0402b9042adc | 723:c16abc564b82 |
|---|---|
| 1 """ | 1 """ |
| 2 Laplace{T, Dim, ...} <: TensorMapping{T,Dim,Dim} | 2 Laplace{T, Dim, ...} <: TensorMapping{T,Dim,Dim} |
| 3 Laplace(grid::EquidistantGrid, fn; order) | 3 Laplace(grid::AbstractGrid, fn; order) |
| 4 | 4 |
| 5 Implements the Laplace operator, approximating ∑d²/xᵢ² , i = 1,...,`Dim` as a | 5 Implements the Laplace operator, approximating ∑d²/xᵢ² , i = 1,...,`Dim` as a |
| 6 `TensorMapping`. Additionally, `Laplace` stores the inner product and boundary | 6 `TensorMapping`. Additionally, `Laplace` stores the inner product and boundary |
| 7 operators relevant for constructing a SBP finite difference scheme as `TensorMapping`s. | 7 operators relevant for constructing a SBP finite difference scheme as `TensorMapping`s. |
| 8 | 8 |
| 9 Laplace(grid::EquidistantGrid, fn; order) creates the Laplace operator on an | 9 Laplace(grid, fn; order) creates the Laplace operator defined on `grid`, |
| 10 equidistant grid, where the operators are read from TOML. The differential operator | 10 where the operators are read from TOML. The differential operator is created |
| 11 is created using `laplace(grid,...)`. | 11 using `laplace(grid::AbstractGrid,...)`. |
| 12 """ | 12 """ |
| 13 struct Laplace{T, Dim, Rb, TMdiffop<:TensorMapping{T,Dim,Dim}, # Differential operator | 13 struct Laplace{T, Dim, Rb, TMdiffop<:TensorMapping{T,Dim,Dim}, # Differential operator |
| 14 TMipop<:TensorMapping{T,Dim,Dim}, # Inner product operator | 14 TMipop<:TensorMapping{T,Dim,Dim}, # Inner product operator |
| 15 TMbop<:TensorMapping{T,Rb,Dim}, # Boundary operator | 15 TMbop<:TensorMapping{T,Rb,Dim}, # Boundary operator |
| 16 TMbqop<:TensorMapping{T,Rb,Rb}, # Boundary quadrature | 16 TMbqop<:TensorMapping{T,Rb,Rb}, # Boundary quadrature |
| 22 d::Dict{BID,TMbop} # Normal derivative operators | 22 d::Dict{BID,TMbop} # Normal derivative operators |
| 23 H_boundary::Dict{BID,TMbqop} # Boundary quadrature operators | 23 H_boundary::Dict{BID,TMbqop} # Boundary quadrature operators |
| 24 end | 24 end |
| 25 export Laplace | 25 export Laplace |
| 26 | 26 |
| 27 function Laplace(grid::EquidistantGrid, fn; order) | 27 function Laplace(grid::AbstractGrid, fn; order) |
| 28 # TODO: Removed once we can construct the volume and | 28 # TODO: Removed once we can construct the volume and |
| 29 # boundary operators by op(grid, fn; order,...). | 29 # boundary operators by op(grid, fn; order,...). |
| 30 # Read stencils | 30 # Read stencils |
| 31 op = read_D2_operator(fn; order) | 31 op = read_D2_operator(fn; order) |
| 32 D_inner_stecil = op.innerStencil | 32 D_inner_stecil = op.innerStencil |
| 65 # TODO: boundary_inner_product? | 65 # TODO: boundary_inner_product? |
| 66 boundary_quadrature(L::Laplace,bid::BoundaryIdentifier) = L.H_boundary[bid] | 66 boundary_quadrature(L::Laplace,bid::BoundaryIdentifier) = L.H_boundary[bid] |
| 67 export boundary_quadrature | 67 export boundary_quadrature |
| 68 | 68 |
| 69 """ | 69 """ |
| 70 laplace(grid::EquidistantGrid, inner_stencil, closure_stencils) | 70 laplace(grid, inner_stencil, closure_stencils) |
| 71 | 71 |
| 72 Creates the Laplace operator operator `Δ` as a `TensorMapping` | 72 Creates the Laplace operator operator `Δ` as a `TensorMapping` |
| 73 | 73 |
| 74 `Δ` approximates the Laplace operator ∑d²/xᵢ² , i = 1,...,N on the N-dimensional | 74 `Δ` approximates the Laplace operator ∑d²/xᵢ² , i = 1,...,N on the N-dimensional |
| 75 `grid`, using the stencil `inner_stencil` in the interior and a set of stencils | 75 `grid`, using the stencil `inner_stencil` in the interior and a set of stencils |
| 77 | 77 |
| 78 On a one-dimensional `grid`, `Δ` is equivalent to `second_derivative`. On a | 78 On a one-dimensional `grid`, `Δ` is equivalent to `second_derivative`. On a |
| 79 multi-dimensional `grid`, `Δ` is the sum of multi-dimensional `second_derivative`s | 79 multi-dimensional `grid`, `Δ` is the sum of multi-dimensional `second_derivative`s |
| 80 where the sum is carried out lazily. | 80 where the sum is carried out lazily. |
| 81 """ | 81 """ |
| 82 function laplace(grid::EquidistantGrid, inner_stencil, closure_stencils) | 82 function laplace(grid::AbstractGrid, inner_stencil, closure_stencils) |
| 83 Δ = second_derivative(grid, inner_stencil, closure_stencils, 1) | 83 Δ = second_derivative(grid, inner_stencil, closure_stencils, 1) |
| 84 for d = 2:dimension(grid) | 84 for d = 2:dimension(grid) |
| 85 Δ += second_derivative(grid, inner_stencil, closure_stencils, d) | 85 Δ += second_derivative(grid, inner_stencil, closure_stencils, d) |
| 86 end | 86 end |
| 87 return Δ | 87 return Δ |
