annotate src/SbpOperators/volumeops/derivatives/dissipation.jl @ 1087:423a6442efc3 feature/dissipation_operators

REVIEW: Address documentation
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Sun, 08 May 2022 12:15:32 +0200
parents c89c6b63c7f4
children 9f0121e465a5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1087
423a6442efc3 REVIEW: Address documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1069
diff changeset
1 # REVIEW: Add documentation. Also would it be more correct to
423a6442efc3 REVIEW: Address documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1069
diff changeset
2 # call these undivided_differences instead of dissipation?
423a6442efc3 REVIEW: Address documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1069
diff changeset
3 # If I understand it correctly, this method simply provides
423a6442efc3 REVIEW: Address documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1069
diff changeset
4 # the operators required in order to compose a dissipation operator
423a6442efc3 REVIEW: Address documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1069
diff changeset
5 # and the dissipation operator are formed by a linear combination
423a6442efc3 REVIEW: Address documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1069
diff changeset
6 # of the products of Dᵀ and D for different orders.
1069
c89c6b63c7f4 Fix typo
Jonatan Werpers <jonatan@werpers.com>
parents: 1035
diff changeset
7 function undivided_dissipation(g::EquidistantGrid, p, direction)
1034
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
8 T = eltype(g)
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
9 interior_weights = T.(dissipation_interior_weights(p))
1021
ee5a641a8277 Add some tests and start implementing dissipation()
Jonatan Werpers <jonatan@werpers.com>
parents: 1020
diff changeset
10
1034
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
11 D = stencil_operator_distinct_closures(
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
12 g,
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
13 dissipation_interior_stencil(interior_weights),
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
14 dissipation_lower_closure_stencils(interior_weights),
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
15 dissipation_upper_closure_stencils(interior_weights),
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
16 direction,
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
17 )
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
18 Dᵀ = stencil_operator_distinct_closures(
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
19 g,
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
20 dissipation_transpose_interior_stencil(interior_weights),
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
21 dissipation_transpose_lower_closure_stencils(interior_weights),
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
22 dissipation_transpose_upper_closure_stencils(interior_weights),
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
23 direction,
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
24 )
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
25
ed19c549c506 Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents: 1033
diff changeset
26 return D, Dᵀ
1021
ee5a641a8277 Add some tests and start implementing dissipation()
Jonatan Werpers <jonatan@werpers.com>
parents: 1020
diff changeset
27 end
ee5a641a8277 Add some tests and start implementing dissipation()
Jonatan Werpers <jonatan@werpers.com>
parents: 1020
diff changeset
28
1069
c89c6b63c7f4 Fix typo
Jonatan Werpers <jonatan@werpers.com>
parents: 1035
diff changeset
29 undivided_dissipation(g::EquidistantGrid{1}, p) = undivided_dissipation(g, p, 1)
1021
ee5a641a8277 Add some tests and start implementing dissipation()
Jonatan Werpers <jonatan@werpers.com>
parents: 1020
diff changeset
30
1020
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 function dissipation_interior_weights(p)
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 if p == 0
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 return (1,)
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 end
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 return (0, dissipation_interior_weights(p-1)...) .- (dissipation_interior_weights(p-1)..., 0)
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 end
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 midpoint(weights) = length(weights)÷2 + 1
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 midpoint_transpose(weights) = length(weights)+1 - midpoint(weights)
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41
1035
ceda69b8f27a Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents: 1034
diff changeset
42 function dissipation_interior_stencil(weights)
ceda69b8f27a Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents: 1034
diff changeset
43 return Stencil(weights..., center=midpoint(weights))
ceda69b8f27a Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents: 1034
diff changeset
44 end
ceda69b8f27a Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents: 1034
diff changeset
45 function dissipation_transpose_interior_stencil(weights)
ceda69b8f27a Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents: 1034
diff changeset
46 if iseven(length(weights))
ceda69b8f27a Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents: 1034
diff changeset
47 weights = map(-, weights)
ceda69b8f27a Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents: 1034
diff changeset
48 end
ceda69b8f27a Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents: 1034
diff changeset
49
ceda69b8f27a Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents: 1034
diff changeset
50 return Stencil(weights..., center=midpoint_transpose(weights))
ceda69b8f27a Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents: 1034
diff changeset
51 end
1029
129262c8e897 Change signatures for interior stencil methods
Jonatan Werpers <jonatan@werpers.com>
parents: 1021
diff changeset
52
1020
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 dissipation_lower_closure_size(weights) = midpoint(weights) - 1
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 dissipation_upper_closure_size(weights) = length(weights) - midpoint(weights)
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 dissipation_lower_closure_stencils(interior_weights) = ntuple(i->Stencil(interior_weights..., center=i ), dissipation_lower_closure_size(interior_weights))
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 dissipation_upper_closure_stencils(interior_weights) = ntuple(i->Stencil(interior_weights..., center=length(interior_weights)-dissipation_upper_closure_size(interior_weights)+i), dissipation_upper_closure_size(interior_weights))
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58
1033
0cb4c6b15d8e Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 1029
diff changeset
59 function dissipation_transpose_lower_closure_stencils(interior_weights)
0cb4c6b15d8e Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 1029
diff changeset
60 closure = ntuple(i->dissipation_transpose_lower_closure_stencil(interior_weights, i), length(interior_weights))
0cb4c6b15d8e Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 1029
diff changeset
61
0cb4c6b15d8e Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 1029
diff changeset
62 N = maximum(s->length(s.weights), closure)
0cb4c6b15d8e Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 1029
diff changeset
63 return right_pad.(closure, N)
0cb4c6b15d8e Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 1029
diff changeset
64 end
0cb4c6b15d8e Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 1029
diff changeset
65
0cb4c6b15d8e Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 1029
diff changeset
66 function dissipation_transpose_upper_closure_stencils(interior_weights)
0cb4c6b15d8e Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 1029
diff changeset
67 closure = reverse(ntuple(i->dissipation_transpose_upper_closure_stencil(interior_weights, i), length(interior_weights)))
0cb4c6b15d8e Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 1029
diff changeset
68
0cb4c6b15d8e Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 1029
diff changeset
69 N = maximum(s->length(s.weights), closure)
0cb4c6b15d8e Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 1029
diff changeset
70 return left_pad.(closure, N)
0cb4c6b15d8e Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 1029
diff changeset
71 end
1020
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 function dissipation_transpose_lower_closure_stencil(interior_weights, i)
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75 w = ntuple(k->interior_weights[i], dissipation_lower_closure_size(interior_weights))
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
77 for k ∈ i:-1:1
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 w = (w..., interior_weights[k])
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79 end
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
81 return Stencil(w..., center = i)
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
82 end
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
83
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84 function dissipation_transpose_upper_closure_stencil(interior_weights, i)
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
85 j = length(interior_weights)+1-i
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
86 w = ntuple(k->interior_weights[j], dissipation_upper_closure_size(interior_weights))
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
87
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
88 for k ∈ j:1:length(interior_weights)
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
89 w = (interior_weights[k], w...)
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
90 end
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
91
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
92 return Stencil(w..., center = length(interior_weights)-midpoint(interior_weights)+1)
3f5137ce3aa1 Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
93 end