From 649143fb40040496a917640f8a3bb979ba618ed0 Mon Sep 17 00:00:00 2001 From: Maximilian Bergbauer Date: Mon, 2 Oct 2023 16:29:47 +0200 Subject: [PATCH] Also for general case --- include/deal.II/matrix_free/fe_evaluation.h | 78 +++++++++++---------- 1 file changed, 42 insertions(+), 36 deletions(-) diff --git a/include/deal.II/matrix_free/fe_evaluation.h b/include/deal.II/matrix_free/fe_evaluation.h index f378ae4b87..51cccf098a 100644 --- a/include/deal.II/matrix_free/fe_evaluation.h +++ b/include/deal.II/matrix_free/fe_evaluation.h @@ -7595,20 +7595,25 @@ FEEvaluationmapping_data->jacobians[0].size() > 0) + if (this_jacobian_data.size() != this->n_quadrature_points) this_jacobian_data.resize_fast(this->n_quadrature_points); - if (this->mapping_data->JxW_values.size() > 0) + if (this_J_value_data.size() != this->n_quadrature_points) this_J_value_data.resize_fast(this->n_quadrature_points); - if (this->mapping_data->jacobian_gradients[0].size() > 0) - this_jacobian_gradients_data.resize_fast(this->n_quadrature_points); + const auto &update_flags_cells = + this->matrix_free->get_mapping_info().update_flags_cells; - if (this->mapping_data->jacobian_gradients_non_inverse[0].size() > 0) - this_jacobian_gradients_non_inverse_data.resize_fast( - this->n_quadrature_points); + if (update_flags_cells & update_jacobian_grads && + this_jacobian_gradients_data.size() != this->n_quadrature_points) + { + this_jacobian_gradients_data.resize_fast(this->n_quadrature_points); + this_jacobian_gradients_non_inverse_data.resize_fast( + this->n_quadrature_points); + } - if (this->mapping_data->quadrature_points.size() > 0) + if (update_flags_cells & update_quadrature_points && + this_quadrature_points_data.size() != this->n_quadrature_points) this_quadrature_points_data.resize_fast(this->n_quadrature_points); } @@ -7690,34 +7695,35 @@ FEEvaluationmapping_data->JxW_values.size() > 0) - this_J_value_data[q][v] = - this->mapping_data->JxW_values[offsets + q_src][lane]; - - if (this->mapping_data->jacobians[0].size() > 0) - for (unsigned int i = 0; i < dim; ++i) - for (unsigned int j = 0; j < dim; ++j) - this_jacobian_data[q][i][j][v] = - this->mapping_data - ->jacobians[0][offsets + q_src][i][j][lane]; - - if (this->mapping_data->jacobian_gradients[0].size() > 0) - for (unsigned int i = 0; i < dim * (dim + 1) / 2; ++i) - for (unsigned int j = 0; j < dim; ++j) - this_jacobian_gradients_data[q][i][j][v] = - this->mapping_data - ->jacobian_gradients[0][offsets + q_src][i][j][lane]; - - if (this->mapping_data->jacobian_gradients_non_inverse[0].size() > - 0) - for (unsigned int i = 0; i < dim * (dim + 1) / 2; ++i) - for (unsigned int j = 0; j < dim; ++j) - this_jacobian_gradients_non_inverse_data[q][i][j][v] = - this->mapping_data - ->jacobian_gradients_non_inverse[0][offsets + q_src][i] - [j][lane]; - - if (this->mapping_data->quadrature_points.size() > 0) + this_J_value_data[q][v] = + this->mapping_data->JxW_values[offsets + q_src][lane]; + + for (unsigned int i = 0; i < dim; ++i) + for (unsigned int j = 0; j < dim; ++j) + this_jacobian_data[q][i][j][v] = + this->mapping_data + ->jacobians[0][offsets + q_src][i][j][lane]; + + const auto &update_flags_cells = + this->matrix_free->get_mapping_info().update_flags_cells; + + if (update_flags_cells & update_jacobian_grads) + { + for (unsigned int i = 0; i < dim * (dim + 1) / 2; ++i) + for (unsigned int j = 0; j < dim; ++j) + this_jacobian_gradients_data[q][i][j][v] = + this->mapping_data + ->jacobian_gradients[0][offsets + q_src][i][j][lane]; + + for (unsigned int i = 0; i < dim * (dim + 1) / 2; ++i) + for (unsigned int j = 0; j < dim; ++j) + this_jacobian_gradients_non_inverse_data[q][i][j][v] = + this->mapping_data + ->jacobian_gradients_non_inverse[0][offsets + q_src] + [i][j][lane]; + } + + if (update_flags_cells & update_quadrature_points) { if (cell_type <= internal::MatrixFreeFunctions::GeometryType::affine) -- 2.39.5