comparison src/SbpOperators/volumeops/laplace/laplace.jl @ 702:3cd582257072 feature/laplace_opset

Merge in default
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Mon, 15 Feb 2021 11:30:34 +0100
parents 011863b3f24c 1accc3e051d0
children a7efedbdede9
comparison
equal deleted inserted replaced
679:54ce3f9771e5 702:3cd582257072
35 e_closure_stencil = op.eClosure 35 e_closure_stencil = op.eClosure
36 d_closure_stencil = op.dClosure 36 d_closure_stencil = op.dClosure
37 37
38 # Volume operators 38 # Volume operators
39 Δ = laplace(grid, D_inner_stecil, D_closure_stencils) 39 Δ = laplace(grid, D_inner_stecil, D_closure_stencils)
40 H = quadrature(grid, H_closure_stencils) 40 H = inner_product(grid, H_closure_stencils)
41 H⁻¹ = InverseDiagonalQuadrature(grid, H_closure_stencils) 41 H⁻¹ = inverse_inner_product(grid, H_closure_stencils)
42 42
43 # Boundary operator - id pairs 43 # Boundary operator - id pairs
44 bids = boundary_identifiers(grid) 44 bids = boundary_identifiers(grid)
45 e_pairs = ntuple(i -> Pair(bids[i],BoundaryRestriction(grid,e_closure_stencil,bids[i])),length(bids)) 45 e_pairs = ntuple(i -> Pair(bids[i],boundary_restriction(grid,e_closure_stencil,bids[i])),length(bids))
46 d_pairs = ntuple(i -> Pair(bids[i],NormalDerivative(grid,d_closure_stencil,bids[i])),length(bids)) 46 d_pairs = ntuple(i -> Pair(bids[i],normal_derivative(grid,d_closure_stencil,bids[i])),length(bids))
47 Hᵧ_pairs = ntuple(i -> Pair(bids[i],boundary_quadrature(grid,H_closure_stencils,bids[i])),length(bids)) 47 Hᵧ_pairs = ntuple(i -> Pair(bids[i],inner_product(boundary_grid(grid,bids[i]),H_closure_stencils)),length(bids))
48 48
49 return Laplace(Δ, H, H⁻¹, Dict(e_pairs), Dict(d_pairs), Dict(Hᵧ_pairs)) 49 return Laplace(Δ, H, H⁻¹, Dict(e_pairs), Dict(d_pairs), Dict(Hᵧ_pairs))
50 end 50 end
51 51
52 LazyTensors.range_size(L::Laplace) = LazyTensors.range_size(L.D) 52 LazyTensors.range_size(L::Laplace) = LazyTensors.range_size(L.D)
71 71
72 `Δ` approximates the Laplace operator ∑d²/xᵢ² , i = 1,...,`Dim` on `grid`, using 72 `Δ` approximates the Laplace operator ∑d²/xᵢ² , i = 1,...,`Dim` on `grid`, using
73 the stencil `inner_stencil` in the interior and a set of stencils `closure_stencils` 73 the stencil `inner_stencil` in the interior and a set of stencils `closure_stencils`
74 for the points in the closure regions. 74 for the points in the closure regions.
75 75
76 On a one-dimensional `grid`, `Δ` is a `SecondDerivative`. On a multi-dimensional `grid`, `Δ` is the sum of 76 On a one-dimensional `grid`, `Δ` is equivalent to `second_derivative`. On a
77 multi-dimensional `SecondDerivative`s where the sum is carried out lazily. 77 multi-dimensional `grid`, `Δ` is the sum of multi-dimensional `second_derivative`s
78 where the sum is carried out lazily.
78 """ 79 """
79 function laplace(grid::EquidistantGrid{Dim}, inner_stencil, closure_stencils) where Dim 80 function laplace(grid::EquidistantGrid{Dim}, inner_stencil, closure_stencils) where Dim
80 Δ = SecondDerivative(grid, inner_stencil, closure_stencils, 1) 81 Δ = second_derivative(grid, inner_stencil, closure_stencils, 1)
81 for d = 2:Dim 82 for d = 2:Dim
82 Δ += SecondDerivative(grid, inner_stencil, closure_stencils, d) 83 Δ += second_derivative(grid, inner_stencil, closure_stencils, d)
83 end 84 end
84 return Δ 85 return Δ
85 end 86 end
86 export laplace 87 export laplace