82
82
83
83
function kernel_cache (
84
84
k:: FieldBinOp ,a:: AbstractVector ,b:: AbstractVector )
85
- _field_bin_op_checks_vecvec (a,b)
86
85
na = length (a)
87
86
Ta = eltype (a)
88
87
Tb = eltype (b)
@@ -91,6 +90,15 @@ function kernel_cache(
91
90
CachedArray (r)
92
91
end
93
92
93
+ function kernel_testitem! (
94
+ c,k:: FieldBinOp ,a:: AbstractVector ,b:: AbstractVector )
95
+ if _valid_checks_vecvec (a,b)
96
+ apply_kernel! (c,k,a,b)
97
+ else
98
+ c. array
99
+ end
100
+ end
101
+
94
102
@inline function apply_kernel! (
95
103
c,k:: FieldBinOp ,a:: AbstractVector ,b:: AbstractVector )
96
104
_field_bin_op_checks_vecvec (a,b)
@@ -104,23 +112,35 @@ end
104
112
end
105
113
106
114
function _field_bin_op_checks_vecvec (a,b)
115
+ @assert _valid_checks_vecvec (a,b) " Binary operation between fields: vector vs vector size mismatch."
116
+ end
117
+
118
+ function _valid_checks_vecvec (a,b)
107
119
na = length (a)
108
120
nb = length (b)
109
- @assert na == nb " Binary operation between fields: vector vs vector size mismatch. "
121
+ na == nb
110
122
end
111
123
112
124
# Matrix vs Vector
113
125
114
126
function kernel_cache (
115
127
k:: FieldBinOp ,a:: AbstractMatrix ,b:: AbstractVector )
116
- _field_bin_op_checks_matvec (a,b)
117
128
Ta = eltype (a)
118
129
Tb = eltype (b)
119
130
T = return_type (k. op,Ta,Tb)
120
131
r = zeros (T,size (a))
121
132
CachedArray (r)
122
133
end
123
134
135
+ function kernel_testitem! (
136
+ c,k:: FieldBinOp ,a:: AbstractMatrix ,b:: AbstractVector )
137
+ if _valid_checks_matvec (a,b)
138
+ apply_kernel! (c,k,a,b)
139
+ else
140
+ c. array
141
+ end
142
+ end
143
+
124
144
@inline function apply_kernel! (
125
145
c,k:: FieldBinOp ,a:: AbstractMatrix ,b:: AbstractVector )
126
146
_field_bin_op_checks_matvec (a,b)
@@ -137,23 +157,35 @@ end
137
157
end
138
158
139
159
function _field_bin_op_checks_matvec (a,b)
160
+ @assert _valid_checks_matvec (a,b) " Binary operation between fields: matrix vs vector size mismatch."
161
+ end
162
+
163
+ function _valid_checks_matvec (a,b)
140
164
na, _ = size (a)
141
165
nb = length (b)
142
- @assert na == nb " Binary operation between fields: matrix vs vector size mismatch. "
166
+ na == nb
143
167
end
144
168
145
169
# Vector vs Matrix
146
170
147
171
function kernel_cache (
148
172
k:: FieldBinOp ,a:: AbstractVector ,b:: AbstractMatrix )
149
- _field_bin_op_checks_vecmat (a,b)
150
173
Ta = eltype (a)
151
174
Tb = eltype (b)
152
175
T = return_type (k. op,Ta,Tb)
153
176
r = zeros (T,size (b))
154
177
CachedArray (r)
155
178
end
156
179
180
+ function kernel_testitem! (
181
+ c,k:: FieldBinOp ,a:: AbstractVector ,b:: AbstractMatrix )
182
+ if _valid_checks_vecmat (a,b)
183
+ apply_kernel! (c,k,a,b)
184
+ else
185
+ c. array
186
+ end
187
+ end
188
+
157
189
@inline function apply_kernel! (
158
190
c,k:: FieldBinOp ,a:: AbstractVector ,b:: AbstractMatrix )
159
191
_field_bin_op_checks_vecmat (a,b)
@@ -170,16 +202,19 @@ end
170
202
end
171
203
172
204
function _field_bin_op_checks_vecmat (a,b)
205
+ @assert _valid_checks_vecmat (a,b) " Binary operation between fields: vector vs matrix size mismatch."
206
+ end
207
+
208
+ function _valid_checks_vecmat (a,b)
173
209
nb, _ = size (b)
174
210
na = length (a)
175
- @assert na == nb " Binary operation between fields: vector vs matrix size mismatch. "
211
+ na == nb
176
212
end
177
213
178
214
# Matrix vs matrix
179
215
180
216
function kernel_cache (
181
217
k:: FieldBinOp ,a:: AbstractMatrix ,b:: AbstractMatrix )
182
- _field_bin_op_checks_matmat (a,b)
183
218
Ta = eltype (a)
184
219
Tb = eltype (b)
185
220
T = return_type (k. op,Ta,Tb)
@@ -189,6 +224,15 @@ function kernel_cache(
189
224
CachedArray (r)
190
225
end
191
226
227
+ function kernel_testitem! (
228
+ c,k:: FieldBinOp ,a:: AbstractMatrix ,b:: AbstractMatrix )
229
+ if _valid_checks_matmat (a,b)
230
+ apply_kernel! (c,k,a,b)
231
+ else
232
+ c. array
233
+ end
234
+ end
235
+
192
236
@inline function apply_kernel! (
193
237
c,k:: FieldBinOp ,a:: AbstractMatrix ,b:: AbstractMatrix )
194
238
_field_bin_op_checks_matmat (a,b)
207
251
end
208
252
209
253
function _field_bin_op_checks_matmat (a,b)
254
+ @assert _valid_checks_matmat (a,b) " Binary operation between fields: matrix vs matrix size mismatch."
255
+ end
256
+
257
+ function _valid_checks_matmat (a,b)
210
258
na, ni = size (a)
211
259
nb, nj = size (b)
212
- @assert na == nb " Binary operation between fields: matrix vs matrix size mismatch. "
260
+ na == nb
213
261
end
214
262
215
263
# Define gradients
0 commit comments