]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Revert order of loops and if statements. 1902/head
authorWolfgang Bangerth <bangerth@math.tamu.edu>
Tue, 24 Nov 2015 00:08:58 +0000 (18:08 -0600)
committerWolfgang Bangerth <bangerth@math.tamu.edu>
Tue, 24 Nov 2015 01:09:44 +0000 (19:09 -0600)
This is in analogy to what was already done in #1821.

source/fe/fe_poly.cc

index 583c23a5fc671e7eb6a48d83a9577a5aa0d24ede..8af7c2b33083d424c6334181dd2f287f0f4c306c 100644 (file)
@@ -47,40 +47,42 @@ fill_fe_values (const Triangulation<1,2>::cell_iterator &,
   Assert (dynamic_cast<const InternalData *> (&fe_internal) != 0, ExcInternalError());
   const InternalData &fe_data = static_cast<const InternalData &> (fe_internal);
 
-  for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+  // transform gradients and higher derivatives. there is nothing to do
+  // for values since we already emplaced them into output_data when
+  // we were in get_data()
+  if (fe_data.update_each & update_gradients && cell_similarity != CellSimilarity::translation)
+    for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+      mapping.transform (fe_data.shape_gradients[k],
+                         mapping_covariant,
+                         mapping_internal,
+                         output_data.shape_gradients[k]);
+
+  if (fe_data.update_each & update_hessians && cell_similarity != CellSimilarity::translation)
     {
-      // transform gradients and higher derivatives. there is nothing to do
-      // for values since we already emplaced them into output_data when
-      // we were in get_data()
-      if (fe_data.update_each & update_gradients && cell_similarity != CellSimilarity::translation)
-        mapping.transform (fe_data.shape_gradients[k],
-                           mapping_covariant,
+      for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+        mapping.transform (fe_data.shape_hessians[k],
+                           mapping_covariant_gradient,
                            mapping_internal,
-                           output_data.shape_gradients[k]);
-
-      if (fe_data.update_each & update_hessians && cell_similarity != CellSimilarity::translation)
-        {
-          mapping.transform (fe_data.shape_hessians[k],
-                             mapping_covariant_gradient,
-                             mapping_internal,
-                             output_data.shape_hessians[k]);
-
-          for (unsigned int i=0; i<quadrature.size(); ++i)
-            for (unsigned int j=0; j<2; ++j)
-              output_data.shape_hessians[k][i] -=
-                mapping_data.jacobian_pushed_forward_grads[i][j]
-                * output_data.shape_gradients[k][i][j];
-        }
-
-      if (fe_data.update_each & update_3rd_derivatives && cell_similarity != CellSimilarity::translation)
-        {
-          mapping.transform (fe_data.shape_3rd_derivatives[k],
-                             mapping_covariant_hessian,
-                             mapping_internal,
-                             output_data.shape_3rd_derivatives[k]);
-
-          correct_third_derivatives(output_data, mapping_data, quadrature.size(), k);
-        }
+                           output_data.shape_hessians[k]);
+
+      for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+        for (unsigned int i=0; i<quadrature.size(); ++i)
+          for (unsigned int j=0; j<2; ++j)
+            output_data.shape_hessians[k][i] -=
+              mapping_data.jacobian_pushed_forward_grads[i][j]
+              * output_data.shape_gradients[k][i][j];
+    }
+
+  if (fe_data.update_each & update_3rd_derivatives && cell_similarity != CellSimilarity::translation)
+    {
+      for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+        mapping.transform (fe_data.shape_3rd_derivatives[k],
+                           mapping_covariant_hessian,
+                           mapping_internal,
+                           output_data.shape_3rd_derivatives[k]);
+
+      for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+        correct_third_derivatives(output_data, mapping_data, quadrature.size(), k);
     }
 }
 
