@@ -229,17 +229,21 @@ function build_assembler!(A::AbstractMatrix, b::AbstractVector, O::NonlinearOper
229
229
Kj = Array {KernelEvaluator, 1} ([])
230
230
231
231
sparse_jacobians = O. parameters[:sparse_jacobians ]
232
- sparsity_pattern = O. parameters[:sparse_jacobians_pattern ]
233
232
use_autodiff = O. jacobian === nothing
234
233
for EG in EGs
235
234
# # prepare parameters
236
235
QPj = QPInfos (xgrid; time = time, x = ones (Tv, size (xgrid[Coordinates], 1 )), params = O. parameters[:params ])
237
236
kernel_params = (result, input) -> (O. kernel (result, input, QPj))
238
237
input_args = zeros (Tv, op_offsets_args[end ] + O. parameters[:extra_inputsize ])
239
238
result_kernel = zeros (Tv, op_offsets_test[end ])
239
+ if O. parameters[:sparse_jacobians_pattern ] === nothing
240
+ sparsity_detector = TracerSparsityDetector ()
241
+ else
242
+ sparsity_detector = KnownJacobianSparsityDetector (O. parameters[:sparse_jacobians_pattern ])
243
+ end
240
244
sparse_forward_backend = AutoSparse (
241
245
O. parameters[:autodiff_backend ];
242
- sparsity_detector = TracerSparsityDetector () ,
246
+ sparsity_detector = sparsity_detector ,
243
247
coloring_algorithm = GreedyColoringAlgorithm ()
244
248
)
245
249
jac_prep = prepare_jacobian (kernel_params, result_kernel, sparse_forward_backend, input_args)
@@ -287,9 +291,17 @@ function build_assembler!(A::AbstractMatrix, b::AbstractVector, O::NonlinearOper
287
291
value = K. result_kernel
288
292
jac_prep = K. jac_prep
289
293
jac_backend = K. jac_backend
290
- # todo: get sparse jacobians to work (need to extract sparsity pattern)
291
294
sparse_jacobians = false
292
- jac = zeros (Tv, length (value), length (input_args))
295
+ if sparse_jacobians
296
+ if O. parameters[:sparse_jacobians_pattern ] === nothing
297
+ jac_sparsity_pattern = DifferentiationInterface. sparsity_pattern (jac_prep)
298
+ else
299
+ jac_sparsity_pattern = O. parameters[:sparse_jacobians_pattern ]
300
+ end
301
+ jac = Tv .(sparse (sparsity_pattern))
302
+ else
303
+ jac = zeros (Tv, length (value), length (input_args))
304
+ end
293
305
kernel_params = K. kernel
294
306
params. time = time
295
307
0 commit comments