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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
99df343c7f61 Fix docstring
Jonatan Werpers <jonatan@werpers.com>
parents: 1203
diff changeset
10 is described in "K. Mattsson, M. Svärd, and J. Nordström, “Stable and Accurate
99df343c7f61 Fix docstring
Jonatan Werpers <jonatan@werpers.com>
parents: 1203
diff changeset
11 Artificial Dissipation,” Journal of Scientific Computing, vol. 21, no. 1, pp.
99df343c7f61 Fix docstring
Jonatan Werpers <jonatan@werpers.com>
parents: 1203
diff changeset
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