<h3>General</h3>
<ol>
+<li> New: Functions like FEValues::get_function_values have long been
+able to extract values from pretty much any vector kind given to it (e.g.
+of kind Vector, BlockVector, PETScWrappers::Vector, etc). The list of
+allowed "vector" types now also includes IndexSet, which is interpreted
+as a vector of elements that are either zero or one, depending on whether
+an index is in the IndexSet or not.
+<br>
+As a consequence of this, the DataOut::add_data_vector functions now also
+work for such types of vectors, a use demonstrated in step-41.
+<br>
+(Wolfgang Bangerth, 2012/02/14)
+
<li> New: It has long been a nuisance that the deal.II vector classes
could only be accessed using <code>operator()</code> whereas the C++
<code>std::vector</code> class required <code>operator[]</code>. This
//---------------------------------------------------------------------------
// $Id$
//
-// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 by the deal.II authors
+// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
* associated with the DofHandler
* object with which this
* FEValues object was last
- * initialized.
+ * initialized. Alternatively,
+ * if the vector argument is of
+ * type IndexSet, then the function
+ * is represented as one that
+ * is either zero or one, depending
+ * on whether a DoF index is in
+ * the set or not.
*/
template <class InputVector, typename number>
void get_function_values (const InputVector& fe_function,
* associated with the DofHandler
* object with which this
* FEValues object was last
- * initialized.
+ * initialized. Alternatively,
+ * if the vector argument is of
+ * type IndexSet, then the function
+ * is represented as one that
+ * is either zero or one, depending
+ * on whether a DoF index is in
+ * the set or not.
*/
template <class InputVector>
void get_function_gradients (const InputVector &fe_function,
* associated with the DofHandler
* object with which this
* FEValues object was last
- * initialized.
+ * initialized. Alternatively,
+ * if the vector argument is of
+ * type IndexSet, then the function
+ * is represented as one that
+ * is either zero or one, depending
+ * on whether a DoF index is in
+ * the set or not.
*/
template <class InputVector>
void
* associated with the DofHandler
* object with which this
* FEValues object was last
- * initialized.
+ * initialized. Alternatively,
+ * if the vector argument is of
+ * type IndexSet, then the function
+ * is represented as one that
+ * is either zero or one, depending
+ * on whether a DoF index is in
+ * the set or not.
*/
template <class InputVector, typename number>
void
*
* If it is a vector holding DoF
* data, the names given shall be
- * one for each component, if the
- * finite element in use is
- * composed of several
- * subelements. If it is a
- * finite element composed of
- * only one subelement, then
- * there is another function
- * following which takes a single
- * name instead of a vector of
- * names.
+ * one for each component of the
+ * underlying finite element. If
+ * it is a finite element
+ * composed of only one
+ * subelement, then there is
+ * another function following
+ * which takes a single name
+ * instead of a vector of names.
*
* The data_component_interpretation
* argument contains information about
* class to see which characters
* are valid and which are not.
*
- * The actual type for the template
- * argument may be any vector type from
- * which FEValues can extract values
- * on a cell using the
- * FEValuesBase::get_function_values() function.
+ * @note The actual type for the
+ * vector argument may be any
+ * vector type from which
+ * FEValues can extract values on
+ * a cell using the
+ * FEValuesBase::get_function_values()
+ * function. In particular, this
+ * includes all of the usual
+ * vector types, but also
+ * IndexSet (see step-41 for a
+ * use of this).
*/
template <class VECTOR>
void add_data_vector (const VECTOR &data,
* type is also known implicitly and does
* not have to be given.
*
- * The actual type for the template
- * argument may be any vector type from
- * which FEValues can extract values
- * on a cell using the
- * FEValuesBase::get_function_values() function.
+ * @note The actual type for the
+ * vector argument may be any
+ * vector type from which
+ * FEValues can extract values on
+ * a cell using the
+ * FEValuesBase::get_function_values()
+ * function. In particular, this
+ * includes all of the usual
+ * vector types, but also
+ * IndexSet (see step-41 for a
+ * use of this).
*/
template <class VECTOR>
void add_data_vector (const VECTOR &data,
// $Id$
// Version: $Name$
//
-// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 by the deal.II authors
+// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
DEAL_II_NAMESPACE_OPEN
+namespace
+{
+ template <class VectorType>
+ double
+ get_vector_element (const VectorType &vector,
+ const unsigned int cell_number)
+ {
+ return vector[cell_number];
+ }
+
+
+ double
+ get_vector_element (const IndexSet &is,
+ const unsigned int cell_number)
+ {
+ return (is.is_element(cell_number) ? 1 : 0);
+ }
+
+
+
+ template <typename VectorType>
+ struct ValueType
+ {
+ typedef typename VectorType::value_type type;
+ };
+
+
+ template <>
+ struct ValueType<IndexSet>
+ {
+ typedef double type;
+ };
+}
+
+
namespace
{
template <int dim, int spacedim>
// get function values of dofs
// on this cell
- dealii::Vector<typename InputVector::value_type> dof_values (fe_values.dofs_per_cell);
+ dealii::Vector<typename ValueType<InputVector>::type> dof_values (fe_values.dofs_per_cell);
fe_values.present_cell->get_interpolated_dof_values(fe_function, dof_values);
std::fill (values.begin(), values.end(), value_type());
// get function values of dofs
// on this cell
- dealii::Vector<typename InputVector::value_type> dof_values (fe_values.dofs_per_cell);
+ dealii::Vector<typename ValueType<InputVector>::type> dof_values (fe_values.dofs_per_cell);
fe_values.present_cell->get_interpolated_dof_values(fe_function, dof_values);
std::fill (gradients.begin(), gradients.end(), gradient_type());
// get function values of dofs
// on this cell
- dealii::Vector<typename InputVector::value_type> dof_values (fe_values.dofs_per_cell);
+ dealii::Vector<typename ValueType<InputVector>::type> dof_values (fe_values.dofs_per_cell);
fe_values.present_cell->get_interpolated_dof_values(fe_function, dof_values);
std::fill (hessians.begin(), hessians.end(), hessian_type());
// get function values of dofs
// on this cell
- dealii::Vector<typename InputVector::value_type> dof_values (fe_values.dofs_per_cell);
+ dealii::Vector<typename ValueType<InputVector>::type> dof_values (fe_values.dofs_per_cell);
fe_values.present_cell->get_interpolated_dof_values(fe_function, dof_values);
std::fill (laplacians.begin(), laplacians.end(), value_type());
// get function values of dofs
// on this cell
- dealii::Vector<typename InputVector::value_type> dof_values (fe_values.dofs_per_cell);
+ dealii::Vector<typename ValueType<InputVector>::type> dof_values (fe_values.dofs_per_cell);
fe_values.present_cell->get_interpolated_dof_values(fe_function, dof_values);
std::fill (values.begin(), values.end(), value_type());
// get function values of dofs
// on this cell
- dealii::Vector<typename InputVector::value_type> dof_values (fe_values.dofs_per_cell);
+ dealii::Vector<typename ValueType<InputVector>::type> dof_values (fe_values.dofs_per_cell);
fe_values.present_cell->get_interpolated_dof_values(fe_function, dof_values);
std::fill (gradients.begin(), gradients.end(), gradient_type());
// get function values of dofs
// on this cell
- dealii::Vector<typename InputVector::value_type> dof_values (fe_values.dofs_per_cell);
+ dealii::Vector<typename ValueType<InputVector>::type> dof_values (fe_values.dofs_per_cell);
fe_values.present_cell->get_interpolated_dof_values(fe_function, dof_values);
std::fill (symmetric_gradients.begin(), symmetric_gradients.end(),
// get function values of dofs
// on this cell
- dealii::Vector<typename InputVector::value_type> dof_values (fe_values.dofs_per_cell);
+ dealii::Vector<typename ValueType<InputVector>::type> dof_values (fe_values.dofs_per_cell);
fe_values.present_cell->get_interpolated_dof_values(fe_function, dof_values);
std::fill (divergences.begin(), divergences.end(), divergence_type());
Assert (fe_function.size () == fe_values.present_cell->n_dofs_for_dof_handler (),
ExcDimensionMismatch (fe_function.size (), fe_values.present_cell->n_dofs_for_dof_handler ()));
// get function values of dofs on this cell
- dealii::Vector<typename InputVector::value_type> dof_values (fe_values.dofs_per_cell);
+ dealii::Vector<typename ValueType<InputVector>::type> dof_values (fe_values.dofs_per_cell);
fe_values.present_cell->get_interpolated_dof_values (fe_function, dof_values);
std::fill (curls.begin (), curls.end (), curl_type ());
// get function values of dofs
// on this cell
- dealii::Vector<typename InputVector::value_type> dof_values (fe_values.dofs_per_cell);
+ dealii::Vector<typename ValueType<InputVector>::type> dof_values (fe_values.dofs_per_cell);
fe_values.present_cell->get_interpolated_dof_values(fe_function, dof_values);
std::fill (hessians.begin(), hessians.end(), hessian_type());
// get function values of dofs
// on this cell
- dealii::Vector<typename InputVector::value_type> dof_values (fe_values.dofs_per_cell);
+ dealii::Vector<typename ValueType<InputVector>::type> dof_values (fe_values.dofs_per_cell);
fe_values.present_cell->get_interpolated_dof_values(fe_function, dof_values);
std::fill (laplacians.begin(), laplacians.end(), value_type());
// get function values of dofs
// on this cell
- dealii::Vector<typename InputVector::value_type > dof_values(fe_values.dofs_per_cell);
+ dealii::Vector<typename ValueType<InputVector>::type > dof_values(fe_values.dofs_per_cell);
fe_values.present_cell->get_interpolated_dof_values(fe_function, dof_values);
std::fill(values.begin(), values.end(), value_type());
// get function values of dofs
// on this cell
- dealii::Vector<typename InputVector::value_type > dof_values(fe_values.dofs_per_cell);
+ dealii::Vector<typename ValueType<InputVector>::type > dof_values(fe_values.dofs_per_cell);
fe_values.present_cell->get_interpolated_dof_values(fe_function, dof_values);
std::fill(divergences.begin(), divergences.end(), divergence_type());
n_dofs_for_dof_handler () const = 0;
#include "fe_values.decl.1.inst"
+
+ /// Call
+ /// @p get_interpolated_dof_values
+ /// of the iterator with the
+ /// given arguments.
+ virtual
+ void
+ get_interpolated_dof_values (const IndexSet &in,
+ Vector<double> &out) const = 0;
};
#include "fe_values.decl.2.inst"
+ /// Call
+ /// @p get_interpolated_dof_values
+ /// of the iterator with the
+ /// given arguments.
+ virtual
+ void
+ get_interpolated_dof_values (const IndexSet &in,
+ Vector<double> &out) const;
+
private:
/**
* Copy of the iterator which
#include "fe_values.decl.2.inst"
+ /// Call
+ /// @p get_interpolated_dof_values
+ /// of the iterator with the
+ /// given arguments.
+ virtual
+ void
+ get_interpolated_dof_values (const IndexSet &in,
+ Vector<double> &out) const;
+
private:
/**
* Copy of the iterator which
#include "fe_values.impl.1.inst"
+template <int dim, int spacedim>
+template <typename CI>
+void
+FEValuesBase<dim,spacedim>::CellIterator<CI>::
+get_interpolated_dof_values (const IndexSet &in,
+ Vector<double> &out) const
+{
+ Assert (cell->has_children() == false, ExcNotImplemented());
+
+ std::vector<unsigned int> dof_indices (cell->get_fe().dofs_per_cell);
+ cell->get_dof_indices (dof_indices);
+
+ for (unsigned int i=0; i<cell->get_fe().dofs_per_cell; ++i)
+ out[i] = (in.is_element (dof_indices[i]) ? 1 : 0);
+}
+
+
/* ---------------- FEValuesBase<dim,spacedim>::TriaCellIterator --------- */
template <int dim, int spacedim>
#include "fe_values.impl.2.inst"
+template <int dim, int spacedim>
+void
+FEValuesBase<dim,spacedim>::TriaCellIterator::
+get_interpolated_dof_values (const IndexSet &,
+ Vector<double> &) const
+{
+ Assert (false, ExcMessage (message_string));
+}
+
+
/* --------------------- FEValuesData ----------------- */
// get function values of dofs
// on this cell
- Vector<typename InputVector::value_type> dof_values (dofs_per_cell);
+ Vector<typename ValueType<InputVector>::type> dof_values (dofs_per_cell);
present_cell->get_interpolated_dof_values(fe_function, dof_values);
// initialize with zero
// innermost loop)
for (unsigned int shape_func=0; shape_func<dofs_per_cell; ++shape_func)
{
- const double value = fe_function(indices[shape_func]);
+ const double value = get_vector_element (fe_function, indices[shape_func]);
if (value == 0.)
continue;
// get function values of dofs
// on this cell
- Vector<typename InputVector::value_type> dof_values (dofs_per_cell);
+ Vector<typename ValueType<InputVector>::type> dof_values (dofs_per_cell);
present_cell->get_interpolated_dof_values(fe_function, dof_values);
// initialize with zero
for (unsigned int mc = 0; mc < component_multiple; ++mc)
for (unsigned int shape_func=0; shape_func<dofs_per_cell; ++shape_func)
{
- const double value = fe_function(indices[shape_func+mc*dofs_per_cell]);
+ const double value = get_vector_element (fe_function, indices[shape_func+mc*dofs_per_cell]);
if (value == 0.)
continue;
for (unsigned int mc = 0; mc < component_multiple; ++mc)
for (unsigned int shape_func=0; shape_func<dofs_per_cell; ++shape_func)
{
- const double value = fe_function(indices[shape_func+mc*dofs_per_cell]);
+ const double value = get_vector_element (fe_function, indices[shape_func+mc*dofs_per_cell]);
if (value == 0.)
continue;
// get function values of dofs
// on this cell
- Vector<typename InputVector::value_type> dof_values (dofs_per_cell);
+ Vector<typename ValueType<InputVector>::type> dof_values (dofs_per_cell);
present_cell->get_interpolated_dof_values(fe_function, dof_values);
// initialize with zero
// in the innermost loop)
for (unsigned int shape_func=0; shape_func<dofs_per_cell; ++shape_func)
{
- const double value = fe_function(indices[shape_func]);
+ const double value = get_vector_element (fe_function, indices[shape_func]);
if (value == 0.)
continue;
// get function values of dofs
// on this cell
- Vector<typename InputVector::value_type> dof_values (dofs_per_cell);
+ Vector<typename ValueType<InputVector>::type> dof_values (dofs_per_cell);
present_cell->get_interpolated_dof_values(fe_function, dof_values);
// initialize with zero
for (unsigned int mc = 0; mc < component_multiple; ++mc)
for (unsigned int shape_func=0; shape_func<dofs_per_cell; ++shape_func)
{
- const double value = fe_function(indices[shape_func+mc*dofs_per_cell]);
+ const double value = get_vector_element (fe_function, indices[shape_func+mc*dofs_per_cell]);
if (value == 0.)
continue;
// get function values of dofs
// on this cell
- Vector<typename InputVector::value_type> dof_values (dofs_per_cell);
+ Vector<typename ValueType<InputVector>::type> dof_values (dofs_per_cell);
present_cell->get_interpolated_dof_values(fe_function, dof_values);
// initialize with zero
// functions
for (unsigned int shape_func=0; shape_func<dofs_per_cell; ++shape_func)
{
- const double value = fe_function(indices[shape_func]);
+ const double value = get_vector_element (fe_function, indices[shape_func]);
if (value == 0.)
continue;
// get function values of dofs
// on this cell
- Vector<typename InputVector::value_type> dof_values (dofs_per_cell);
+ Vector<typename ValueType<InputVector>::type> dof_values (dofs_per_cell);
present_cell->get_interpolated_dof_values(fe_function, dof_values);
// initialize with zero
for (unsigned int mc = 0; mc < component_multiple; ++mc)
for (unsigned int shape_func=0; shape_func<dofs_per_cell; ++shape_func)
{
- const double value = fe_function(indices[shape_func+mc*dofs_per_cell]);
+ const double value = get_vector_element (fe_function, indices[shape_func+mc*dofs_per_cell]);
if (value == 0.)
continue;
// get function values of dofs
// on this cell
- Vector<typename InputVector::value_type> dof_values (dofs_per_cell);
+ Vector<typename ValueType<InputVector>::type> dof_values (dofs_per_cell);
present_cell->get_interpolated_dof_values(fe_function, dof_values);
// initialize with zero
// the hessians and get their trace
for (unsigned int shape_func=0; shape_func<dofs_per_cell; ++shape_func)
{
- const double value = fe_function(indices[shape_func]);
+ const double value = get_vector_element (fe_function, indices[shape_func]);
if (value == 0.)
continue;
// get function values of dofs
// on this cell
- Vector<typename InputVector::value_type> dof_values (dofs_per_cell);
+ Vector<typename ValueType<InputVector>::type> dof_values (dofs_per_cell);
present_cell->get_interpolated_dof_values(fe_function, dof_values);
// initialize with zero
for (unsigned int mc = 0; mc < component_multiple; ++mc)
for (unsigned int shape_func=0; shape_func<dofs_per_cell; ++shape_func)
{
- const double value = fe_function(indices[shape_func+mc*dofs_per_cell]);
+ const double value = get_vector_element (fe_function, indices[shape_func+mc*dofs_per_cell]);
if (value == 0.)
continue;
for (unsigned int mc = 0; mc < component_multiple; ++mc)
for (unsigned int shape_func=0; shape_func<dofs_per_cell; ++shape_func)
{
- const double value = fe_function(indices[shape_func+mc*dofs_per_cell]);
+ const double value = get_vector_element (fe_function, indices[shape_func+mc*dofs_per_cell]);
if (value == 0.)
continue;
// $Id$
// Version: $Name$
//
-// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 by the deal.II authors
+// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
}
+
+// instantiations for VEC=IndexSet
+
+for (deal_II_dimension : DIMENSIONS)
+ {
+ template
+ void FEValuesViews::Scalar<deal_II_dimension>::get_function_values<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<double>&) const;
+ template
+ void FEValuesViews::Scalar<deal_II_dimension>::get_function_gradients<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<Tensor<1,deal_II_dimension> >&) const;
+ template
+ void FEValuesViews::Scalar<deal_II_dimension>::get_function_hessians<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<Tensor<2,deal_II_dimension> >&) const;
+ template
+ void FEValuesViews::Scalar<deal_II_dimension>::get_function_laplacians<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<double>&) const;
+
+ template
+ void FEValuesViews::Vector<deal_II_dimension>::get_function_values<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<Tensor<1,deal_II_dimension> >&) const;
+ template
+ void FEValuesViews::Vector<deal_II_dimension>::get_function_gradients<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<Tensor<2,deal_II_dimension> >&) const;
+ template
+ void FEValuesViews::Vector<deal_II_dimension>::get_function_symmetric_gradients<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<dealii::SymmetricTensor<2,deal_II_dimension> >&) const;
+ template
+ void FEValuesViews::Vector<deal_II_dimension>::get_function_curls<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<curl_type>&) const;
+ template
+ void FEValuesViews::Vector<deal_II_dimension>::get_function_divergences<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<double>&) const;
+ template
+ void FEValuesViews::Vector<deal_II_dimension>::get_function_hessians<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<Tensor<3,deal_II_dimension> >&) const;
+ template
+ void FEValuesViews::Vector<deal_II_dimension>::get_function_laplacians<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<Tensor<1,deal_II_dimension> >&) const;
+
+ template
+ void FEValuesViews::SymmetricTensor<2,deal_II_dimension>::get_function_values<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<dealii::SymmetricTensor<2,deal_II_dimension> >&) const;
+ template
+ void FEValuesViews::SymmetricTensor<2,deal_II_dimension>::get_function_divergences<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<Tensor<1,deal_II_dimension> >&) const;
+
+
+#if deal_II_dimension != 3
+ template
+ void FEValuesViews::Scalar<deal_II_dimension, deal_II_dimension+1>
+ ::get_function_values<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<value_type>&) const;
+ template
+ void FEValuesViews::Scalar<deal_II_dimension, deal_II_dimension+1>
+ ::get_function_gradients<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<Tensor<1,deal_II_dimension+1> >&) const;
+ template
+ void FEValuesViews::Scalar<deal_II_dimension, deal_II_dimension+1>
+ ::get_function_hessians<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<Tensor<2,deal_II_dimension+1> >&) const;
+ template
+ void FEValuesViews::Scalar<deal_II_dimension, deal_II_dimension+1>
+ ::get_function_laplacians<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<double>&) const;
+
+ template
+ void FEValuesViews::Vector<deal_II_dimension, deal_II_dimension+1>
+ ::get_function_values<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<Tensor<1,deal_II_dimension+1> >&) const;
+ template
+ void FEValuesViews::Vector<deal_II_dimension, deal_II_dimension+1>
+ ::get_function_gradients<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<Tensor<2,deal_II_dimension+1> >&) const;
+ template
+ void FEValuesViews::Vector<deal_II_dimension, deal_II_dimension+1>
+ ::get_function_symmetric_gradients<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<dealii::SymmetricTensor<2,deal_II_dimension+1> >&) const;
+ template
+ void FEValuesViews::Vector<deal_II_dimension, deal_II_dimension+1>
+ ::get_function_divergences<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<double>&) const;
+ template
+ void FEValuesViews::Vector<deal_II_dimension, deal_II_dimension+1>
+ ::get_function_hessians<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<Tensor<3,deal_II_dimension+1> >&) const;
+ template
+ void FEValuesViews::Vector<deal_II_dimension, deal_II_dimension+1>
+ ::get_function_laplacians<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<Tensor<1,deal_II_dimension+1> >&) const;
+
+ template
+ void FEValuesViews::SymmetricTensor<2, deal_II_dimension, deal_II_dimension+1>
+ ::get_function_values<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<dealii::SymmetricTensor<2,deal_II_dimension+1> >&) const;
+ template
+ void FEValuesViews::SymmetricTensor<2, deal_II_dimension, deal_II_dimension+1>
+ ::get_function_divergences<dealii::IndexSet>
+ (const dealii::IndexSet&, std::vector<Tensor<1,deal_II_dimension+1> >&) const;
+
+#endif
+
+ }
+
+
+
+// Instantiations of functions in FEValuesBase and IndexSet=IndexSet
+
+for (deal_II_dimension : DIMENSIONS)
+ {
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_values<IndexSet>
+ (const IndexSet&, std::vector<double>&) const;
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_values<IndexSet>
+ (const IndexSet&, std::vector<float>&) const;
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_values<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&, std::vector<double>&) const;
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_values<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&, std::vector<float>&) const;
+
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_values<IndexSet>
+ (const IndexSet&, std::vector<Vector<double> > &) const;
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_values<IndexSet>
+ (const IndexSet&, std::vector<Vector<float> > &) const;
+
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_values<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ std::vector<Vector<double> > &) const;
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_values<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ std::vector<Vector<float> > &) const;
+
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_values<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ VectorSlice<std::vector<std::vector<double> > >, bool) const;
+// template
+// void FEValuesBase<deal_II_dimension>::get_function_values<IndexSet>
+// (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+// VectorSlice<std::vector<std::vector<float> > >, bool) const;
+
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_gradients<IndexSet>
+ (const IndexSet&, std::vector<Tensor<1,deal_II_dimension> > &) const;
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_gradients<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ std::vector<Tensor<1,deal_II_dimension> > &) const;
+
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_gradients<IndexSet>
+ (const IndexSet&, std::vector<std::vector<Tensor<1,deal_II_dimension> > > &) const;
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_gradients<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ VectorSlice<std::vector<std::vector<Tensor<1,deal_II_dimension> > > >, bool) const;
+
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_hessians<IndexSet>
+ (const IndexSet&, std::vector<Tensor<2,deal_II_dimension> > &) const;
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_hessians<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ std::vector<Tensor<2,deal_II_dimension> > &) const;
+
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_hessians<IndexSet>
+ (const IndexSet&, std::vector<std::vector<Tensor<2,deal_II_dimension> > > &, bool) const;
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_hessians<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ VectorSlice<std::vector<std::vector<Tensor<2,deal_II_dimension> > > >, bool) const;
+
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_laplacians<IndexSet>
+ (const IndexSet&, std::vector<double>&) const;
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_laplacians<IndexSet>
+ (const IndexSet&, std::vector<float>&) const;
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_laplacians<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&, std::vector<double>&) const;
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_laplacians<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&, std::vector<float>&) const;
+
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_laplacians<IndexSet>
+ (const IndexSet&, std::vector<Vector<double> > &) const;
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_laplacians<IndexSet>
+ (const IndexSet&, std::vector<Vector<float> > &) const;
+
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_laplacians<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ std::vector<Vector<double> > &) const;
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_laplacians<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ std::vector<Vector<float> > &) const;
+
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_laplacians<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ std::vector<std::vector<double> > &, bool) const;
+ template
+ void FEValuesBase<deal_II_dimension>::get_function_laplacians<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ std::vector<std::vector<float> > &, bool) const;
+
+
+#if deal_II_dimension != 3
+
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<IndexSet>
+ (const IndexSet&, std::vector<double>&) const;
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<IndexSet>
+ (const IndexSet&, std::vector<float>&) const;
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&, std::vector<double>&) const;
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&, std::vector<float>&) const;
+
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<IndexSet>
+ (const IndexSet&, std::vector<Vector<double> > &) const;
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<IndexSet>
+ (const IndexSet&, std::vector<Vector<float> > &) const;
+
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ std::vector<Vector<double> > &) const;
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ std::vector<Vector<float> > &) const;
+
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ VectorSlice<std::vector<std::vector<double> > >, bool) const;
+// template
+// void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<IndexSet>
+// (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+// VectorSlice<std::vector<std::vector<float> > >, bool) const;
+
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_gradients<IndexSet>
+ (const IndexSet&, std::vector<Tensor<1,deal_II_dimension+1> > &) const;
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_gradients<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ std::vector<Tensor<1,deal_II_dimension+1> > &) const;
+
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_gradients<IndexSet>
+ (const IndexSet&, std::vector<std::vector<Tensor<1,deal_II_dimension+1> > > &) const;
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_gradients<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ VectorSlice<std::vector<std::vector<Tensor<1,deal_II_dimension+1> > > >, bool) const;
+
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_hessians<IndexSet>
+ (const IndexSet&, std::vector<Tensor<2,deal_II_dimension+1> > &) const;
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_hessians<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ std::vector<Tensor<2,deal_II_dimension+1> > &) const;
+
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_hessians<IndexSet>
+ (const IndexSet&, std::vector<std::vector<Tensor<2,deal_II_dimension+1> > > &, bool) const;
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_hessians<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ VectorSlice<std::vector<std::vector<Tensor<2,deal_II_dimension+1> > > >, bool) const;
+
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<IndexSet>
+ (const IndexSet&, std::vector<double>&) const;
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<IndexSet>
+ (const IndexSet&, std::vector<float>&) const;
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&, std::vector<double>&) const;
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&, std::vector<float>&) const;
+
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<IndexSet>
+ (const IndexSet&, std::vector<Vector<double> > &) const;
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<IndexSet>
+ (const IndexSet&, std::vector<Vector<float> > &) const;
+
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ std::vector<Vector<double> > &) const;
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ std::vector<Vector<float> > &) const;
+
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ std::vector<std::vector<double> > &, bool) const;
+ template
+ void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<IndexSet>
+ (const IndexSet&, const VectorSlice<const std::vector<unsigned int> >&,
+ std::vector<std::vector<float> > &, bool) const;
+
+
+#endif
+
+ }
{
namespace DataOut
{
+ template <class DH>
+ DataEntryBase<DH>::DataEntryBase (const std::vector<std::string> &names_in,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &data_component_interpretation)
+ :
+ names(names_in),
+ data_component_interpretation (data_component_interpretation),
+ postprocessor(0, typeid(*this).name()),
+ n_output_variables(names.size())
+ {
+ Assert (names.size() == data_component_interpretation.size(),
+ ExcDimensionMismatch(data_component_interpretation.size(),
+ names.size()));
+
+ // check that the names use only allowed
+ // characters
+ // check names for invalid characters
+ for (unsigned int i=0; i<names.size(); ++i)
+ Assert (names[i].find_first_not_of("abcdefghijklmnopqrstuvwxyz"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "0123456789_<>()") == std::string::npos,
+ typename dealii::DataOut<DH::dimension>::
+ ExcInvalidCharacter (names[i],
+ names[i].find_first_not_of("abcdefghijklmnopqrstuvwxyz"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "0123456789_<>()")));
+ }
+
+
+
+ template <class DH>
+ DataEntryBase<DH>::DataEntryBase (const DataPostprocessor<DH::space_dimension> *data_postprocessor)
+ :
+ names(data_postprocessor->get_names()),
+ data_component_interpretation (data_postprocessor->get_data_component_interpretation()),
+ postprocessor(data_postprocessor, typeid(*this).name()),
+ n_output_variables(names.size())
+ {
+ Assert (data_postprocessor->get_names().size()
+ ==
+ data_postprocessor->get_data_component_interpretation().size(),
+ ExcDimensionMismatch (data_postprocessor->get_names().size(),
+ data_postprocessor->get_data_component_interpretation().size()));
+
+ // check that the names use only allowed
+ // characters
+ for (unsigned int i=0; i<names.size(); ++i)
+ Assert (names[i].find_first_not_of("abcdefghijklmnopqrstuvwxyz"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "0123456789_<>()") == std::string::npos,
+ typename dealii::DataOut<DH::dimension>::
+ ExcInvalidCharacter (names[i],
+ names[i].find_first_not_of("abcdefghijklmnopqrstuvwxyz"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "0123456789_<>()")));
+ }
+
+
+
+ template <class DH>
+ DataEntryBase<DH>::~DataEntryBase ()
+ {}
+
+
+
/**
* Class that stores a pointer to a
* vector of type equal to the template
- template <class DH>
- DataEntryBase<DH>::DataEntryBase (const std::vector<std::string> &names_in,
- const std::vector<DataComponentInterpretation::DataComponentInterpretation> &data_component_interpretation)
- :
- names(names_in),
- data_component_interpretation (data_component_interpretation),
- postprocessor(0, typeid(*this).name()),
- n_output_variables(names.size())
- {
- Assert (names.size() == data_component_interpretation.size(),
- ExcDimensionMismatch(data_component_interpretation.size(),
- names.size()));
-
- // check that the names use only allowed
- // characters
- // check names for invalid characters
- for (unsigned int i=0; i<names.size(); ++i)
- Assert (names[i].find_first_not_of("abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "0123456789_<>()") == std::string::npos,
- typename dealii::DataOut<DH::dimension>::
- ExcInvalidCharacter (names[i],
- names[i].find_first_not_of("abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "0123456789_<>()")));
- }
-
-
-
- template <class DH>
- DataEntryBase<DH>::DataEntryBase (const DataPostprocessor<DH::space_dimension> *data_postprocessor)
- :
- names(data_postprocessor->get_names()),
- data_component_interpretation (data_postprocessor->get_data_component_interpretation()),
- postprocessor(data_postprocessor, typeid(*this).name()),
- n_output_variables(names.size())
- {
- Assert (data_postprocessor->get_names().size()
- ==
- data_postprocessor->get_data_component_interpretation().size(),
- ExcDimensionMismatch (data_postprocessor->get_names().size(),
- data_postprocessor->get_data_component_interpretation().size()));
-
- // check that the names use only allowed
- // characters
- for (unsigned int i=0; i<names.size(); ++i)
- Assert (names[i].find_first_not_of("abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "0123456789_<>()") == std::string::npos,
- typename dealii::DataOut<DH::dimension>::
- ExcInvalidCharacter (names[i],
- names[i].find_first_not_of("abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "0123456789_<>()")));
- }
-
-
-
- template <class DH>
- DataEntryBase<DH>::~DataEntryBase ()
- {}
-
-
-
template <class DH, class VectorType>
DataEntry<DH,VectorType>::
DataEntry (const VectorType *data,
{}
+ namespace
+ {
+ template <class VectorType>
+ double
+ get_vector_element (const VectorType &vector,
+ const unsigned int cell_number)
+ {
+ return vector[cell_number];
+ }
+
+
+ double
+ get_vector_element (const IndexSet &is,
+ const unsigned int cell_number)
+ {
+ return (is.is_element(cell_number) ? 1 : 0);
+ }
+ }
+
+
template <class DH, class VectorType>
double
DataEntry<DH,VectorType>::
get_cell_data_value (const unsigned int cell_number) const
{
- return (*vector)(cell_number);
+ return get_vector_element(*vector, cell_number);
}
// $Id$
// Version: $Name$
//
-// Copyright (C) 2010 by the deal.II authors
+// Copyright (C) 2010, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
{
// codim=0
- template void
+ template void
DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension,deal_II_dimension>::
- add_data_vector<VEC> (const VEC &,
- const std::string &,
- const DataVectorType,
- const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
+ add_data_vector<VEC> (const VEC &,
+ const std::string &,
+ const DataVectorType,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
- template void
+ template void
DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension,deal_II_dimension>::
- add_data_vector<VEC> (const VEC &,
- const std::vector<std::string> &,
- const DataVectorType,
- const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
+ add_data_vector<VEC> (const VEC &,
+ const std::vector<std::string> &,
+ const DataVectorType,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
- template void
+ template void
DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension,deal_II_dimension>::
- add_data_vector<VEC> (const VEC &,
+ add_data_vector<VEC> (const VEC &,
const DataPostprocessor<DH<deal_II_dimension,deal_II_dimension>::space_dimension> &);
// stuff needed for face data
- template void
+ template void
DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension-1,deal_II_dimension>::
- add_data_vector<VEC> (const VEC &,
- const std::string &,
- const DataVectorType,
- const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
+ add_data_vector<VEC> (const VEC &,
+ const std::string &,
+ const DataVectorType,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
- template void
+ template void
DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension-1,deal_II_dimension>::
- add_data_vector<VEC> (const VEC &,
- const std::vector<std::string> &,
- const DataVectorType,
- const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
+ add_data_vector<VEC> (const VEC &,
+ const std::vector<std::string> &,
+ const DataVectorType,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
- template void
+ template void
DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension-1,deal_II_dimension>::
- add_data_vector<VEC> (const VEC &,
+ add_data_vector<VEC> (const VEC &,
const DataPostprocessor<DH<deal_II_dimension,deal_II_dimension>::space_dimension> &);
// things for DataOutRotation
- template void
+ template void
DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension+1,deal_II_dimension+1>::
- add_data_vector<VEC> (const VEC &,
- const std::string &,
- const DataVectorType,
- const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
+ add_data_vector<VEC> (const VEC &,
+ const std::string &,
+ const DataVectorType,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
- template void
+ template void
DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension+1,deal_II_dimension+1>::
- add_data_vector<VEC> (const VEC &,
- const std::vector<std::string> &,
- const DataVectorType,
- const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
+ add_data_vector<VEC> (const VEC &,
+ const std::vector<std::string> &,
+ const DataVectorType,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
- template void
+ template void
DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension+1,deal_II_dimension+1>::
- add_data_vector<VEC> (const VEC &,
+ add_data_vector<VEC> (const VEC &,
const DataPostprocessor<DH<deal_II_dimension,deal_II_dimension>::space_dimension> &);
// codim 1
#if deal_II_dimension < 3
- template void
+ template void
DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension+1>,deal_II_dimension,deal_II_dimension+1>::
- add_data_vector<VEC> (const VEC &,
- const std::string &,
- const DataVectorType,
- const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
+ add_data_vector<VEC> (const VEC &,
+ const std::string &,
+ const DataVectorType,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
- template void
+ template void
DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension+1>,deal_II_dimension,deal_II_dimension+1>::
- add_data_vector<VEC> (const VEC &,
- const std::vector<std::string> &,
- const DataVectorType,
- const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
+ add_data_vector<VEC> (const VEC &,
+ const std::vector<std::string> &,
+ const DataVectorType,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
- template void
+ template void
DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension+1>,deal_II_dimension,deal_II_dimension+1>::
- add_data_vector<VEC> (const VEC &,
+ add_data_vector<VEC> (const VEC &,
const DataPostprocessor<DH<deal_II_dimension,deal_II_dimension+1>::space_dimension> &);
#endif
}
+
+for (DH : DOFHANDLER_TEMPLATES; deal_II_dimension : DIMENSIONS)
+{
+// codim=0
+
+ template void
+ DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension,deal_II_dimension>::
+ add_data_vector<IndexSet> (const IndexSet &,
+ const std::string &,
+ const DataVectorType,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
+
+ template void
+ DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension,deal_II_dimension>::
+ add_data_vector<IndexSet> (const IndexSet &,
+ const std::vector<std::string> &,
+ const DataVectorType,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
+
+ template void
+ DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension,deal_II_dimension>::
+ add_data_vector<IndexSet> (const IndexSet &,
+ const DataPostprocessor<DH<deal_II_dimension,deal_II_dimension>::space_dimension> &);
+
+// stuff needed for face data
+
+ template void
+ DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension-1,deal_II_dimension>::
+ add_data_vector<IndexSet> (const IndexSet &,
+ const std::string &,
+ const DataVectorType,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
+
+ template void
+ DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension-1,deal_II_dimension>::
+ add_data_vector<IndexSet> (const IndexSet &,
+ const std::vector<std::string> &,
+ const DataVectorType,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
+
+ template void
+ DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension-1,deal_II_dimension>::
+ add_data_vector<IndexSet> (const IndexSet &,
+ const DataPostprocessor<DH<deal_II_dimension,deal_II_dimension>::space_dimension> &);
+
+// things for DataOutRotation
+
+ template void
+ DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension+1,deal_II_dimension+1>::
+ add_data_vector<IndexSet> (const IndexSet &,
+ const std::string &,
+ const DataVectorType,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
+
+ template void
+ DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension+1,deal_II_dimension+1>::
+ add_data_vector<IndexSet> (const IndexSet &,
+ const std::vector<std::string> &,
+ const DataVectorType,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
+
+ template void
+ DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension>,deal_II_dimension+1,deal_II_dimension+1>::
+ add_data_vector<IndexSet> (const IndexSet &,
+ const DataPostprocessor<DH<deal_II_dimension,deal_II_dimension>::space_dimension> &);
+
+// codim 1
+
+ #if deal_II_dimension < 3
+ template void
+ DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension+1>,deal_II_dimension,deal_II_dimension+1>::
+ add_data_vector<IndexSet> (const IndexSet &,
+ const std::string &,
+ const DataVectorType,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
+
+ template void
+ DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension+1>,deal_II_dimension,deal_II_dimension+1>::
+ add_data_vector<IndexSet> (const IndexSet &,
+ const std::vector<std::string> &,
+ const DataVectorType,
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation> &);
+
+ template void
+ DataOut_DoFData<DH<deal_II_dimension,deal_II_dimension+1>,deal_II_dimension,deal_II_dimension+1>::
+ add_data_vector<IndexSet> (const IndexSet &,
+ const DataPostprocessor<DH<deal_II_dimension,deal_II_dimension+1>::space_dimension> &);
+ #endif
+
+}
+
+
+
for (DH : DOFHANDLER_TEMPLATES; deal_II_dimension : DIMENSIONS)
{
template class DataOut_DoFData<DH<deal_II_dimension>,deal_II_dimension>;