@@ -4,107 +4,126 @@ function op_GradientF2C!(c, f, bcs = (;))
4
4
@. c.∇x = ∇f (f. y)
5
5
return nothing
6
6
end
7
+ n_reads_writes (:: Type{typeof(op_GradientF2C!)} ) = 2 # 1 write + 1 read (0 metric terms)
7
8
function op_GradientC2F! (c, f, bcs)
8
9
∇f = Operators. GradientC2F (bcs)
9
10
@. f.∇x = ∇f (c. y)
10
11
return nothing
11
12
end
13
+ n_reads_writes (:: Type{typeof(op_GradientC2F!)} ) = 2 # 1 write + 1 read (0 metric terms)
12
14
# ### Divergences
13
15
function op_DivergenceF2C! (c, f, bcs = (;))
14
16
div = Operators. DivergenceF2C (bcs)
15
17
@. c. x = div (Geometry. WVector (f. y))
16
18
return nothing
17
19
end
20
+ n_reads_writes (:: Type{typeof(op_DivergenceF2C!)} ) = 3 # 1 write + 2 reads (1 metric term)
18
21
function op_DivergenceC2F! (c, f, bcs)
19
22
div = Operators. DivergenceC2F (bcs)
20
23
@. f. x = div (Geometry. WVector (c. y))
21
24
return nothing
22
25
end
26
+ n_reads_writes (:: Type{typeof(op_DivergenceC2F!)} ) = 3 # 1 write + 2 reads (1 metric term)
23
27
# ### Interpolations
24
28
function op_InterpolateF2C! (c, f, bcs = (;))
25
29
interp = Operators. InterpolateF2C (bcs)
26
30
@. c. x = interp (f. y)
27
31
return nothing
28
32
end
33
+ n_reads_writes (:: Type{typeof(op_InterpolateF2C!)} ) = 2 # 1 write + 1 reads (0 metric terms)
29
34
function op_InterpolateC2F! (c, f, bcs)
30
35
interp = Operators. InterpolateC2F (bcs)
31
36
@. f. x = interp (c. y)
32
37
return nothing
33
38
end
39
+ n_reads_writes (:: Type{typeof(op_InterpolateC2F!)} ) = 2 # 1 write + 1 reads (0 metric terms)
34
40
function op_LeftBiasedC2F! (c, f, bcs)
35
41
interp = Operators. LeftBiasedC2F (bcs)
36
42
@. f. x = interp (c. y)
37
43
return nothing
38
44
end
45
+ n_reads_writes (:: Type{typeof(op_LeftBiasedC2F!)} ) = 2 # 1 write + 1 reads (0 metric terms)
39
46
function op_LeftBiasedF2C! (c, f, bcs = (;))
40
47
interp = Operators. LeftBiasedF2C (bcs)
41
48
@. c. x = interp (f. y)
42
49
return nothing
43
50
end
51
+ n_reads_writes (:: Type{typeof(op_LeftBiasedF2C!)} ) = 2 # 1 write + 1 reads (0 metric terms)
44
52
function op_RightBiasedC2F! (c, f, bcs)
45
53
interp = Operators. RightBiasedC2F (bcs)
46
54
@. f. x = interp (c. y)
47
55
return nothing
48
56
end
57
+ n_reads_writes (:: Type{typeof(op_RightBiasedC2F!)} ) = 2 # 1 write + 1 reads (0 metric terms)
49
58
function op_RightBiasedF2C! (c, f, bcs = (;))
50
59
interp = Operators. RightBiasedF2C (bcs)
51
60
@. c. x = interp (f. y)
52
61
return nothing
53
62
end
63
+ n_reads_writes (:: Type{typeof(op_RightBiasedF2C!)} ) = 2 # 1 write + 1 reads (0 metric terms)
54
64
# ### Curl
55
65
function op_CurlC2F! (c, f, bcs = (;))
56
66
curl = Operators. CurlC2F (bcs)
57
67
@. f. curluₕ = curl (c. uₕ)
58
68
return nothing
59
69
end
70
+ n_reads_writes (:: Type{typeof(op_CurlC2F!)} ) = - 1 # todo
60
71
# ### Mixed/adaptive
61
72
function op_UpwindBiasedProductC2F! (c, f, bcs = (;))
62
73
upwind = Operators. UpwindBiasedProductC2F (bcs)
63
74
@. f. contra3 = upwind (f. w, c. x)
64
75
return nothing
65
76
end
77
+ n_reads_writes (:: Type{typeof(op_UpwindBiasedProductC2F!)} ) = - 1 # todo
66
78
function op_Upwind3rdOrderBiasedProductC2F! (c, f, bcs = (;))
67
79
upwind = Operators. Upwind3rdOrderBiasedProductC2F (bcs)
68
80
@. f. contra3 = upwind (f. w, c. x)
69
81
return nothing
70
82
end
83
+ n_reads_writes (:: Type{typeof(op_Upwind3rdOrderBiasedProductC2F!)} ) = - 1 # todo
71
84
# ### Simple composed (non-exhaustive due to combinatorial explosion)
72
85
function op_divgrad_CC! (c, f, bcs)
73
86
grad = Operators. GradientC2F (bcs. inner)
74
87
div = Operators. DivergenceF2C (bcs. outer)
75
88
@. c. y = div (grad (c. x))
76
89
return nothing
77
90
end
91
+ n_reads_writes (:: Type{typeof(op_divgrad_CC!)} ) = 3 # 1 write, 2 reads (1 metric term)
78
92
function op_divgrad_FF! (c, f, bcs)
79
93
grad = Operators. GradientF2C (bcs. inner)
80
94
div = Operators. DivergenceC2F (bcs. outer)
81
95
@. f. y = div (grad (f. x))
82
96
return nothing
83
97
end
98
+ n_reads_writes (:: Type{typeof(op_divgrad_FF!)} ) = 3 # 1 write, 2 reads (1 metric term)
84
99
function op_div_interp_CC! (c, f, bcs)
85
100
interp = Operators. InterpolateC2F (bcs. inner)
86
101
div = Operators. DivergenceF2C (bcs. outer)
87
102
@. c. y = div (interp (c. contra3))
88
103
return nothing
89
104
end
105
+ n_reads_writes (:: Type{typeof(op_div_interp_CC!)} ) = - 1 # todo
90
106
function op_div_interp_FF! (c, f, bcs)
91
107
interp = Operators. InterpolateF2C (bcs. inner)
92
108
div = Operators. DivergenceC2F (bcs. outer)
93
109
@. f. y = div (interp (f. contra3))
94
110
return nothing
95
111
end
112
+ n_reads_writes (:: Type{typeof(op_div_interp_FF!)} ) = - 1 # todo
96
113
function op_divgrad_uₕ! (c, f, bcs)
97
114
grad = Operators. GradientC2F (bcs. inner)
98
115
div = Operators. DivergenceF2C (bcs. outer)
99
116
@. c. uₕ2 = div (f. y * grad (c. uₕ))
100
117
return nothing
101
118
end
119
+ n_reads_writes (:: Type{typeof(op_divgrad_uₕ!)} ) = - 1 # todo
102
120
function op_divUpwind3rdOrderBiasedProductC2F! (c, f, bcs)
103
121
upwind = Operators. Upwind3rdOrderBiasedProductC2F (bcs. inner)
104
122
divf2c = Operators. DivergenceF2C (bcs. outer)
105
123
@. c. y = divf2c (upwind (f. w, c. x))
106
124
return nothing
107
125
end
126
+ n_reads_writes (:: Type{typeof(op_divUpwind3rdOrderBiasedProductC2F!)} ) = - 1 # todo
108
127
109
128
function op_broadcast_example0! (c, f, bcs)
110
129
Fields. bycolumn (axes (f. ᶠu³)) do colidx
@@ -113,6 +132,7 @@ function op_broadcast_example0!(c, f, bcs)
113
132
end
114
133
return nothing
115
134
end
135
+ n_reads_writes (:: Type{typeof(op_broadcast_example0!)} ) = 3 # 1 write, 2 reads (0 metric term)
116
136
117
137
function op_broadcast_example1! (c, f, bcs)
118
138
Fields. bycolumn (axes (f. ᶠu³)) do colidx
@@ -121,12 +141,14 @@ function op_broadcast_example1!(c, f, bcs)
121
141
end
122
142
return nothing
123
143
end
144
+ n_reads_writes (:: Type{typeof(op_broadcast_example1!)} ) = 4 # 1 write, 3 reads (1 metric term)
124
145
125
146
function op_broadcast_example2! (c, f, bcs)
126
147
CT3 = Geometry. Contravariant3Vector
127
148
@. f. ᶠu³ = f. ᶠuₕ³ + CT3 (f. ᶠw)
128
149
return nothing
129
150
end
151
+ n_reads_writes (:: Type{typeof(op_broadcast_example2!)} ) = 4 # 1 write, 3 reads (1 metric term)
130
152
131
153
#=
132
154
#####
0 commit comments