forked from dawn-ico/dusk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinterpolation_sph.py
43 lines (40 loc) · 1.21 KB
/
interpolation_sph.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from dusk.script import *
@stencil
def interpolation_sph(
xn: Field[Cell],
yn: Field[Cell],
xc: Field[Cell],
yc: Field[Cell],
fn: Field[Cell],
f_intp: Field[Cell],
h: Field[Cell],
pi: Field[Cell],
):
wij: Field[Cell > Edge > Cell]
qij: Field[Cell > Edge > Cell]
Wn: Field[Cell]
with levels_upward:
with sparse[Cell > Edge > Cell]:
qij = (
sqrt(
(xc[Cell > Edge > Cell] - xn[Cell > Edge > Cell])
* (xc[Cell > Edge > Cell] - xn[Cell > Edge > Cell])
+ (yc[Cell > Edge > Cell] - yn[Cell > Edge > Cell])
* (yc[Cell > Edge > Cell] - yn[Cell > Edge > Cell])
)
/ h[Cell > Edge > Cell]
)
wij = (
1.0
/ (
pi[Cell > Edge > Cell]
* h[Cell > Edge > Cell]
* h[Cell > Edge > Cell]
)
* exp(-qij * qij)
)
Wn = sum_over(Cell > Edge > Cell, wij)
f_intp = sum_over(
Cell > Edge > Cell,
1 / Wn[Cell > Edge > Cell] * wij * fn[Cell > Edge > Cell],
)