annotate src/SbpOperators/quadrature/diagonal_quadrature.jl @ 557:3c18a15934a7 feature/quadrature_as_outer_product

Merge in default
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Sun, 29 Nov 2020 21:52:44 +0100
parents src/SbpOperators/quadrature/diagonal_inner_product.jl@1a53eb83ed24 src/SbpOperators/quadrature/diagonal_inner_product.jl@09ae5b519b4c
children 9b5710ae6587
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
328
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
1 """
504
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
2 diagonal_quadrature(g,quadrature_closure)
328
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
3
504
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
4 Constructs the diagonal quadrature operator `H` on a grid of `Dim` dimensions as
506
c2f991b819fc Update docs
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 504
diff changeset
5 a `TensorMapping`. The one-dimensional operator is a `DiagonalQuadrature`, while
504
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
6 the multi-dimensional operator is the outer-product of the
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
7 one-dimensional operators in each coordinate direction.
328
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
8 """
504
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
9 function diagonal_quadrature(g::EquidistantGrid{Dim}, quadrature_closure) where Dim
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
10 H = DiagonalQuadrature(restrict(g,1), quadrature_closure)
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
11 for i ∈ 2:Dim
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
12 H = H⊗DiagonalQuadrature(restrict(g,i), quadrature_closure)
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
13 end
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
14 return H
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
15 end
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
16 export diagonal_quadrature
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
17
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
18 """
506
c2f991b819fc Update docs
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 504
diff changeset
19 DiagonalQuadrature{T,M} <: TensorMapping{T,1,1}
504
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
20
546
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
21 Implements the one-dimensional diagonal quadrature operator as a `TensorMapping`
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
22 The quadrature is defined by the quadrature interval length `h`, the quadrature
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
23 closure weights `closure` and the number of quadrature intervals `size`. The
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
24 interior stencil has the weight 1.
504
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
25 """
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
26 struct DiagonalQuadrature{T,M} <: TensorMapping{T,1,1}
356
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
27 h::T
504
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
28 closure::NTuple{M,T}
356
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
29 size::Tuple{Int}
328
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
30 end
504
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
31 export DiagonalQuadrature
328
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
32
506
c2f991b819fc Update docs
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 504
diff changeset
33 """
c2f991b819fc Update docs
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 504
diff changeset
34 DiagonalQuadrature(g, quadrature_closure)
c2f991b819fc Update docs
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 504
diff changeset
35
546
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
36 Constructs the `DiagonalQuadrature` `H` on the `EquidistantGrid` `g` with
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
37 `H.closure` specified by `quadrature_closure`.
506
c2f991b819fc Update docs
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 504
diff changeset
38 """
504
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
39 function DiagonalQuadrature(g::EquidistantGrid{1}, quadrature_closure)
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
40 return DiagonalQuadrature(spacing(g)[1], quadrature_closure, size(g))
356
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
41 end
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
42
504
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
43 LazyTensors.range_size(H::DiagonalQuadrature) = H.size
21fba50cb5b0 Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 362
diff changeset
44 LazyTensors.domain_size(H::DiagonalQuadrature) = H.size
328
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
45
546
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
46 """
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
47 apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, i) where T
546
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
48 Implements the application `(H*v)[i]` an `Index{R}` where `R` is one of the regions
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
49 `Lower`,`Interior`,`Upper`.
546
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
50 """
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
51 function LazyTensors.apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, i::Index{Lower}) where T
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
52 return @inbounds H.h*H.closure[Int(i)]*v[Int(i)]
328
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
53 end
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
54
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
55 function LazyTensors.apply(H::DiagonalQuadrature{T},v::AbstractVector{T}, i::Index{Upper}) where T
328
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
56 N = length(v);
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
57 return @inbounds H.h*H.closure[N-Int(i)+1]*v[Int(i)]
328
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
58 end
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
59
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
60 function LazyTensors.apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, i::Index{Interior}) where T
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
61 return @inbounds H.h*v[Int(i)]
328
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
62 end
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
63
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
64 function LazyTensors.apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, i) where T
328
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
65 N = length(v);
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
66 r = getregion(i, closure_size(H), N)
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
67
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
68 return LazyTensors.apply(H, v, Index(i, r))
328
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
69 end
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
70
546
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
71 """
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
72 apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, I::Index) where T
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
73 Implements the application (H'*v)[I]. The operator is self-adjoint.
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
74 """
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
75 LazyTensors.apply_transpose(H::DiagonalQuadrature{T}, v::AbstractVector{T}, i) where T = LazyTensors.apply(H,v,i)
328
9cc5d1498b2d Refactor 1D diagonal inner product in quadrature.jl to separate file. Write tests for quadratures. Clean up laplace and secondderivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
76
506
c2f991b819fc Update docs
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 504
diff changeset
77 """
507
576c6d1acc28 Make function naming more consistent.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 506
diff changeset
78 closure_size(H)
506
c2f991b819fc Update docs
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 504
diff changeset
79 Returns the size of the closure stencil of a DiagonalQuadrature `H`.
c2f991b819fc Update docs
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 504
diff changeset
80 """
507
576c6d1acc28 Make function naming more consistent.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 506
diff changeset
81 closure_size(H::DiagonalQuadrature{T,M}) where {T,M} = M