Mercurial > repos > public > sbplib_julia
annotate src/SbpOperators/volumeops/laplace/laplace.jl @ 874:7e9ebd572deb laplace_benchmarks
Add file for wave equation
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Thu, 20 Jan 2022 21:51:53 +0100 |
parents | 9929c99754fb |
children | 067a322e4f73 |
rev | line source |
---|---|
624
a85db383484f
Update documentation and remove some out-commented lines
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
618
diff
changeset
|
1 """ |
755
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
2 Laplace{T, Dim, TMdiffop} <: TensorMapping{T,Dim,Dim} |
723
c16abc564b82
Change from EquidistantGrid to AbstractGrid in Laplace interface
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
722
diff
changeset
|
3 Laplace(grid::AbstractGrid, fn; order) |
667
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
4 |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
5 Implements the Laplace operator, approximating ∑d²/xᵢ² , i = 1,...,`Dim` as a |
704 | 6 `TensorMapping`. Additionally, `Laplace` stores the inner product and boundary |
667
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
7 operators relevant for constructing a SBP finite difference scheme as `TensorMapping`s. |
677
011863b3f24c
Make use of the function boundary_quadrature in Laplace constructor
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
668
diff
changeset
|
8 |
723
c16abc564b82
Change from EquidistantGrid to AbstractGrid in Laplace interface
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
722
diff
changeset
|
9 Laplace(grid, fn; order) creates the Laplace operator defined on `grid`, |
c16abc564b82
Change from EquidistantGrid to AbstractGrid in Laplace interface
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
722
diff
changeset
|
10 where the operators are read from TOML. The differential operator is created |
c16abc564b82
Change from EquidistantGrid to AbstractGrid in Laplace interface
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
722
diff
changeset
|
11 using `laplace(grid::AbstractGrid,...)`. |
755
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
12 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
13 Note that all properties of Laplace, excluding the Differential operator `D`, are |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
14 abstract types. For performance reasons, they should therefore be |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
15 accessed via the provided getter functions (e.g `inner_product(::Laplace)`). |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
16 |
667
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
17 """ |
755
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
18 struct Laplace{T, Dim, TMdiffop<:TensorMapping{T,Dim,Dim}} <: TensorMapping{T,Dim,Dim} |
722 | 19 D::TMdiffop # Differential operator |
755
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
20 H::TensorMapping # Inner product operator |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
21 H_inv::TensorMapping # Inverse inner product operator |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
22 e::StaticDict{<:BoundaryIdentifier,<:TensorMapping} # Boundary restriction operators. |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
23 d::StaticDict{<:BoundaryIdentifier,<:TensorMapping} # Normal derivative operators |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
24 H_boundary::StaticDict{<:BoundaryIdentifier,<:TensorMapping} # Boundary quadrature operators # TODO: Boundary inner product? |
873
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
25 order::Int |
667
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
26 end |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
27 export Laplace |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
28 |
723
c16abc564b82
Change from EquidistantGrid to AbstractGrid in Laplace interface
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
722
diff
changeset
|
29 function Laplace(grid::AbstractGrid, fn; order) |
667
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
30 # TODO: Removed once we can construct the volume and |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
31 # boundary operators by op(grid, fn; order,...). |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
32 # Read stencils |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
33 op = read_D2_operator(fn; order) |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
34 D_inner_stecil = op.innerStencil |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
35 D_closure_stencils = op.closureStencils |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
36 H_closure_stencils = op.quadratureClosure |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
37 e_closure_stencil = op.eClosure |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
38 d_closure_stencil = op.dClosure |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
39 |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
40 # Volume operators |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
41 Δ = laplace(grid, D_inner_stecil, D_closure_stencils) |
702 | 42 H = inner_product(grid, H_closure_stencils) |
43 H⁻¹ = inverse_inner_product(grid, H_closure_stencils) | |
667
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
44 |
677
011863b3f24c
Make use of the function boundary_quadrature in Laplace constructor
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
668
diff
changeset
|
45 # Boundary operator - id pairs |
708
693f5487ddba
Minor clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
704
diff
changeset
|
46 ids = boundary_identifiers(grid) |
693f5487ddba
Minor clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
704
diff
changeset
|
47 n_ids = length(ids) |
753
fc83d672be36
Minor cleanup of code
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
751
diff
changeset
|
48 e_pairs = ntuple(i -> ids[i] => boundary_restriction(grid,e_closure_stencil,ids[i]),n_ids) |
fc83d672be36
Minor cleanup of code
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
751
diff
changeset
|
49 d_pairs = ntuple(i -> ids[i] => normal_derivative(grid,d_closure_stencil,ids[i]),n_ids) |
fc83d672be36
Minor cleanup of code
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
751
diff
changeset
|
50 Hᵧ_pairs = ntuple(i -> ids[i] => inner_product(boundary_grid(grid,ids[i]),H_closure_stencils),n_ids) |
668
2d56a53a1646
Simplify construction of boundary-operator pairs in Laplace constructor
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
667
diff
changeset
|
51 |
873
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
52 return Laplace(Δ, H, H⁻¹, StaticDict(e_pairs), StaticDict(d_pairs), StaticDict(Hᵧ_pairs), order) |
667
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
53 end |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
54 |
756
1970ebceabe4
Add suggestion for pretty printing of Laplace
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
755
diff
changeset
|
55 # TODO: Consider pretty printing of the following form |
1970ebceabe4
Add suggestion for pretty printing of Laplace
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
755
diff
changeset
|
56 # Base.show(io::IO, L::Laplace{T, Dim}) where {T,Dim,TM} = print(io, "Laplace{$T, $Dim, $TM}(", L.D, L.H, L.H_inv, L.e, L.d, L.H_boundary, ")") |
755
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
57 |
667
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
58 LazyTensors.range_size(L::Laplace) = LazyTensors.range_size(L.D) |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
59 LazyTensors.domain_size(L::Laplace) = LazyTensors.domain_size(L.D) |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
60 LazyTensors.apply(L::Laplace, v::AbstractArray, I...) = LazyTensors.apply(L.D,v,I...) |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
61 |
873
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
62 """ |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
63 closure_size(L::Lapalace) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
64 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
65 Returns the inner product operator associated with `L` |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
66 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
67 """ |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
68 closure_size(L::Laplace) = closure_size(L.D) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
69 export closure_size |
755
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
70 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
71 """ |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
72 inner_product(L::Lapalace) |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
73 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
74 Returns the inner product operator associated with `L` |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
75 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
76 """ |
704 | 77 inner_product(L::Laplace) = L.H |
78 export inner_product | |
755
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
79 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
80 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
81 """ |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
82 inverse_inner_product(L::Lapalace) |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
83 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
84 Returns the inverse of the inner product operator associated with `L` |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
85 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
86 """ |
704 | 87 inverse_inner_product(L::Laplace) = L.H_inv |
88 export inverse_inner_product | |
755
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
89 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
90 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
91 """ |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
92 boundary_restriction(L::Lapalace,id::BoundaryIdentifier) |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
93 boundary_restriction(L::Lapalace,ids::NTuple{N,BoundaryIdentifier}) |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
94 boundary_restriction(L::Lapalace,ids...) |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
95 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
96 Returns boundary restriction operator(s) associated with `L` for the boundary(s) |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
97 identified by id(s). |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
98 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
99 """ |
754
dc38e57ebd1b
Add convenience functions for returning multiple boundary operators from Laplace
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
753
diff
changeset
|
100 boundary_restriction(L::Laplace,id::BoundaryIdentifier) = L.e[id] |
dc38e57ebd1b
Add convenience functions for returning multiple boundary operators from Laplace
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
753
diff
changeset
|
101 boundary_restriction(L::Laplace,ids::NTuple{N,BoundaryIdentifier}) where N = ntuple(i->L.e[ids[i]],N) |
dc38e57ebd1b
Add convenience functions for returning multiple boundary operators from Laplace
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
753
diff
changeset
|
102 boundary_restriction(L::Laplace,ids::Vararg{BoundaryIdentifier,N}) where N = ntuple(i->L.e[ids[i]],N) |
667
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
103 export boundary_restriction |
755
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
104 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
105 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
106 """ |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
107 normal_derivative(L::Lapalace,id::BoundaryIdentifier) |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
108 normal_derivative(L::Lapalace,ids::NTuple{N,BoundaryIdentifier}) |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
109 normal_derivative(L::Lapalace,ids...) |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
110 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
111 Returns normal derivative operator(s) associated with `L` for the boundary(s) |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
112 identified by id(s). |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
113 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
114 """ |
754
dc38e57ebd1b
Add convenience functions for returning multiple boundary operators from Laplace
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
753
diff
changeset
|
115 normal_derivative(L::Laplace,id::BoundaryIdentifier) = L.d[id] |
dc38e57ebd1b
Add convenience functions for returning multiple boundary operators from Laplace
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
753
diff
changeset
|
116 normal_derivative(L::Laplace,ids::NTuple{N,BoundaryIdentifier}) where N = ntuple(i->L.d[ids[i]],N) |
dc38e57ebd1b
Add convenience functions for returning multiple boundary operators from Laplace
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
753
diff
changeset
|
117 normal_derivative(L::Laplace,ids::Vararg{BoundaryIdentifier,N}) where N = ntuple(i->L.d[ids[i]],N) |
667
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
118 export normal_derivative |
755
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
119 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
120 |
708
693f5487ddba
Minor clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
704
diff
changeset
|
121 # TODO: boundary_inner_product? |
755
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
122 """ |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
123 boundary_quadrature(L::Lapalace,id::BoundaryIdentifier) |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
124 boundary_quadrature(L::Lapalace,ids::NTuple{N,BoundaryIdentifier}) |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
125 boundary_quadrature(L::Lapalace,ids...) |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
126 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
127 Returns boundary quadrature operator(s) associated with `L` for the boundary(s) |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
128 identified by id(s). |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
129 |
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
130 """ |
754
dc38e57ebd1b
Add convenience functions for returning multiple boundary operators from Laplace
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
753
diff
changeset
|
131 boundary_quadrature(L::Laplace,id::BoundaryIdentifier) = L.H_boundary[id] |
dc38e57ebd1b
Add convenience functions for returning multiple boundary operators from Laplace
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
753
diff
changeset
|
132 boundary_quadrature(L::Laplace,ids::NTuple{N,BoundaryIdentifier}) where N = ntuple(i->L.H_boundary[ids[i]],N) |
dc38e57ebd1b
Add convenience functions for returning multiple boundary operators from Laplace
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
753
diff
changeset
|
133 boundary_quadrature(L::Laplace,ids::Vararg{BoundaryIdentifier,N}) where N = ntuple(i->L.H_boundary[ids[i]],N) |
667
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
134 export boundary_quadrature |
f3a0d1f7d842
Make Laplace a type storing relevant operators used when writing a scheme, e.g. quadratures, normal derivatives etc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
135 |
873
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
136 abstract type BoundaryConditionType end |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
137 struct NeumannBC <: BoundaryConditionType end |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
138 struct DirichletBC <: BoundaryConditionType end |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
139 export NeumannBC |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
140 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
141 boundary_condition(L, id, ::NeumannBC) = neumann_bc(L, id) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
142 boundary_condition(L, id, ::DirichletBC) = dirichlet_bc(L, id) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
143 export boundary_condition |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
144 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
145 function neumann_bc(L::Laplace, id::BoundaryIdentifier) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
146 H_inv = inverse_inner_product(L) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
147 e = boundary_restriction(L,id) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
148 d = normal_derivative(L,id) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
149 H_b = boundary_quadrature(L,id) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
150 tau = H_inv∘e'∘H_b |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
151 closure = tau∘d |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
152 # TODO: Return penalty once we have implemented scalar scaling of the operators. |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
153 return closure |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
154 end |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
155 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
156 function dirichlet_bc(L::Laplace, id::BoundaryIdentifier) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
157 error("Not implemented") |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
158 # H_inv = inverse_inner_product(L) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
159 # e = boundary_restriction(L,id) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
160 # d = normal_derivative(L,id) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
161 # H_b = boundary_quadrature(L,id) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
162 # gamma = borrowing_parameter(L) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
163 # tuning = 1.2 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
164 # S = ScalingOperator(tuning * -1.0/gamma) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
165 # tau = H_inv∘(S∘e' + d')∘H_b |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
166 # closure = tau∘e |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
167 # penalty = ScalingOperator(-1)∘tau |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
168 # return (closure, penalty) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
169 end |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
170 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
171 # function borrowing_parameter(L) |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
172 # if L.order == 2 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
173 # return 0.4 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
174 # elseif L.order == 4 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
175 # return 0.2508 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
176 # elseif L.order == 6 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
177 # return 0.1878 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
178 # elseif L.order == 8 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
179 # return 0.0015 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
180 # elseif L.order == 10 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
181 # return 0.0351 |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
182 # end |
9929c99754fb
Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
756
diff
changeset
|
183 # end |
755
36adc15d3935
Reduce the number of type perameters used by Laplace.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
754
diff
changeset
|
184 |
624
a85db383484f
Update documentation and remove some out-commented lines
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
618
diff
changeset
|
185 """ |
723
c16abc564b82
Change from EquidistantGrid to AbstractGrid in Laplace interface
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
722
diff
changeset
|
186 laplace(grid, inner_stencil, closure_stencils) |
624
a85db383484f
Update documentation and remove some out-commented lines
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
618
diff
changeset
|
187 |
648
d6edde60909b
Fix typo in documentation and remove obsolete out-commented code.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
624
diff
changeset
|
188 Creates the Laplace operator operator `Δ` as a `TensorMapping` |
624
a85db383484f
Update documentation and remove some out-commented lines
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
618
diff
changeset
|
189 |
704 | 190 `Δ` approximates the Laplace operator ∑d²/xᵢ² , i = 1,...,N on the N-dimensional |
191 `grid`, using the stencil `inner_stencil` in the interior and a set of stencils | |
192 `closure_stencils` for the points in the closure regions. | |
624
a85db383484f
Update documentation and remove some out-commented lines
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
618
diff
changeset
|
193 |
690
1accc3e051d0
Start changing the name of functions creating operators that are not types to lower case. E.g SecondDerivative->second_derivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
194 On a one-dimensional `grid`, `Δ` is equivalent to `second_derivative`. On a |
1accc3e051d0
Start changing the name of functions creating operators that are not types to lower case. E.g SecondDerivative->second_derivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
195 multi-dimensional `grid`, `Δ` is the sum of multi-dimensional `second_derivative`s |
1accc3e051d0
Start changing the name of functions creating operators that are not types to lower case. E.g SecondDerivative->second_derivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
196 where the sum is carried out lazily. |
624
a85db383484f
Update documentation and remove some out-commented lines
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
618
diff
changeset
|
197 """ |
723
c16abc564b82
Change from EquidistantGrid to AbstractGrid in Laplace interface
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
722
diff
changeset
|
198 function laplace(grid::AbstractGrid, inner_stencil, closure_stencils) |
690
1accc3e051d0
Start changing the name of functions creating operators that are not types to lower case. E.g SecondDerivative->second_derivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
199 Δ = second_derivative(grid, inner_stencil, closure_stencils, 1) |
704 | 200 for d = 2:dimension(grid) |
690
1accc3e051d0
Start changing the name of functions creating operators that are not types to lower case. E.g SecondDerivative->second_derivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
201 Δ += second_derivative(grid, inner_stencil, closure_stencils, d) |
356
0844069ab5ff
Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents:
333
diff
changeset
|
202 end |
611
e71f2f81b5f8
NOT WORKING: Draft implementation of VolumeOperator and make SecondDerivative specialize it. Reformulate Laplace for the new SecondDerivative.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
542
diff
changeset
|
203 return Δ |
356
0844069ab5ff
Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents:
333
diff
changeset
|
204 end |
690
1accc3e051d0
Start changing the name of functions creating operators that are not types to lower case. E.g SecondDerivative->second_derivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
648
diff
changeset
|
205 export laplace |