Mercurial > repos > public > sbplib_julia
annotate src/SbpOperators/volumeops/derivatives/dissipation.jl @ 1347:08f06bfacd5c refactor/grids
Fix typos and formatting of documentation
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Thu, 18 May 2023 22:53:31 +0200 |
parents | 760a4a1ec4b7 |
children |
rev | line source |
---|---|
1096
9f0121e465a5
Docs for undivided_dissipation
Jonatan Werpers <jonatan@werpers.com>
parents:
1087
diff
changeset
|
1 """ |
1329
e94ddef5e72f
Clean up documentation for changed types in SbpOperatorClean up documentation for changed types in SbpOperatorss
Jonatan Werpers <jonatan@werpers.com>
parents:
1291
diff
changeset
|
2 undivided_skewed04(g::TensorGrid, p, direction) |
e94ddef5e72f
Clean up documentation for changed types in SbpOperatorClean up documentation for changed types in SbpOperatorss
Jonatan Werpers <jonatan@werpers.com>
parents:
1291
diff
changeset
|
3 undivided_skewed04(g::EquidistantGrid, p) |
1096
9f0121e465a5
Docs for undivided_dissipation
Jonatan Werpers <jonatan@werpers.com>
parents:
1087
diff
changeset
|
4 |
1329
e94ddef5e72f
Clean up documentation for changed types in SbpOperatorClean up documentation for changed types in SbpOperatorss
Jonatan Werpers <jonatan@werpers.com>
parents:
1291
diff
changeset
|
5 Undivided difference operators approximating the `p`th derivative. The |
1347
08f06bfacd5c
Fix typos and formatting of documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1344
diff
changeset
|
6 operators do not satisfy any SBP property and are meant to be used for |
1203
254934aac3f8
Change name and clarify docs
Jonatan Werpers <jonatan@werpers.com>
parents:
1096
diff
changeset
|
7 building artificial dissipation terms. |
254934aac3f8
Change name and clarify docs
Jonatan Werpers <jonatan@werpers.com>
parents:
1096
diff
changeset
|
8 |
1347
08f06bfacd5c
Fix typos and formatting of documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1344
diff
changeset
|
9 The operators and how they are used to create accurate artificial dissipation |
1205 | 10 is described in "K. Mattsson, M. Svärd, and J. Nordström, “Stable and Accurate |
11 Artificial Dissipation,” Journal of Scientific Computing, vol. 21, no. 1, pp. | |
12 57–79, Aug. 2004" | |
1096
9f0121e465a5
Docs for undivided_dissipation
Jonatan Werpers <jonatan@werpers.com>
parents:
1087
diff
changeset
|
13 """ |
1329
e94ddef5e72f
Clean up documentation for changed types in SbpOperatorClean up documentation for changed types in SbpOperatorss
Jonatan Werpers <jonatan@werpers.com>
parents:
1291
diff
changeset
|
14 function undivided_skewed04 end |
e94ddef5e72f
Clean up documentation for changed types in SbpOperatorClean up documentation for changed types in SbpOperatorss
Jonatan Werpers <jonatan@werpers.com>
parents:
1291
diff
changeset
|
15 |
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1212
diff
changeset
|
16 function undivided_skewed04(g::TensorGrid, p, direction) |
1344
760a4a1ec4b7
Add 2D tests for dissipation operators and fix bug
Jonatan Werpers <jonatan@werpers.com>
parents:
1329
diff
changeset
|
17 D,Dᵀ = undivided_skewed04(g.grids[direction], p) |
760a4a1ec4b7
Add 2D tests for dissipation operators and fix bug
Jonatan Werpers <jonatan@werpers.com>
parents:
1329
diff
changeset
|
18 return ( |
760a4a1ec4b7
Add 2D tests for dissipation operators and fix bug
Jonatan Werpers <jonatan@werpers.com>
parents:
1329
diff
changeset
|
19 LazyTensors.inflate(D, size(g), direction), |
760a4a1ec4b7
Add 2D tests for dissipation operators and fix bug
Jonatan Werpers <jonatan@werpers.com>
parents:
1329
diff
changeset
|
20 LazyTensors.inflate(Dᵀ, size(g), direction), |
760a4a1ec4b7
Add 2D tests for dissipation operators and fix bug
Jonatan Werpers <jonatan@werpers.com>
parents:
1329
diff
changeset
|
21 ) |
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1212
diff
changeset
|
22 end |
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1212
diff
changeset
|
23 |
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1212
diff
changeset
|
24 function undivided_skewed04(g::EquidistantGrid, p) |
1034
ed19c549c506
Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
1033
diff
changeset
|
25 T = eltype(g) |
ed19c549c506
Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
1033
diff
changeset
|
26 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
|
27 |
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1212
diff
changeset
|
28 D = StencilOperatorDistinctClosures( |
1034
ed19c549c506
Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
1033
diff
changeset
|
29 g, |
ed19c549c506
Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
1033
diff
changeset
|
30 dissipation_interior_stencil(interior_weights), |
ed19c549c506
Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
1033
diff
changeset
|
31 dissipation_lower_closure_stencils(interior_weights), |
ed19c549c506
Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
1033
diff
changeset
|
32 dissipation_upper_closure_stencils(interior_weights), |
ed19c549c506
Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
1033
diff
changeset
|
33 ) |
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1212
diff
changeset
|
34 Dᵀ = StencilOperatorDistinctClosures( |
1034
ed19c549c506
Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
1033
diff
changeset
|
35 g, |
ed19c549c506
Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
1033
diff
changeset
|
36 dissipation_transpose_interior_stencil(interior_weights), |
ed19c549c506
Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
1033
diff
changeset
|
37 dissipation_transpose_lower_closure_stencils(interior_weights), |
ed19c549c506
Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
1033
diff
changeset
|
38 dissipation_transpose_upper_closure_stencils(interior_weights), |
ed19c549c506
Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
1033
diff
changeset
|
39 ) |
ed19c549c506
Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
1033
diff
changeset
|
40 |
ed19c549c506
Implement undevided dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
1033
diff
changeset
|
41 return D, Dᵀ |
1021
ee5a641a8277
Add some tests and start implementing dissipation()
Jonatan Werpers <jonatan@werpers.com>
parents:
1020
diff
changeset
|
42 end |
ee5a641a8277
Add some tests and start implementing dissipation()
Jonatan Werpers <jonatan@werpers.com>
parents:
1020
diff
changeset
|
43 |
1020
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
44 function dissipation_interior_weights(p) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
45 if p == 0 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
46 return (1,) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
47 end |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
48 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
49 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
|
50 end |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
51 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
52 midpoint(weights) = length(weights)÷2 + 1 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
53 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
|
54 |
1035
ceda69b8f27a
Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents:
1034
diff
changeset
|
55 function dissipation_interior_stencil(weights) |
ceda69b8f27a
Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents:
1034
diff
changeset
|
56 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
|
57 end |
ceda69b8f27a
Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents:
1034
diff
changeset
|
58 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
|
59 if iseven(length(weights)) |
ceda69b8f27a
Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents:
1034
diff
changeset
|
60 weights = map(-, weights) |
ceda69b8f27a
Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents:
1034
diff
changeset
|
61 end |
ceda69b8f27a
Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents:
1034
diff
changeset
|
62 |
ceda69b8f27a
Add test for transpose equality and fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents:
1034
diff
changeset
|
63 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
|
64 end |
1029
129262c8e897
Change signatures for interior stencil methods
Jonatan Werpers <jonatan@werpers.com>
parents:
1021
diff
changeset
|
65 |
1020
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
66 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
|
67 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
|
68 |
1212
d60a10ad6579
Rewrite functions to avoid long lines
Jonatan Werpers <jonatan@werpers.com>
parents:
1205
diff
changeset
|
69 function dissipation_lower_closure_stencils(interior_weights) |
d60a10ad6579
Rewrite functions to avoid long lines
Jonatan Werpers <jonatan@werpers.com>
parents:
1205
diff
changeset
|
70 stencil(i) = Stencil(interior_weights..., center=i) |
d60a10ad6579
Rewrite functions to avoid long lines
Jonatan Werpers <jonatan@werpers.com>
parents:
1205
diff
changeset
|
71 return ntuple(i->stencil(i), dissipation_lower_closure_size(interior_weights)) |
d60a10ad6579
Rewrite functions to avoid long lines
Jonatan Werpers <jonatan@werpers.com>
parents:
1205
diff
changeset
|
72 end |
d60a10ad6579
Rewrite functions to avoid long lines
Jonatan Werpers <jonatan@werpers.com>
parents:
1205
diff
changeset
|
73 |
d60a10ad6579
Rewrite functions to avoid long lines
Jonatan Werpers <jonatan@werpers.com>
parents:
1205
diff
changeset
|
74 function dissipation_upper_closure_stencils(interior_weights) |
d60a10ad6579
Rewrite functions to avoid long lines
Jonatan Werpers <jonatan@werpers.com>
parents:
1205
diff
changeset
|
75 center(i) = length(interior_weights) - dissipation_upper_closure_size(interior_weights) + i |
d60a10ad6579
Rewrite functions to avoid long lines
Jonatan Werpers <jonatan@werpers.com>
parents:
1205
diff
changeset
|
76 stencil(i) = Stencil(interior_weights..., center=center(i)) |
d60a10ad6579
Rewrite functions to avoid long lines
Jonatan Werpers <jonatan@werpers.com>
parents:
1205
diff
changeset
|
77 return ntuple(i->stencil(i), dissipation_upper_closure_size(interior_weights)) |
d60a10ad6579
Rewrite functions to avoid long lines
Jonatan Werpers <jonatan@werpers.com>
parents:
1205
diff
changeset
|
78 end |
1020
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
79 |
1033
0cb4c6b15d8e
Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
1029
diff
changeset
|
80 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
|
81 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
|
82 |
0cb4c6b15d8e
Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
1029
diff
changeset
|
83 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
|
84 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
|
85 end |
0cb4c6b15d8e
Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
1029
diff
changeset
|
86 |
0cb4c6b15d8e
Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
1029
diff
changeset
|
87 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
|
88 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
|
89 |
0cb4c6b15d8e
Make closures have the same number of weights in all stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
1029
diff
changeset
|
90 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
|
91 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
|
92 end |
1020
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
93 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
94 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
95 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
|
96 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
|
97 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
98 for k ∈ i:-1:1 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
99 w = (w..., interior_weights[k]) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
100 end |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
101 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
102 return Stencil(w..., center = i) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
103 end |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
104 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
105 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
|
106 j = length(interior_weights)+1-i |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
107 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
|
108 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
109 for k ∈ j:1:length(interior_weights) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
110 w = (interior_weights[k], w...) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
111 end |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
112 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
113 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
|
114 end |