-
Notifications
You must be signed in to change notification settings - Fork 213
/
Copy pathlaplacian_operators.jl
58 lines (47 loc) · 2.46 KB
/
laplacian_operators.jl
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#####
##### Horizontal Laplacians
#####
@inline function ∇²hᶜᶜᶜ(i, j, k, grid, c)
return 1/Vᶜᶜᶜ(i, j, k, grid) * (δxᶜᵃᵃ(i, j, k, grid, Ax_∂xᶠᶜᶜ, c) +
δyᵃᶜᵃ(i, j, k, grid, Ay_∂yᶜᶠᶜ, c))
end
@inline function ∇²hᶠᶜᶜ(i, j, k, grid, u)
return 1/Vᶠᶜᶜ(i, j, k, grid) * (δxᶠᵃᵃ(i, j, k, grid, Ax_∂xᶜᶜᶜ, u) +
δyᵃᶜᵃ(i, j, k, grid, Ay_∂yᶠᶠᶜ, u))
end
@inline function ∇²hᶜᶠᶜ(i, j, k, grid, v)
return 1/Vᶜᶠᶜ(i, j, k, grid) * (δxᶜᵃᵃ(i, j, k, grid, Ax_∂xᶠᶠᶜ, v) +
δyᵃᶠᵃ(i, j, k, grid, Ay_∂yᶜᶜᶜ, v))
end
@inline function ∇²hᶜᶜᶠ(i, j, k, grid, w)
return 1/Vᶜᶠᶜ(i, j, k, grid) * (δxᶜᵃᵃ(i, j, k, grid, Ax_∂xᶠᶠᶜ, v) +
δyᵃᶠᵃ(i, j, k, grid, Ay_∂yᶜᶜᶜ, v))
end
"""
∇²ᶜᶜᶜ(i, j, k, grid, c)
Calculate the Laplacian of ``c`` via
```julia
1/V * [δxᶜᵃᵃ(Ax * ∂xᶠᵃᵃ(c)) + δyᵃᶜᵃ(Ay * ∂yᵃᶠᵃ(c)) + δzᵃᵃᶜ(Az * ∂zᵃᵃᶠ(c))]
```
which ends up at the location `ccc`.
"""
@inline function ∇²ᶜᶜᶜ(i, j, k, grid, c)
return 1/Vᶜᶜᶜ(i, j, k, grid) * (δxᶜᵃᵃ(i, j, k, grid, Ax_∂xᶠᶜᶜ, c) +
δyᵃᶜᵃ(i, j, k, grid, Ay_∂yᶜᶠᶜ, c) +
δzᵃᵃᶜ(i, j, k, grid, Az_∂zᶜᶜᶠ, c))
end
@inline function ∇²ᶠᶜᶜ(i, j, k, grid, u)
return 1/Vᶠᶜᶜ(i, j, k, grid) * (δxᶠᵃᵃ(i, j, k, grid, Ax_∂xᶜᶜᶜ, u) +
δyᵃᶜᵃ(i, j, k, grid, Ay_∂yᶠᶠᶜ, u) +
δzᵃᵃᶜ(i, j, k, grid, Az_∂zᶠᶜᶠ, u))
end
@inline function ∇²ᶜᶠᶜ(i, j, k, grid, v)
return 1/Vᶜᶠᶜ(i, j, k, grid) * (δxᶜᵃᵃ(i, j, k, grid, Ax_∂xᶠᶠᶜ, v) +
δyᵃᶠᵃ(i, j, k, grid, Ay_∂yᶜᶜᶜ, v) +
δzᵃᵃᶜ(i, j, k, grid, Az_∂zᶜᶠᶠ, v))
end
@inline function ∇²ᶜᶜᶠ(i, j, k, grid, w)
return 1/Vᶜᶜᶠ(i, j, k, grid) * (δxᶜᵃᵃ(i, j, k, grid, Ax_∂xᶠᶜᶠ, w) +
δyᵃᶜᵃ(i, j, k, grid, Ay_∂yᶜᶠᶠ, w) +
δzᵃᵃᶠ(i, j, k, grid, Az_∂zᶜᶜᶜ, w))
end