]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Added Tensor::get_function_divergences_from_local_dof_values
authorJean-Paul Pelteret <jppelteret@gmail.com>
Thu, 10 Aug 2017 23:03:20 +0000 (17:03 -0600)
committerJean-Paul Pelteret <jppelteret@gmail.com>
Sat, 12 Aug 2017 17:22:07 +0000 (11:22 -0600)
include/deal.II/fe/fe_values.h
source/fe/fe_values.cc
source/fe/fe_values.inst.in

index 1e4fd531191de9d3cb49936fe3e7007241c5641d..67d195f8ff52be53edcb223637b22c1ad7af884a 100644 (file)
@@ -1592,6 +1592,14 @@ namespace FEValuesViews
     void get_function_divergences (const InputVector &fe_function,
                                    std::vector<typename ProductType<divergence_type,typename InputVector::value_type>::type> &divergences) const;
 
+    /**
+     * @copydoc FEValuesViews::Tensor<2,dim,spacedim>::get_function_values_from_local_dof_values()
+     */
+    template <class InputVector>
+    void get_function_divergences_from_local_dof_values (const InputVector &dof_values,
+                                                         std::vector<typename OutputType<typename InputVector::value_type>::divergence_type> &values) const;
+
+
   private:
     /**
      * A pointer to the FEValuesBase object we operate on.
index 834f494f210e799642e590d77cec5ca3947e36e3..aa1cddfa30b0e848213048bc48b999a9d3b9d9b3 100644 (file)
@@ -1211,7 +1211,7 @@ namespace FEValuesViews
     do_function_divergences (const ArrayView<Number> &dof_values,
                              const Table<2,dealii::Tensor<1,spacedim> > &shape_gradients,
                              const std::vector<typename Tensor<2,dim,spacedim>::ShapeFunctionData> &shape_function_data,
-                             std::vector<typename ProductType<Number,dealii::Tensor<1,spacedim> >::type> &divergences)
+                             std::vector<typename Tensor<2,dim,spacedim>::template OutputType<Number>::divergence_type> &divergences)
     {
       const unsigned int dofs_per_cell = dof_values.size();
       const unsigned int n_quadrature_points = dofs_per_cell > 0 ?
@@ -1219,7 +1219,7 @@ namespace FEValuesViews
       AssertDimension (divergences.size(), n_quadrature_points);
 
       std::fill (divergences.begin(), divergences.end(),
-                 typename ProductType<Number,dealii::Tensor<1,spacedim> >::type());
+                 typename Tensor<2,dim,spacedim>::template OutputType<Number>::divergence_type());
 
       for (unsigned int shape_function=0;
            shape_function<dofs_per_cell; ++shape_function)
@@ -2001,6 +2001,26 @@ namespace FEValuesViews
     (make_array_view(dof_values.begin(), dof_values.end()),
      fe_values->finite_element_output.shape_gradients, shape_function_data, divergences);
   }
+
+
+
+  template <int dim, int spacedim>
+  template <class InputVector>
+  void
+  Tensor<2, dim, spacedim>::
+  get_function_divergences_from_local_dof_values (const InputVector &dof_values,
+                                                  std::vector<typename OutputType<typename InputVector::value_type>::divergence_type> &divergences) const
+  {
+    Assert(fe_values->update_flags & update_gradients,
+           (typename FEValuesBase<dim,spacedim>::ExcAccessToUninitializedField("update_gradients")));
+    Assert(fe_values->present_cell.get() != nullptr,
+           ExcMessage("FEValues object is not reinit'ed to any cell"));
+    AssertDimension (dof_values.size(), fe_values->dofs_per_cell);
+
+    internal::do_function_divergences<dim,spacedim>
+    (make_array_view(dof_values.begin(), dof_values.end()),
+     fe_values->finite_element_output.shape_gradients, shape_function_data, divergences);
+  }
 }
 
 
index f9a258895b8740157e562e9b1ae1823a372f0497..aa9f5a8e08b258efee16f45d02736d93e97c9715 100644 (file)
@@ -230,6 +230,11 @@ for (VEC : GENERAL_CONTAINER_TYPES;
     void FEValuesViews::Tensor<2,deal_II_dimension, deal_II_space_dimension>
     ::get_function_values_from_local_dof_values<VEC<Number>>
             (const VEC<Number>&, std::vector<typename OutputType<Number>::value_type>&) const;
+
+    template
+    void FEValuesViews::Tensor<2,deal_II_dimension, deal_II_space_dimension>
+    ::get_function_divergences_from_local_dof_values<VEC<Number>>
+            (const VEC<Number>&, std::vector<typename OutputType<Number>::divergence_type>&) const;
 #endif
 }
 

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.