Mercurial > repos > public > sbplib_julia
annotate src/SbpOperators/volumeops/derivatives/dissipation.jl @ 1020:3f5137ce3aa1 feature/dissipation_operators
Start adding helper functions for building dissipation operators
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Fri, 18 Mar 2022 12:24:10 +0100 |
parents | |
children | ee5a641a8277 |
rev | line source |
---|---|
1020
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
1 function dissipation_interior_weights(p) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
2 if p == 0 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
3 return (1,) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 end |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
5 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
6 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
|
7 end |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
8 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
9 function dissipation_interior_stencil(p) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
10 w = dissipation_interior_weights(p) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
11 Stencil(w..., center=midpoint(w)) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
12 end |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
13 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 function dissipation_transpose_interior_stencil(p) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
15 w = dissipation_interior_weights(p) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
16 Stencil(w..., center=midpoint_transpose(w)) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
17 end |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
18 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
19 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
20 midpoint(weights) = length(weights)÷2 + 1 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 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
|
22 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
23 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
|
24 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
|
25 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
26 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
|
27 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
|
28 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
29 dissipation_transpose_lower_closure_stencils(interior_weights) = ntuple(i->dissipation_transpose_lower_closure_stencil(interior_weights, i), length(interior_weights)) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
30 dissipation_transpose_upper_closure_stencils(interior_weights) = reverse(ntuple(i->dissipation_transpose_upper_closure_stencil(interior_weights, i), length(interior_weights))) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
32 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
33 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
|
34 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
|
35 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
36 for k ∈ i:-1:1 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
37 w = (w..., interior_weights[k]) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
38 end |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
39 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
40 return Stencil(w..., center = i) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
41 end |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
42 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
43 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
|
44 j = length(interior_weights)+1-i |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
45 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
|
46 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
47 for k ∈ j:1:length(interior_weights) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
48 w = (interior_weights[k], w...) |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
49 end |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
50 |
3f5137ce3aa1
Start adding helper functions for building dissipation operators
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
51 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
|
52 end |