@@ -104,40 +106,42 @@ fill_fe_values (const Triangulation<2,3>::cell_iterator &,
   Assert (dynamic_cast<const InternalData *> (&fe_internal) != 0, ExcInternalError());
   const InternalData &fe_data = static_cast<const InternalData &> (fe_internal);
 
-  for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+  // transform gradients and higher derivatives. there is nothing to do
+  // for values since we already emplaced them into output_data when
+  // we were in get_data()
+  if (fe_data.update_each & update_gradients && cell_similarity != CellSimilarity::translation)
+    for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+      mapping.transform (fe_data.shape_gradients[k],
+                         mapping_covariant,
+                         mapping_internal,
+                         output_data.shape_gradients[k]);
+
+  if (fe_data.update_each & update_hessians && cell_similarity != CellSimilarity::translation)
     {
-      // transform gradients and higher derivatives. there is nothing to do
-      // for values since we already emplaced them into output_data when
-      // we were in get_data()
-      if (fe_data.update_each & update_gradients && cell_similarity != CellSimilarity::translation)
-        mapping.transform (fe_data.shape_gradients[k],
-                           mapping_covariant,
+      for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+        mapping.transform (fe_data.shape_hessians[k],
+                           mapping_covariant_gradient,
                            mapping_internal,
-                           output_data.shape_gradients[k]);
-
-      if (fe_data.update_each & update_hessians && cell_similarity != CellSimilarity::translation)
-        {
-          mapping.transform (fe_data.shape_hessians[k],
-                             mapping_covariant_gradient,
-                             mapping_internal,
-                             output_data.shape_hessians[k]);
-
-          for (unsigned int i=0; i<quadrature.size(); ++i)
-            for (unsigned int j=0; j<3; ++j)
-              output_data.shape_hessians[k][i] -=
-                mapping_data.jacobian_pushed_forward_grads[i][j]
-                * output_data.shape_gradients[k][i][j];
-        }
-
-      if (fe_data.update_each & update_3rd_derivatives && cell_similarity != CellSimilarity::translation)
-        {
-          mapping.transform (fe_data.shape_3rd_derivatives[k],
-                             mapping_covariant_hessian,
-                             mapping_internal,
-                             output_data.shape_3rd_derivatives[k]);
-
-          correct_third_derivatives(output_data, mapping_data, quadrature.size(), k);
-        }
+                           output_data.shape_hessians[k]);
+
+      for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+        for (unsigned int i=0; i<quadrature.size(); ++i)
+          for (unsigned int j=0; j<3; ++j)
+            output_data.shape_hessians[k][i] -=
+              mapping_data.jacobian_pushed_forward_grads[i][j]
+              * output_data.shape_gradients[k][i][j];
+    }
+
+  if (fe_data.update_each & update_3rd_derivatives && cell_similarity != CellSimilarity::translation)
+    {
+      for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+        mapping.transform (fe_data.shape_3rd_derivatives[k],
+                           mapping_covariant_hessian,
+                           mapping_internal,
+                           output_data.shape_3rd_derivatives[k]);
+
+      for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+        correct_third_derivatives(output_data, mapping_data, quadrature.size(), k);
     }
 }
 
@@ -162,40 +166,42 @@ fill_fe_values (const Triangulation<1,2>::cell_iterator &,
   Assert (dynamic_cast<const InternalData *> (&fe_internal) != 0, ExcInternalError());
   const InternalData &fe_data = static_cast<const InternalData &> (fe_internal);
 
-  for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+  // transform gradients and higher derivatives. there is nothing to do
+  // for values since we already emplaced them into output_data when
+  // we were in get_data()
+  if (fe_data.update_each & update_gradients && cell_similarity != CellSimilarity::translation)
+    for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+      mapping.transform (fe_data.shape_gradients[k],
+                         mapping_covariant,
+                         mapping_internal,
+                         output_data.shape_gradients[k]);
+
+  if (fe_data.update_each & update_hessians && cell_similarity != CellSimilarity::translation)
     {
-      // transform gradients and higher derivatives. there is nothing to do
-      // for values since we already emplaced them into output_data when
-      // we were in get_data()
-      if (fe_data.update_each & update_gradients && cell_similarity != CellSimilarity::translation)
-        mapping.transform (fe_data.shape_gradients[k],
-                           mapping_covariant,
+      for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+        mapping.transform (fe_data.shape_hessians[k],
+                           mapping_covariant_gradient,
                            mapping_internal,
-                           output_data.shape_gradients[k]);
-
-      if (fe_data.update_each & update_hessians && cell_similarity != CellSimilarity::translation)
-        {
-          mapping.transform (fe_data.shape_hessians[k],
-                             mapping_covariant_gradient,
-                             mapping_internal,
-                             output_data.shape_hessians[k]);
-
-          for (unsigned int i=0; i<quadrature.size(); ++i)
-            for (unsigned int j=0; j<2; ++j)
-              output_data.shape_hessians[k][i] -=
-                mapping_data.jacobian_pushed_forward_grads[i][j]
-                * output_data.shape_gradients[k][i][j];
-        }
-
-      if (fe_data.update_each & update_3rd_derivatives && cell_similarity != CellSimilarity::translation)
-        {
-          mapping.transform (fe_data.shape_3rd_derivatives[k],
-                             mapping_covariant_hessian,
-                             mapping_internal,
-                             output_data.shape_3rd_derivatives[k]);
-
-          correct_third_derivatives(output_data, mapping_data, quadrature.size(), k);
-        }
+                           output_data.shape_hessians[k]);
+
+      for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+        for (unsigned int i=0; i<quadrature.size(); ++i)
+          for (unsigned int j=0; j<2; ++j)
+            output_data.shape_hessians[k][i] -=
+              mapping_data.jacobian_pushed_forward_grads[i][j]
+              * output_data.shape_gradients[k][i][j];
+    }
+
+  if (fe_data.update_each & update_3rd_derivatives && cell_similarity != CellSimilarity::translation)
+    {
+      for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+        mapping.transform (fe_data.shape_3rd_derivatives[k],
+                           mapping_covariant_hessian,
+                           mapping_internal,
+                           output_data.shape_3rd_derivatives[k]);
+
+      for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+        correct_third_derivatives(output_data, mapping_data, quadrature.size(), k);
     }
 }
 
