@@ -331,9 +331,14 @@ Form<T, U> create_form(
331
331
assert (topology);
332
332
const int tdim = topology->dim ();
333
333
334
+ const int * integral_offsets = ufcx_form.form_integral_offsets ;
335
+ std::vector<int > num_integrals_type (3 );
336
+ for (int i = 0 ; i < 3 ; ++i)
337
+ num_integrals_type[i] = integral_offsets[i + 1 ] - integral_offsets[i];
338
+
334
339
// Create facets, if required
335
- if (ufcx_form. num_integrals ( exterior_facet) > 0
336
- or ufcx_form. num_integrals ( interior_facet) > 0 )
340
+ if (num_integrals_type[ exterior_facet] > 0
341
+ or num_integrals_type[ interior_facet] > 0 )
337
342
{
338
343
mesh->topology_mutable ()->create_entities (tdim - 1 );
339
344
mesh->topology_mutable ()->create_connectivity (tdim - 1 , tdim);
@@ -353,14 +358,16 @@ Form<T, U> create_form(
353
358
354
359
// Attach cell kernels
355
360
{
356
- std::span<const int > ids (ufcx_form.integral_ids (cell),
357
- ufcx_form.num_integrals (cell));
361
+ std::span<const int > ids (ufcx_form.form_integral_ids
362
+ + integral_offsets[cell],
363
+ num_integrals_type[cell]);
358
364
auto itg = integral_data.insert ({IntegralType::cell, {}});
359
365
auto sd = subdomains.find (IntegralType::cell);
360
- for (int i = 0 ; i < ufcx_form. num_integrals ( cell) ; ++i)
366
+ for (int i = 0 ; i < num_integrals_type[ cell] ; ++i)
361
367
{
362
368
const int id = ids[i];
363
- ufcx_integral* integral = ufcx_form.integrals (cell)[i];
369
+ ufcx_integral* integral
370
+ = ufcx_form.form_integrals [integral_offsets[cell] + i];
364
371
assert (integral);
365
372
366
373
kern k = nullptr ;
@@ -411,14 +418,16 @@ Form<T, U> create_form(
411
418
412
419
// Attach exterior facet kernels
413
420
{
414
- std::span<const int > ids (ufcx_form.integral_ids (exterior_facet),
415
- ufcx_form.num_integrals (exterior_facet));
421
+ std::span<const int > ids (ufcx_form.form_integral_ids
422
+ + integral_offsets[exterior_facet],
423
+ num_integrals_type[exterior_facet]);
416
424
auto itg = integral_data.insert ({IntegralType::exterior_facet, {}});
417
425
auto sd = subdomains.find (IntegralType::exterior_facet);
418
- for (int i = 0 ; i < ufcx_form. num_integrals ( exterior_facet) ; ++i)
426
+ for (int i = 0 ; i < num_integrals_type[ exterior_facet] ; ++i)
419
427
{
420
428
const int id = ids[i];
421
- ufcx_integral* integral = ufcx_form.integrals (exterior_facet)[i];
429
+ ufcx_integral* integral
430
+ = ufcx_form.form_integrals [integral_offsets[exterior_facet] + i];
422
431
assert (integral);
423
432
424
433
kern k = nullptr ;
@@ -479,14 +488,16 @@ Form<T, U> create_form(
479
488
480
489
// Attach interior facet kernels
481
490
{
482
- std::span<const int > ids (ufcx_form.integral_ids (interior_facet),
483
- ufcx_form.num_integrals (interior_facet));
491
+ std::span<const int > ids (ufcx_form.form_integral_ids
492
+ + integral_offsets[interior_facet],
493
+ num_integrals_type[interior_facet]);
484
494
auto itg = integral_data.insert ({IntegralType::interior_facet, {}});
485
495
auto sd = subdomains.find (IntegralType::interior_facet);
486
- for (int i = 0 ; i < ufcx_form. num_integrals ( interior_facet) ; ++i)
496
+ for (int i = 0 ; i < num_integrals_type[ interior_facet] ; ++i)
487
497
{
488
498
const int id = ids[i];
489
- ufcx_integral* integral = ufcx_form.integrals (interior_facet)[i];
499
+ ufcx_integral* integral
500
+ = ufcx_form.form_integrals [integral_offsets[interior_facet] + i];
490
501
assert (integral);
491
502
492
503
kern k = nullptr ;
0 commit comments