annotate src/SbpOperators/volumeops/quadratures/diagonal_quadrature.jl @ 636:a1dfaf305f41 feature/volume_and_boundary_operators

Move SbpOpertors/quadrature to SbpOperators/volumeops/
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Fri, 01 Jan 2021 16:45:48 +0100
parents src/SbpOperators/quadrature/diagonal_quadrature.jl@04d7b4eb63ef
children
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
558
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
36 Constructs the `DiagonalQuadrature` on the `EquidistantGrid` `g` with
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
37 closure given 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
558
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
43 """
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
44 range_size(H::DiagonalQuadrature)
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
45
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
46 The size of an object in the range of `H`
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
47 """
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
48 LazyTensors.range_size(H::DiagonalQuadrature) = H.size
558
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
49
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
50 """
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
51 domain_size(H::DiagonalQuadrature)
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
52
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
53 The size of an object in the domain of `H`
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
54 """
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
55 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
56
546
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
57 """
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
58 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
59 Implements the application `(H*v)[i]` an `Index{R}` where `R` is one of the regions
558
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
60 `Lower`,`Interior`,`Upper`. If `i` is another type of index (e.g an `Int`) it will first
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
61 be converted to an `Index{R}`.
546
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
62 """
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
63 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
64 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
65 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
66
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
67 function LazyTensors.apply(H::DiagonalQuadrature{T},v::AbstractVector{T}, i::Index{Upper}) where T
558
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
68 N = length(v); #TODO: Use dim_size here?
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
69 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
70 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
71
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
72 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
73 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
74 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
75
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
76 function LazyTensors.apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, i) where T
558
9b5710ae6587 Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 557
diff changeset
77 N = length(v); #TODO: Use dim_size here?
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
78 r = getregion(i, closure_size(H), N)
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
79 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
80 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
81
546
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
82 """
09ae5b519b4c Update documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 507
diff changeset
83 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
84 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
85 """
557
3c18a15934a7 Merge in default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 543 546
diff changeset
86 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
87
506
c2f991b819fc Update docs
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 504
diff changeset
88 """
507
576c6d1acc28 Make function naming more consistent.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 506
diff changeset
89 closure_size(H)
506
c2f991b819fc Update docs
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 504
diff changeset
90 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
91 """
507
576c6d1acc28 Make function naming more consistent.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 506
diff changeset
92 closure_size(H::DiagonalQuadrature{T,M}) where {T,M} = M