Skip to content

Commit 37b21d8

Browse files
committed
Portable::MatrixFree: add dof_handler index
1 parent 2b65dfb commit 37b21d8

File tree

3 files changed

+24
-9
lines changed

3 files changed

+24
-9
lines changed

include/deal.II/matrix_free/portable_fe_evaluation.h

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,16 @@ namespace Portable
121121
tensor_dofs_per_component * n_components;
122122

123123
/**
124-
* Constructor.
124+
* Constructor. You will need to provide a pointer to the
125+
* Portable::MatrixFree::Data object, which is typically provided to the
126+
* functor inside the
127+
* Portable::MatrixFree::cell_loop() and the index @p dof_index of the DoFHandler
128+
* if more than one was provided when the Portable::MatrixFree object was
129+
* initialized.
125130
*/
126131
DEAL_II_HOST_DEVICE
127-
explicit FEEvaluation(const data_type *data);
132+
explicit FEEvaluation(const data_type *data,
133+
const unsigned int dof_index = 0);
128134

129135
/**
130136
* Return the index of the current cell.
@@ -255,12 +261,15 @@ namespace Portable
255261
typename Number>
256262
DEAL_II_HOST_DEVICE
257263
FEEvaluation<dim, fe_degree, n_q_points_1d, n_components_, Number>::
258-
FEEvaluation(const data_type *data)
264+
FEEvaluation(const data_type *data, const unsigned int dof_index)
259265
: data(data)
260266
, precomputed_data(data->precomputed_data)
261267
, shared_data(data->shared_data)
262268
, cell_id(data->team_member.league_rank())
263-
{}
269+
{
270+
(void)dof_index;
271+
AssertIndexRange(dof_index, data->n_dofhandler);
272+
}
264273

265274

266275

include/deal.II/matrix_free/portable_matrix_free.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,7 @@ namespace Portable
375375
*/
376376
TeamHandle team_member;
377377

378+
const unsigned int n_dofhandler;
378379
const int cell_index;
379380
const PrecomputedData *precomputed_data;
380381
SharedData<dim, Number> *shared_data;

include/deal.II/matrix_free/portable_matrix_free.templates.h

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -418,8 +418,11 @@ namespace Portable
418418

419419
SharedData<dim, Number> shared_data(values, gradients, scratch_pad);
420420

421+
const unsigned int cell_index = team_member.league_rank();
422+
421423
typename MatrixFree<dim, Number>::Data data{team_member,
422-
team_member.league_rank(),
424+
/* n_dofhandler */ 1,
425+
cell_index,
423426
&gpu_data,
424427
&shared_data};
425428

@@ -675,14 +678,16 @@ namespace Portable
675678
Kokkos::parallel_for(Kokkos::TeamVectorRange(team_member,
676679
n_q_points),
677680
[&](const int q_point) {
678-
const int cell = team_member.league_rank();
681+
const int cell_index =
682+
team_member.league_rank();
679683

680684
Data data{team_member,
681-
cell,
685+
/* n_dofhandler */ 1,
686+
cell_index,
682687
&color_data,
683-
/*shared_data*/ nullptr};
688+
/* shared_data */ nullptr};
684689

685-
func(&data, cell, q_point);
690+
func(&data, cell_index, q_point);
686691
});
687692
});
688693
}

0 commit comments

Comments
 (0)