Mercurial > repos > public > sbplib_julia
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 |
| 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 | 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 | 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 |
