00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __deal2__data_out_rotation_h
00013 #define __deal2__data_out_rotation_h
00014
00015
00016 #include <deal.II/base/config.h>
00017 #include <deal.II/numerics/data_out.h>
00018
00019 #include <string>
00020 #include <vector>
00021
00022 DEAL_II_NAMESPACE_OPEN
00023
00024
00025 namespace internal
00026 {
00027 namespace DataOutRotation
00028 {
00038 template <int dim, int spacedim>
00039 struct ParallelData : public internal::DataOut::ParallelDataBase<dim,spacedim>
00040 {
00041 template <class FE>
00042 ParallelData (const Quadrature<dim> &quadrature,
00043 const unsigned int n_components,
00044 const unsigned int n_datasets,
00045 const unsigned int n_subdivisions,
00046 const unsigned int n_patches_per_circle,
00047 const std::vector<unsigned int> &n_postprocessor_outputs,
00048 const FE &finite_elements,
00049 const UpdateFlags update_flags);
00050
00051 const unsigned int n_patches_per_circle;
00052
00053 const ::hp::QCollection<dim> q_collection;
00054 ::hp::FEValues<dim,spacedim> x_fe_values;
00055
00056 std::vector<Point<spacedim> > patch_evaluation_points;
00057 };
00058 }
00059 }
00060
00061
00062
00120 template <int dim, class DH=DoFHandler<dim> >
00121 class DataOutRotation : public DataOut_DoFData<DH,DH::dimension+1>
00122 {
00123 public:
00129 typedef typename DataOut_DoFData<DH,DH::dimension+1>::cell_iterator cell_iterator;
00130
00158 virtual void build_patches (const unsigned int n_patches_per_circle,
00159 const unsigned int n_subdivisions = 0);
00160
00170 virtual cell_iterator first_cell ();
00171
00191 virtual cell_iterator next_cell (const cell_iterator &cell);
00192
00196 DeclException1 (ExcInvalidNumberOfSubdivisions,
00197 int,
00198 << "The number of subdivisions per patch, " << arg1
00199 << ", is not valid.");
00203 DeclException1 (ExcRadialVariableHasNegativeValues,
00204 double,
00205 << "The radial variable attains a negative value of " << arg1);
00206
00207 private:
00216 void
00217 build_one_patch (const cell_iterator *cell,
00218 internal::DataOutRotation::ParallelData<DH::dimension, DH::space_dimension> &data,
00219 std::vector<DataOutBase::Patch<DH::dimension+1,DH::space_dimension+1> > &patches);
00220 };
00221
00222
00223 DEAL_II_NAMESPACE_CLOSE
00224
00225 #endif
00226