@@ -274,13 +274,18 @@ void Method::interpolate_field_rank3(const Field& src, Field& tgt, const Matrix&
274274 ATLAS_NOTIMPLEMENTED; // hicsparse does not support rank-3 fields
275275 }
276276
277+ if (backend.type () == " eckit_linalg" ) {
278+ // Switch to OpenMP as eckit_linalg does not support rank-3 fields
279+ backend = sparse::backend::openmp ();
280+ }
281+
277282 auto W_v = make_host_view<eckit::linalg::Scalar, eckit::linalg::Index>(W);
278283 auto src_v = make_host_view_updated<Value, 3 >(src);
279284 auto tgt_v = make_host_view_updated<Value, 3 >(tgt);
280285 if (not W.empty () && nonLinear_ (src)) {
281286 ATLAS_ASSERT (false , " nonLinear interpolation not supported for rank-3 fields." );
282287 }
283- sparse_matrix_multiply (W_v, src_v, tgt_v, sparse:: backend::openmp () );
288+ sparse_matrix_multiply (W_v, src_v, tgt_v, backend);
284289
285290 tgt.setDeviceNeedsUpdate (true );
286291}
@@ -343,11 +348,16 @@ void Method::adjoint_interpolate_field_rank3(Field& src, const Field& tgt, const
343348 ATLAS_NOTIMPLEMENTED; // hicsparse does not support rank-3 fields
344349 }
345350
351+ if (backend.type () == " eckit_linalg" ) {
352+ // Switch to OpenMP as eckit_linalg does not support rank-3 fields
353+ backend = sparse::backend::openmp ();
354+ }
355+
346356 auto src_v = make_host_view_updated<Value, 3 >(src);
347357 auto tgt_v = make_host_view_updated<Value, 3 >(tgt);
348358 auto W_v = make_host_view<eckit::linalg::Scalar,eckit::linalg::Index>(W);
349359
350- sparse_matrix_multiply_add (W_v, tgt_v, src_v, sparse:: backend::openmp () );
360+ sparse_matrix_multiply_add (W_v, tgt_v, src_v, backend);
351361
352362 src.setDeviceNeedsUpdate (true );
353363}
0 commit comments