@@ -215,40 +221,42 @@ fill_fe_values (const Triangulation<2,3>::cell_iterator &,
   Assert (dynamic_cast<const InternalData *> (&fe_internal) != 0, ExcInternalError());
   const InternalData &fe_data = static_cast<const InternalData &> (fe_internal);
 
-  for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+  // transform gradients and higher derivatives. there is nothing to do
+  // for values since we already emplaced them into output_data when
+  // we were in get_data()
+  if (fe_data.update_each & update_gradients && cell_similarity != CellSimilarity::translation)
+    for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+      mapping.transform (fe_data.shape_gradients[k],
+                         mapping_covariant,
+                         mapping_internal,
+                         output_data.shape_gradients[k]);
+
+  if (fe_data.update_each & update_hessians && cell_similarity != CellSimilarity::translation)
     {
-      // transform gradients and higher derivatives. there is nothing to do
-      // for values since we already emplaced them into output_data when
-      // we were in get_data()
-      if (fe_data.update_each & update_gradients && cell_similarity != CellSimilarity::translation)
-        mapping.transform (fe_data.shape_gradients[k],
-                           mapping_covariant,
+      for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+        mapping.transform (fe_data.shape_hessians[k],
+                           mapping_covariant_gradient,
                            mapping_internal,
-                           output_data.shape_gradients[k]);
-
-      if (fe_data.update_each & update_hessians && cell_similarity != CellSimilarity::translation)
-        {
-          mapping.transform (fe_data.shape_hessians[k],
-                             mapping_covariant_gradient,
-                             mapping_internal,
-                             output_data.shape_hessians[k]);
-
-          for (unsigned int i=0; i<quadrature.size(); ++i)
-            for (unsigned int j=0; j<3; ++j)
-              output_data.shape_hessians[k][i] -=
-                mapping_data.jacobian_pushed_forward_grads[i][j]
-                * output_data.shape_gradients[k][i][j];
-        }
-
-      if (fe_data.update_each & update_3rd_derivatives && cell_similarity != CellSimilarity::translation)
-        {
-          mapping.transform (fe_data.shape_3rd_derivatives[k],
-                             mapping_covariant_hessian,
-                             mapping_internal,
-                             output_data.shape_3rd_derivatives[k]);
-
-          correct_third_derivatives(output_data, mapping_data, quadrature.size(), k);
-        }
+                           output_data.shape_hessians[k]);
+
+      for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+        for (unsigned int i=0; i<quadrature.size(); ++i)
+          for (unsigned int j=0; j<3; ++j)
+            output_data.shape_hessians[k][i] -=
+              mapping_data.jacobian_pushed_forward_grads[i][j]
+              * output_data.shape_gradients[k][i][j];
+    }
+
+  if (fe_data.update_each & update_3rd_derivatives && cell_similarity != CellSimilarity::translation)
+    {
+      for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+        mapping.transform (fe_data.shape_3rd_derivatives[k],
+                           mapping_covariant_hessian,
+                           mapping_internal,
+                           output_data.shape_3rd_derivatives[k]);
+
+      for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+        correct_third_derivatives(output_data, mapping_data, quadrature.size(), k);
     }
 }
 

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.