#include <dofs/dof_constraints.h>
-#include <numerics/data_out.h>
+//#include <numerics/data_out.h>
#include <multigrid/multigrid.h>
#include <algorithm>
#include <fstream>
template <int dim>
void
-Multigrid<dim>::print_vector (const unsigned int level,
- const Vector<double>& v,
- const char* name) const
+Multigrid<dim>::print_vector (const unsigned int /*level*/,
+ const Vector<double>& /*v*/,
+ const char* /*name*/) const
{
- if (level!=maxlevel)
- return;
+// if (level!=maxlevel)
+// return;
- const DoFHandler<dim>* dof = mg_dof_handler;
+// const DoFHandler<dim>* dof = mg_dof_handler;
- Vector<double> out_vector(dof->n_dofs());
+// Vector<double> out_vector(dof->n_dofs());
- out_vector = -10000;
+// out_vector = -10000;
- const unsigned int dofs_per_cell = mg_dof_handler->get_fe().dofs_per_cell;
-
- std::vector<unsigned int> global_dof_indices (dofs_per_cell);
- std::vector<unsigned int> level_dof_indices (dofs_per_cell);
-
- typename DoFHandler<dim>::active_cell_iterator
- global_cell = dof->begin_active(level);
- typename MGDoFHandler<dim>::active_cell_iterator
- level_cell = mg_dof_handler->begin_active(level);
- const typename MGDoFHandler<dim>::cell_iterator
- endc = mg_dof_handler->end(level);
-
- // traverse all cells and copy the
- // data appropriately to the output
- // vector
- for (; level_cell != endc; ++level_cell, ++global_cell)
- {
- global_cell->get_dof_indices (global_dof_indices);
- level_cell->get_mg_dof_indices(level_dof_indices);
-
- // copy level-wise data to
- // global vector
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- out_vector(global_dof_indices[i])
- = v(level_dof_indices[i]);
- }
-
- std::ofstream out_file(name);
- DataOut<dim> out;
- out.attach_dof_handler(*dof);
- out.add_data_vector(out_vector, "v");
- out.build_patches(5);
- out.write_gnuplot(out_file);
+// const unsigned int dofs_per_cell = mg_dof_handler->get_fe().dofs_per_cell;
+
+// std::vector<unsigned int> global_dof_indices (dofs_per_cell);
+// std::vector<unsigned int> level_dof_indices (dofs_per_cell);
+
+// typename DoFHandler<dim>::active_cell_iterator
+// global_cell = dof->begin_active(level);
+// typename MGDoFHandler<dim>::active_cell_iterator
+// level_cell = mg_dof_handler->begin_active(level);
+// const typename MGDoFHandler<dim>::cell_iterator
+// endc = mg_dof_handler->end(level);
+
+// // traverse all cells and copy the
+// // data appropriately to the output
+// // vector
+// for (; level_cell != endc; ++level_cell, ++global_cell)
+// {
+// global_cell->get_dof_indices (global_dof_indices);
+// level_cell->get_mg_dof_indices(level_dof_indices);
+
+// // copy level-wise data to
+// // global vector
+// for (unsigned int i=0; i<dofs_per_cell; ++i)
+// out_vector(global_dof_indices[i])
+// = v(level_dof_indices[i]);
+// }
+
+// std::ofstream out_file(name);
+// DataOut<dim> out;
+// out.attach_dof_handler(*dof);
+// out.add_data_vector(out_vector, "v");
+// out.build_patches(5);
+// out.write_gnuplot(out_file);
}
#endif
#include <base/data_out_base.h>
#include <dofs/dof_handler.h>
+template<typename number> class BlockVector;
/**
* class to see which characters
* are valid and which are not.
*/
- void add_data_vector (const Vector<double> &data,
+ template <class VECTOR>
+ void add_data_vector (const VECTOR &data,
const std::vector<std::string> &names,
const DataVectorType type = type_automatic);
* underscore and the number of
* each component to @p{name}
*/
- void add_data_vector (const Vector<double> &data,
+ template <class VECTOR>
+ void add_data_vector (const VECTOR &data,
const std::string &name,
const DataVectorType type = type_automatic);
* STL classes).
*/
DataEntry (const Vector<double> *data = 0,
+ const std::vector<std::string> &names = std::vector<std::string>());
+
+ /**
+ * Constructor for block vector data.
+ */
+ DataEntry (const BlockVector<double> *data,
const std::vector<std::string> &names = std::vector<std::string>());
/**
* pointed to remains with
* the caller of this class.
*/
- const Vector<double> *data;
-
+ const Vector<double> *single_data;
+
+ /**
+ * Pointer to a block vector of
+ * data. Either this pointer
+ * or the previous is used,
+ * depending on the stored
+ * vector type.
+ */
+ const BlockVector<double>* block_data;
+
+ /**
+ * True if stored vector is a block vector.
+ */
+ bool has_block;
+
/**
* Names of the components of this
* data vector.
* See the general documentation of this
* class for more information.
*/
- template <int dim>
+ template <int dim, class InVector, class OutVector>
static void integrate_difference (const Mapping<dim> &mapping,
const DoFHandler<dim> &dof,
- const Vector<double> &fe_function,
+ const InVector &fe_function,
const Function<dim> &exact_solution,
- Vector<float> &difference,
+ OutVector &difference,
const Quadrature<dim> &q,
const NormType &norm,
const Function<dim> *weight=0);
* function, see above, with
* @p{mapping=MappingQ1<dim>()}.
*/
- template <int dim>
+ template <int dim, class InVector, class OutVector>
static void integrate_difference (const DoFHandler<dim> &dof,
- const Vector<double> &fe_function,
+ const InVector &fe_function,
const Function<dim> &exact_solution,
- Vector<float> &difference,
+ OutVector &difference,
const Quadrature<dim> &q,
const NormType &norm,
const Function<dim> *weight=0);
void
DoFObjectAccessor<3,deal_II_dimension>::set_dof_values (const Vector<double> &,
BlockVector<double> &) const;
+template
+void
+DoFObjectAccessor<3,deal_II_dimension>::get_dof_values (const BlockVector<float> &,
+ Vector<float> &) const;
+template
+void
+DoFObjectAccessor<3,deal_II_dimension>::set_dof_values (const Vector<float> &,
+ BlockVector<float> &) const;
#endif
set_dof_values_by_interpolation(const Vector<double> &,
BlockVector<double> &) const;
+template
+void
+DoFCellAccessor<deal_II_dimension>::
+get_interpolated_dof_values (const BlockVector<float> &,
+ Vector<float> &) const;
+
+template
+void
+DoFCellAccessor<deal_II_dimension>::
+set_dof_values_by_interpolation(const Vector<float> &,
+ BlockVector<float> &) const;
+
template class DoFAccessor<deal_II_dimension>;
//-----------------------------------------------------------------------------
template
-void FEValuesBase<deal_II_dimension>::get_function_values (const Vector<double> &,
- std::vector<double> &) const;
+void FEValuesBase<deal_II_dimension>::get_function_values (const Vector<double>&,
+ std::vector<double>&) const;
template
-void FEValuesBase<deal_II_dimension>::get_function_values (const Vector<float> &,
- std::vector<float> &) const;
+void FEValuesBase<deal_II_dimension>::get_function_values (const Vector<float>&,
+ std::vector<double>&) const;
template
-void FEValuesBase<deal_II_dimension>::get_function_values (const BlockVector<double> &,
- std::vector<double> &) const;
+void FEValuesBase<deal_II_dimension>::get_function_values (const Vector<float>&,
+ std::vector<float>&) const;
+template
+void FEValuesBase<deal_II_dimension>::get_function_values (const BlockVector<double>&,
+ std::vector<double>&) const;
+template
+void FEValuesBase<deal_II_dimension>::get_function_values (const BlockVector<float>&,
+ std::vector<double>&) const;
+template
+void FEValuesBase<deal_II_dimension>::get_function_values (const BlockVector<float>&,
+ std::vector<float>&) const;
//-----------------------------------------------------------------------------
void FEValuesBase<deal_II_dimension>::get_function_values (const Vector<double> &,
std::vector<Vector<double> > &) const;
template
+void FEValuesBase<deal_II_dimension>::get_function_values (const Vector<float> &,
+ std::vector<Vector<double> > &) const;
+template
void FEValuesBase<deal_II_dimension>::get_function_values (const Vector<float> &,
std::vector<Vector<float> > &) const;
template
void FEValuesBase<deal_II_dimension>::get_function_values (const BlockVector<double> &,
std::vector<Vector<double> > &) const;
+template
+void FEValuesBase<deal_II_dimension>::get_function_values (const BlockVector<float> &,
+ std::vector<Vector<double> > &) const;
//-----------------------------------------------------------------------------
template
void FEValuesBase<deal_II_dimension>::get_function_grads (const BlockVector<double> &,
std::vector<std::vector<Tensor<1,deal_II_dimension> > > &) const;
+template
+void FEValuesBase<deal_II_dimension>::get_function_grads (const BlockVector<float> &,
+ std::vector<std::vector<Tensor<1,deal_II_dimension> > > &) const;
//-----------------------------------------------------------------------------
#include <base/quadrature_lib.h>
#include <base/memory_consumption.h>
#include <lac/vector.h>
+#include <lac/block_vector.h>
#include <numerics/data_out.h>
#include <grid/tria.h>
#include <dofs/dof_handler.h>
DataOut_DoFData<dof_handler_dim,patch_dim,patch_space_dim>::DataEntry::
DataEntry (const Vector<double> *data,
const std::vector<std::string> &names) :
- data(data),
+ single_data(data),
+ has_block(false),
+ names(names)
+{};
+
+
+
+template <int dof_handler_dim, int patch_dim, int patch_space_dim>
+DataOut_DoFData<dof_handler_dim,patch_dim,patch_space_dim>::DataEntry::
+DataEntry (const BlockVector<double> *data,
+ const std::vector<std::string> &names) :
+ block_data(data),
+ has_block(true),
names(names)
{};
DataOut_DoFData<dof_handler_dim,patch_dim,patch_space_dim>::
DataEntry::memory_consumption () const
{
- return (sizeof (data) +
+ return (sizeof (single_data) + sizeof (block_data) +
MemoryConsumption::memory_consumption (names));
};
template <int dof_handler_dim, int patch_dim, int patch_space_dim>
+template <class VECTOR>
void
DataOut_DoFData<dof_handler_dim,patch_dim,patch_space_dim>::
-add_data_vector (const Vector<double> &vec,
+add_data_vector (const VECTOR &vec,
const std::vector<std::string> &names,
const DataVectorType type)
{
template <int dof_handler_dim, int patch_dim, int patch_space_dim>
+template <class VECTOR>
void
DataOut_DoFData<dof_handler_dim,patch_dim,patch_space_dim>::
-add_data_vector (const Vector<double> &vec,
+add_data_vector (const VECTOR &vec,
const std::string &name,
const DataVectorType type)
{
DataOut_DoFData<dof_handler_dim,patch_dim,patch_space_dim>::clear_input_data_references ()
{
for (unsigned int i=0; i<dof_data.size(); ++i)
- dof_data[i].data = 0;
+ {
+ dof_data[i].single_data = 0;
+ dof_data[i].block_data = 0;
+ }
for (unsigned int i=0; i<cell_data.size(); ++i)
- cell_data[i].data = 0;
+ {
+ cell_data[i].single_data = 0;
+ cell_data[i].block_data = 0;
+ }
if (dofs != 0)
{
{
if (data.n_components == 1)
{
- fe_patch_values.get_function_values (*dof_data[dataset].data,
- data.patch_values);
+ if (dof_data[dataset].has_block)
+ fe_patch_values.get_function_values (*dof_data[dataset].block_data,
+ data.patch_values);
+ else
+ fe_patch_values.get_function_values (*dof_data[dataset].single_data,
+ data.patch_values);
+
for (unsigned int q=0; q<n_q_points; ++q)
patch->data(dataset,q) = data.patch_values[q];
}
else
// system of components
{
- fe_patch_values.get_function_values (*dof_data[dataset].data,
- data.patch_values_system);
+ if (dof_data[dataset].has_block)
+ fe_patch_values.get_function_values (*dof_data[dataset].block_data,
+ data.patch_values_system);
+ else
+ fe_patch_values.get_function_values (*dof_data[dataset].single_data,
+ data.patch_values_system);
+
for (unsigned int component=0; component<data.n_components;
++component)
for (unsigned int q=0; q<n_q_points; ++q)
// then do the cell data
for (unsigned int dataset=0; dataset<cell_data.size(); ++dataset)
{
- const double value = (*cell_data[dataset].data)(cell_number);
- for (unsigned int q=0; q<n_q_points; ++q)
- patch->data(dataset+dof_data.size()*data.n_components,q) =
- value;
+ if (cell_data[dataset].has_block)
+ {
+ const double value = (*cell_data[dataset].block_data)(cell_number);
+ for (unsigned int q=0; q<n_q_points; ++q)
+ patch->data(dataset+dof_data.size()*data.n_components,q) =
+ value;
+ } else {
+ const double value = (*cell_data[dataset].single_data)(cell_number);
+ for (unsigned int q=0; q<n_q_points; ++q)
+ patch->data(dataset+dof_data.size()*data.n_components,q) =
+ value;
+ }
};
};
// next cell (patch) in this thread
// explicit instantiations
template class DataOut_DoFData<deal_II_dimension,deal_II_dimension>;
+template void
+DataOut_DoFData<deal_II_dimension,deal_II_dimension>::add_data_vector (
+ const Vector<double> &vec,
+ const std::vector<std::string> &name,
+ const DataVectorType type);
+template void
+DataOut_DoFData<deal_II_dimension,deal_II_dimension>::add_data_vector (
+ const BlockVector<double> &vec,
+ const std::vector<std::string> &name,
+ const DataVectorType type);
+template void
+DataOut_DoFData<deal_II_dimension,deal_II_dimension>::add_data_vector (
+ const Vector<double> &vec,
+ const std::string &name,
+ const DataVectorType type);
+template void
+DataOut_DoFData<deal_II_dimension,deal_II_dimension>::add_data_vector (
+ const BlockVector<double> &vec,
+ const std::string &name,
+ const DataVectorType type);
+
template class DataOut_DoFData<deal_II_dimension,deal_II_dimension+1>;
+template void
+DataOut_DoFData<deal_II_dimension,deal_II_dimension+1>::add_data_vector (
+ const Vector<double> &vec,
+ const std::vector<std::string> &name,
+ const DataVectorType type);
+template void
+DataOut_DoFData<deal_II_dimension,deal_II_dimension+1>::add_data_vector (
+ const BlockVector<double> &vec,
+ const std::vector<std::string> &name,
+ const DataVectorType type);
+template void
+DataOut_DoFData<deal_II_dimension,deal_II_dimension+1>::add_data_vector (
+ const Vector<double> &vec,
+ const std::string &name,
+ const DataVectorType type);
+template void
+DataOut_DoFData<deal_II_dimension,deal_II_dimension+1>::add_data_vector (
+ const BlockVector<double> &vec,
+ const std::string &name,
+ const DataVectorType type);
+
template class DataOut<deal_II_dimension>;
+
// for 3d, also generate an extra class
#if deal_II_dimension >= 2
template class DataOut_DoFData<deal_II_dimension,deal_II_dimension-1,deal_II_dimension>;
+template void
+DataOut_DoFData<deal_II_dimension,deal_II_dimension-1,deal_II_dimension>::add_data_vector (
+ const Vector<double> &vec,
+ const std::vector<std::string> &name,
+ const DataVectorType type);
+template void
+DataOut_DoFData<deal_II_dimension,deal_II_dimension-1,deal_II_dimension>::add_data_vector (
+ const BlockVector<double> &vec,
+ const std::vector<std::string> &name,
+ const DataVectorType type);
+template void
+DataOut_DoFData<deal_II_dimension,deal_II_dimension-1,deal_II_dimension>::add_data_vector (
+ const Vector<double> &vec,
+ const std::string &name,
+ const DataVectorType type);
+template void
+DataOut_DoFData<deal_II_dimension,deal_II_dimension-1,deal_II_dimension>::add_data_vector (
+ const BlockVector<double> &vec,
+ const std::string &name,
+ const DataVectorType type);
+
#endif
#include <base/quadrature_lib.h>
#include <lac/vector.h>
+#include <lac/block_vector.h>
#include <numerics/data_out_faces.h>
#include <grid/tria.h>
#include <dofs/dof_handler.h>
{
if (data.n_components == 1)
{
- fe_patch_values.get_function_values (*dof_data[dataset].data,
- data.patch_values);
+ if (dof_data[dataset].has_block)
+ fe_patch_values.get_function_values (*dof_data[dataset].block_data,
+ data.patch_values);
+ else
+ fe_patch_values.get_function_values (*dof_data[dataset].single_data,
+ data.patch_values);
+
for (unsigned int q=0; q<n_q_points; ++q)
patch->data(dataset,q) = data.patch_values[q];
}
else
// system of components
{
- fe_patch_values.get_function_values (*dof_data[dataset].data,
- data.patch_values_system);
+ if (dof_data[dataset].has_block)
+ fe_patch_values.get_function_values (*dof_data[dataset].block_data,
+ data.patch_values_system);
+ else
+ fe_patch_values.get_function_values (*dof_data[dataset].single_data,
+ data.patch_values_system);
+
for (unsigned int component=0; component<data.n_components;
++component)
for (unsigned int q=0; q<n_q_points; ++q)
// then do the cell data
for (unsigned int dataset=0; dataset<cell_data.size(); ++dataset)
{
- const double value = (*cell_data[dataset].data)(face_number);
- for (unsigned int q=0; q<n_q_points; ++q)
- patch->data(dataset+dof_data.size()*data.n_components,q) =
- value;
+ if (cell_data[dataset].has_block)
+ {
+ const double value = (*cell_data[dataset].block_data)(face_number);
+ for (unsigned int q=0; q<n_q_points; ++q)
+ patch->data(dataset+dof_data.size()*data.n_components,q) =
+ value;
+ } else {
+ const double value = (*cell_data[dataset].single_data)(face_number);
+ for (unsigned int q=0; q<n_q_points; ++q)
+ patch->data(dataset+dof_data.size()*data.n_components,q) =
+ value;
+ }
};
};
// next cell (patch) in this thread
#include <base/quadrature_lib.h>
#include <lac/vector.h>
+#include <lac/block_vector.h>
#include <numerics/data_out_rotation.h>
#include <grid/tria.h>
#include <dofs/dof_handler.h>
{
if (data.n_components == 1)
{
- fe_patch_values.get_function_values (*dof_data[dataset].data,
- data.patch_values);
+ if (dof_data[dataset].has_block)
+ fe_patch_values.get_function_values (*dof_data[dataset].block_data,
+ data.patch_values);
+ else
+ fe_patch_values.get_function_values (*dof_data[dataset].single_data,
+ data.patch_values);
+
switch (dim)
{
case 1:
else
// system of components
{
- fe_patch_values.get_function_values (*dof_data[dataset].data,
- data.patch_values_system);
+ if (dof_data[dataset].has_block)
+ fe_patch_values.get_function_values (*dof_data[dataset].block_data,
+ data.patch_values_system);
+ else
+ fe_patch_values.get_function_values (*dof_data[dataset].single_data,
+ data.patch_values_system);
+
for (unsigned int component=0; component<data.n_components;
++component)
{
// then do the cell data
for (unsigned int dataset=0; dataset<cell_data.size(); ++dataset)
{
- const double value = (*cell_data[dataset].data)(cell_number);
+ const double value = cell_data[dataset].has_block ?
+ (*cell_data[dataset].block_data)(cell_number) :
+ (*cell_data[dataset].single_data)(cell_number);
switch (dim)
{
case 1:
#include <base/quadrature_lib.h>
#include <base/memory_consumption.h>
#include <lac/vector.h>
+#include <lac/block_vector.h>
#include <dofs/dof_handler.h>
#include <dofs/dof_accessor.h>
#include <grid/tria_iterator.h>
-template <int dim>
+template <int dim, class InVector, class OutVector>
void
VectorTools::integrate_difference (const Mapping<dim> &mapping,
const DoFHandler<dim> &dof,
- const Vector<double> &fe_function,
+ const InVector &fe_function,
const Function<dim> &exact_solution,
- Vector<float> &difference,
+ OutVector &difference,
const Quadrature<dim> &q,
const NormType &norm,
const Function<dim> *weight)
};
-template <int dim>
+template <int dim, class InVector, class OutVector>
void
VectorTools::integrate_difference (const DoFHandler<dim> &dof,
- const Vector<double> &fe_function,
+ const InVector &fe_function,
const Function<dim> &exact_solution,
- Vector<float> &difference,
+ OutVector &difference,
const Quadrature<dim> &q,
const NormType &norm,
const Function<dim> *weight)
const Quadrature<deal_II_dimension> &,
const NormType &,
const Function<deal_II_dimension> *);
+template
+void VectorTools::integrate_difference (const Mapping<deal_II_dimension> &,
+ const DoFHandler<deal_II_dimension> &,
+ const Vector<double> &,
+ const Function<deal_II_dimension> &,
+ Vector<double> &,
+ const Quadrature<deal_II_dimension> &,
+ const NormType &,
+ const Function<deal_II_dimension> *);
+template
+void VectorTools::integrate_difference (const DoFHandler<deal_II_dimension> &,
+ const Vector<double> &,
+ const Function<deal_II_dimension> &,
+ Vector<double> &,
+ const Quadrature<deal_II_dimension> &,
+ const NormType &,
+ const Function<deal_II_dimension> *);
+template
+void VectorTools::integrate_difference (const Mapping<deal_II_dimension> &,
+ const DoFHandler<deal_II_dimension> &,
+ const Vector<float> &,
+ const Function<deal_II_dimension> &,
+ Vector<float> &,
+ const Quadrature<deal_II_dimension> &,
+ const NormType &,
+ const Function<deal_II_dimension> *);
+template
+void VectorTools::integrate_difference (const DoFHandler<deal_II_dimension> &,
+ const Vector<float> &,
+ const Function<deal_II_dimension> &,
+ Vector<float> &,
+ const Quadrature<deal_II_dimension> &,
+ const NormType &,
+ const Function<deal_II_dimension> *);
+template
+void VectorTools::integrate_difference (const Mapping<deal_II_dimension> &,
+ const DoFHandler<deal_II_dimension> &,
+ const Vector<float> &,
+ const Function<deal_II_dimension> &,
+ Vector<double> &,
+ const Quadrature<deal_II_dimension> &,
+ const NormType &,
+ const Function<deal_II_dimension> *);
+template
+void VectorTools::integrate_difference (const DoFHandler<deal_II_dimension> &,
+ const Vector<float> &,
+ const Function<deal_II_dimension> &,
+ Vector<double> &,
+ const Quadrature<deal_II_dimension> &,
+ const NormType &,
+ const Function<deal_II_dimension> *);
+template
+void VectorTools::integrate_difference (const Mapping<deal_II_dimension> &,
+ const DoFHandler<deal_II_dimension> &,
+ const BlockVector<double> &,
+ const Function<deal_II_dimension> &,
+ Vector<float> &,
+ const Quadrature<deal_II_dimension> &,
+ const NormType &,
+ const Function<deal_II_dimension> *);
+template
+void VectorTools::integrate_difference (const DoFHandler<deal_II_dimension> &,
+ const BlockVector<double> &,
+ const Function<deal_II_dimension> &,
+ Vector<float> &,
+ const Quadrature<deal_II_dimension> &,
+ const NormType &,
+ const Function<deal_II_dimension> *);
+template
+void VectorTools::integrate_difference (const Mapping<deal_II_dimension> &,
+ const DoFHandler<deal_II_dimension> &,
+ const BlockVector<double> &,
+ const Function<deal_II_dimension> &,
+ Vector<double> &,
+ const Quadrature<deal_II_dimension> &,
+ const NormType &,
+ const Function<deal_II_dimension> *);
+template
+void VectorTools::integrate_difference (const DoFHandler<deal_II_dimension> &,
+ const BlockVector<double> &,
+ const Function<deal_II_dimension> &,
+ Vector<double> &,
+ const Quadrature<deal_II_dimension> &,
+ const NormType &,
+ const Function<deal_II_dimension> *);
+template
+void VectorTools::integrate_difference (const Mapping<deal_II_dimension> &,
+ const DoFHandler<deal_II_dimension> &,
+ const BlockVector<float> &,
+ const Function<deal_II_dimension> &,
+ Vector<float> &,
+ const Quadrature<deal_II_dimension> &,
+ const NormType &,
+ const Function<deal_II_dimension> *);
+template
+void VectorTools::integrate_difference (const DoFHandler<deal_II_dimension> &,
+ const BlockVector<float> &,
+ const Function<deal_II_dimension> &,
+ Vector<float> &,
+ const Quadrature<deal_II_dimension> &,
+ const NormType &,
+ const Function<deal_II_dimension> *);
+template
+void VectorTools::integrate_difference (const Mapping<deal_II_dimension> &,
+ const DoFHandler<deal_II_dimension> &,
+ const BlockVector<float> &,
+ const Function<deal_II_dimension> &,
+ Vector<double> &,
+ const Quadrature<deal_II_dimension> &,
+ const NormType &,
+ const Function<deal_II_dimension> *);
+template
+void VectorTools::integrate_difference (const DoFHandler<deal_II_dimension> &,
+ const BlockVector<float> &,
+ const Function<deal_II_dimension> &,
+ Vector<double> &,
+ const Quadrature<deal_II_dimension> &,
+ const NormType &,
+ const Function<deal_II_dimension> *);
#if deal_II_dimension != 1
template
void VectorTools::project_boundary_values (const Mapping<deal_II_dimension> &,
<h3>deal.II</h3>
<ol>
+ <li> <p>
+ Improved: Both functions <code
+ class="class">DataOut_DoFData</code>::<code
+ class="member">add_data_vector</code> accepts <code
+ class="class">BlockVector</code> as argument.
+ <br>
+ (GK 2001/10/12)
+ </p>
+
+ <li> <p>
+ Improved: Both functions <code
+ class="class">VectorTools</code>::<code
+ class="member">integrate_difference</code> take ingoing and
+ outgoing vector types as template arguments. This allows
+ applying them to <code class="class">BlockVector</code> and of
+ outputting a vector of doubles suitable for <code
+ class="class">DataOut</code>.
+ <br>
+ (GK 2001/10/12)
+ </p>
+
<li> <p>
Fixed: Functions creating sparsity patterns for DG elements in
<code class="class">DoFTools</code> get the pattern type as