]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Chose correct code path for neighbors and activated mask 14119/head
authorMaximilian Bergbauer <maximilian.bergbauer@tum.de>
Fri, 8 Jul 2022 14:22:33 +0000 (16:22 +0200)
committerMaximilian Bergbauer <maximilian.bergbauer@tum.de>
Fri, 8 Jul 2022 15:08:42 +0000 (17:08 +0200)
include/deal.II/matrix_free/fe_evaluation.h

index a57f720e59d74623b145570a3cc75a01ca1c32b6..07dae56eb4f17c3971683190584317e501f72fcf 100644 (file)
@@ -3346,9 +3346,11 @@ FEEvaluationBase<dim, n_components_, Number, is_face, VectorizedArrayType>::
   std::array<unsigned int, VectorizedArrayType::size()> cells =
     this->get_cell_ids();
 
-  for (unsigned int v = 0; v < n_lanes; ++v)
-    if (mask[v] == false)
-      cells[v] = numbers::invalid_unsigned_int;
+  const bool masking_is_active = mask.count() < n_lanes;
+  if (masking_is_active)
+    for (unsigned int v = 0; v < n_lanes; ++v)
+      if (mask[v] == false)
+        cells[v] = numbers::invalid_unsigned_int;
 
   bool has_hn_constraints = false;
 
@@ -3370,6 +3372,10 @@ FEEvaluationBase<dim, n_components_, Number, is_face, VectorizedArrayType>::
                          internal::is_vectorizable<VectorType, Number>::value>
     vector_selector;
 
+  const bool is_neighbor_cells = !is_face && !this->is_interior_face();
+  const bool use_non_vectorized_path =
+    masking_is_active || is_neighbor_cells || has_hn_constraints;
+
   const std::size_t dofs_per_component = this->data->dofs_per_component_on_cell;
   std::array<VectorizedArrayType *, n_components> values_dofs;
   for (unsigned int c = 0; c < n_components; ++c)
@@ -3382,7 +3388,7 @@ FEEvaluationBase<dim, n_components_, Number, is_face, VectorizedArrayType>::
                      internal::MatrixFreeFunctions::DoFInfo::dof_access_cell]
           [this->cell] == internal::MatrixFreeFunctions::DoFInfo::
                             IndexStorageVariants::interleaved &&
-      (has_hn_constraints == false))
+      (use_non_vectorized_path == false))
     {
       const unsigned int *dof_indices =
         this->dof_info->dof_indices_interleaved.data() +

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.