]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Duplicate approach for FEFaceValues and FESubfaceValues
authorJonathan Robey <class4kayaker@gmail.com>
Wed, 31 Aug 2016 02:57:10 +0000 (19:57 -0700)
committerJonathan Robey <class4kayaker@gmail.com>
Wed, 14 Sep 2016 18:33:53 +0000 (11:33 -0700)
source/fe/fe_values.cc

index 7ddb230907ef9e89d9c2890b97587552fcd34fe6..5c5f0d82387b6faf0120640b684aa6ce6f4da24f 100644 (file)
@@ -3902,7 +3902,8 @@ FEFaceValues<dim,spacedim>::initialize (const UpdateFlags update_flags)
   const UpdateFlags flags = this->compute_update_flags (update_flags);
 
   // initialize the base classes
-  this->mapping_output.initialize(this->n_quadrature_points, flags);
+  if (flags & update_mapping)
+    this->mapping_output.initialize(this->n_quadrature_points, flags);
   this->finite_element_output.initialize(this->n_quadrature_points, *this->fe, flags);
 
   // then get objects into which the FE and the Mapping can store
@@ -3915,16 +3916,19 @@ FEFaceValues<dim,spacedim>::initialize (const UpdateFlags update_flags)
                                    this->quadrature,
                                    this->finite_element_output);
   Threads::Task<typename Mapping<dim,spacedim>::InternalDataBase *>
-  mapping_get_data = Threads::new_task (&Mapping<dim,spacedim>::get_face_data,
-                                        *this->mapping,
-                                        flags,
-                                        this->quadrature);
+  mapping_get_data;
+  if (flags & update_mapping)
+    mapping_get_data = Threads::new_task (&Mapping<dim,spacedim>::get_face_data,
+                                          *this->mapping,
+                                          flags,
+                                          this->quadrature);
 
   this->update_flags = flags;
 
   // then collect answers from the two task above
   this->fe_data.reset (fe_get_data.return_value());
-  this->mapping_data.reset (mapping_get_data.return_value());
+  if (flags & update_mapping)
+    this->mapping_data.reset (mapping_get_data.return_value());
 }
 
 
@@ -3993,11 +3997,14 @@ void FEFaceValues<dim,spacedim>::do_reinit (const unsigned int face_no)
   const typename Triangulation<dim,spacedim>::cell_iterator cell=*this->present_cell;
   this->present_face_index=cell->face_index(face_no);
 
-  this->get_mapping().fill_fe_face_values(*this->present_cell,
-                                          face_no,
-                                          this->quadrature,
-                                          *this->mapping_data,
-                                          this->mapping_output);
+  if (this->update_flags & update_mapping)
+    {
+      this->get_mapping().fill_fe_face_values(*this->present_cell,
+                                              face_no,
+                                              this->quadrature,
+                                              *this->mapping_data,
+                                              this->mapping_output);
+    }
 
   this->get_fe().fill_fe_face_values(*this->present_cell,
                                      face_no,
@@ -4061,7 +4068,8 @@ FESubfaceValues<dim,spacedim>::initialize (const UpdateFlags update_flags)
   const UpdateFlags flags = this->compute_update_flags (update_flags);
 
   // initialize the base classes
-  this->mapping_output.initialize(this->n_quadrature_points, flags);
+  if (flags & update_mapping)
+    this->mapping_output.initialize(this->n_quadrature_points, flags);
   this->finite_element_output.initialize(this->n_quadrature_points, *this->fe, flags);
 
   // then get objects into which the FE and the Mapping can store
@@ -4075,16 +4083,19 @@ FESubfaceValues<dim,spacedim>::initialize (const UpdateFlags update_flags)
                                    this->quadrature,
                                    this->finite_element_output);
   Threads::Task<typename Mapping<dim,spacedim>::InternalDataBase *>
-  mapping_get_data = Threads::new_task (&Mapping<dim,spacedim>::get_subface_data,
-                                        *this->mapping,
-                                        flags,
-                                        this->quadrature);
+  mapping_get_data;
+  if (flags & update_mapping)
+    mapping_get_data = Threads::new_task (&Mapping<dim,spacedim>::get_subface_data,
+                                          *this->mapping,
+                                          flags,
+                                          this->quadrature);
 
   this->update_flags = flags;
 
   // then collect answers from the two task above
   this->fe_data.reset (fe_get_data.return_value());
-  this->mapping_data.reset (mapping_get_data.return_value());
+  if (flags & update_mapping)
+    this->mapping_data.reset (mapping_get_data.return_value());
 }
 
 
@@ -4237,12 +4248,15 @@ void FESubfaceValues<dim,spacedim>::do_reinit (const unsigned int face_no,
     }
 
   // now ask the mapping and the finite element to do the actual work
-  this->get_mapping().fill_fe_subface_values(*this->present_cell,
-                                             face_no,
-                                             subface_no,
-                                             this->quadrature,
-                                             *this->mapping_data,
-                                             this->mapping_output);
+  if (this->update_flags & update_mapping)
+    {
+      this->get_mapping().fill_fe_subface_values(*this->present_cell,
+                                                 face_no,
+                                                 subface_no,
+                                                 this->quadrature,
+                                                 *this->mapping_data,
+                                                 this->mapping_output);
+    }
 
   this->get_fe().fill_fe_subface_values(*this->present_cell,
                                         face_no,

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.