17 #ifndef __deal2__data_out_base_h 18 #define __deal2__data_out_base_h 21 #include <deal.II/base/config.h> 22 #include <deal.II/base/point.h> 23 #include <deal.II/base/table.h> 24 #include <deal.II/base/geometry_info.h> 25 #include <deal.II/base/std_cxx1x/tuple.h> 31 #include <deal.II/base/mpi.h> 35 #ifdef DEAL_II_HAVE_TECPLOT 246 template <
int dim,
int spacedim=dim>
356 <<
"It is not possible to have a structural dimension of " << arg1
357 <<
" to be larger than the space dimension of the surrounding" 358 <<
" space " << arg2);
399 DXFlags (
const bool write_neighbors =
false,
400 const bool int_binary =
false,
401 const bool coordinates_binary =
false,
402 const bool data_binary =
false);
447 UcdFlags (
const bool write_preamble =
false);
557 const bool bicubic_patch =
false,
558 const bool external_data =
false);
738 bool is_grey ()
const;
750 const double min_value,
751 const double max_value);
770 default_color_function (
const double value,
771 const double min_value,
772 const double max_value);
781 grey_scale_color_function (
const double value,
782 const double min_value,
783 const double max_value);
793 reverse_grey_scale_color_function (
const double value,
794 const double min_value,
795 const double max_value);
800 EpsFlags (
const unsigned int height_vector = 0,
801 const unsigned int color_vector = 0,
803 const unsigned int size = 300,
804 const double line_width = 0.5,
805 const double azimut_angle = 60,
806 const double turn_angle = 30,
807 const double z_scaling = 1.0,
808 const bool draw_mesh =
true,
809 const bool draw_cells =
true,
810 const bool shade_cells =
true,
811 const ColorFunction color_function= &default_color_function);
917 TecplotFlags (
const char *tecplot_binary_file_name = NULL,
918 const char *zone_name = NULL);
990 VtkFlags (
const double time = std::numeric_limits<double>::min(),
991 const unsigned int cycle = std::numeric_limits<unsigned int>::min(),
992 const bool print_date_and_time =
true);
1061 unsigned int line_thickness;
1076 SvgFlags(
const unsigned int height_vector = 0,
1077 const int azimuth_angle = 37,
1078 const int polar_angle = 45,
1079 const unsigned int line_thickness = 1,
1080 const bool margin =
true,
1081 const bool draw_colorbar =
true);
1113 static const unsigned int format_version = 3;
1179 const bool xdmf_hdf5_output =
false);
1239 return (lhs(0) < rhs(0) || (!(rhs(0) < lhs(0)) && (lhs(1) < rhs(1) || (!(rhs(1) < lhs(1)) && lhs(2) < rhs(2)))));
1243 typedef std::multimap<Point<3>,
unsigned int,
Point3Comp> Map3DPoint;
1275 void internal_add_cell(
const unsigned int &cell_index,
const unsigned int &pt_index);
1288 void write_point(
const unsigned int &index,
const Point<dim> &p);
1294 void write_cell(
unsigned int index,
unsigned int start,
unsigned int d1,
unsigned int d2,
unsigned int d3);
1303 void write_data_set(
const std::string &name,
const unsigned int &dimension,
const unsigned int &set_num,
const Table<2,double> &data_vectors);
1309 void fill_node_data(std::vector<double> &node_data)
const;
1315 void fill_cell_data(
const unsigned int &local_node_offset, std::vector<unsigned int> &cell_data)
const;
1322 return data_set_names.at(set_num);
1330 return data_set_dims.at(set_num);
1338 return &data_sets[set_num][0];
1347 return existing_points.size();
1356 return filtered_cells.size()/n_cell_verts;
1365 return data_set_names.size();
1465 template <
int dim,
int spacedim>
1467 const std::vector<std::string> &data_names,
1468 const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
1517 template <
int dim,
int spacedim>
1519 const std::vector<std::string> &data_names,
1520 const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
1534 template <
int dim,
int spacedim>
1536 const std::vector<std::string> &data_names,
1537 const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
1601 template <
int dim,
int spacedim>
1603 const std::vector<std::string> &data_names,
1604 const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
1655 template <
int dim,
int spacedim>
1657 const std::vector<std::string> &data_names,
1658 const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
1669 template <
int dim,
int spacedim>
1671 const std::vector<std::string> &data_names,
1672 const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
1697 template <
int dim,
int spacedim>
1700 const std::vector<std::string> &data_names,
1701 const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
1720 template <
int dim,
int spacedim>
1722 const std::vector<std::string> &data_names,
1723 const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
1746 template <
int dim,
int spacedim>
1748 const std::vector<std::string> &data_names,
1749 const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
1777 template <
int dim,
int spacedim>
1779 const std::vector<std::string> &data_names,
1780 const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
1807 template <
int dim,
int spacedim>
1809 const std::vector<std::string> &data_names,
1810 const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
1835 template <
int dim,
int spacedim>
1837 const std::vector<std::string> &data_names,
1838 const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
1882 template <
int dim,
int spacedim>
1885 const std::vector<std::string> &data_names,
1886 const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
1894 template <
int dim,
int spacedim>
1897 const std::string &filename,
1907 template <
int dim,
int spacedim>
1910 const bool write_mesh_file,
1911 const std::string &mesh_filename,
1912 const std::string &solution_filename,
1921 template <
int dim,
int spacedim>
1923 const std::vector<std::string> &data_names,
1924 const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
1940 std::pair<unsigned int, unsigned int>
2006 <<
"The number of points in this data set is " << arg1
2007 <<
", but we expected " << arg2 <<
" in each space direction.");
2021 <<
"There was an error opening Tecplot file " << arg1
2029 template <
int dim,
int spacedim,
typename STREAM>
2036 template <
int dim,
int spacedim,
typename STREAM>
2043 template <
int dim,
int spacedim,
class STREAM>
2045 const unsigned int n_data_sets,
2046 const bool double_precision,
2064 float camera_focus);
2108 bool operator < (
const SvgCell &)
const;
2142 bool operator < (
const EpsCell2d &)
const;
2156 template <
int dim,
int spacedim>
2282 template <
int dim,
int spacedim=dim>
2329 void write_dx (std::ostream &out)
const;
2337 void write_eps (std::ostream &out)
const;
2345 void write_gmv (std::ostream &out)
const;
2389 void write_ucd (std::ostream &out)
const;
2404 void write_vtk (std::ostream &out)
const;
2430 void write_vtu (std::ostream &out)
const;
2445 void write_vtu_in_parallel (
const char *filename, MPI_Comm comm)
const;
2499 void write_pvtu_record (std::ostream &out,
2500 const std::vector<std::string> &piece_names)
const;
2554 void write_pvd_record (std::ostream &out,
2555 const std::vector<std::pair<double,std::string> > ×_and_names)
const;
2567 void write_visit_record (std::ostream &out,
2568 const std::vector<std::string> &piece_names)
const;
2598 void write_visit_record (std::ostream &out,
2599 const std::vector<std::vector<std::string> > &piece_names)
const;
2605 void write_svg(std::ostream &out)
const;
2624 XDMFEntry create_xdmf_entry (
const std::string &h5_filename,
2625 const double cur_time,
2634 const std::string &h5_filename,
2635 const double cur_time,
2636 MPI_Comm comm)
const;
2644 const std::string &h5_mesh_filename,
2645 const std::string &h5_solution_filename,
2646 const double cur_time,
2647 MPI_Comm comm)
const;
2668 void write_xdmf_file (
const std::vector<XDMFEntry> &entries,
2669 const std::string &filename,
2670 MPI_Comm comm)
const;
2701 void write_hdf5_parallel (
const DataOutFilter &data_filter,
const bool write_mesh_file,
const std::string &mesh_filename,
const std::string &solution_filename, MPI_Comm comm)
const;
2726 void write (std::ostream &out,
2738 void set_flags (
const DXFlags &dx_flags);
2743 void set_flags (
const UcdFlags &ucd_flags);
2748 void set_flags (
const GnuplotFlags &gnuplot_flags);
2758 void set_flags (
const EpsFlags &eps_flags);
2763 void set_flags (
const GmvFlags &gmv_flags);
2768 void set_flags (
const TecplotFlags &tecplot_flags);
2773 void set_flags (
const VtkFlags &vtk_flags);
2778 void set_flags (
const SvgFlags &svg_flags);
2843 const std::vector<typename DataOutBase::Patch<dim,spacedim> > &
2844 get_patches ()
const = 0;
2851 std::vector<std::string>
2852 get_dataset_names ()
const = 0;
2874 std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> >
2875 get_vector_data_ranges ()
const;
3011 template <
int dim,
int spacedim=dim>
3020 void read (std::istream &in);
3066 <<
"Either the dimensions <" << arg1 <<
"> and <" 3067 << arg2 <<
"> or the space dimensions <" 3068 << arg3 <<
"> and <" << arg4
3069 <<
"> do not match!");
3080 virtual const std::vector<typename ::DataOutBase::Patch<dim,spacedim> > &
3081 get_patches ()
const;
3090 virtual std::vector<std::string> get_dataset_names ()
const;
3112 std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> >
3113 get_vector_data_ranges ()
const;
3120 std::vector<typename ::DataOutBase::Patch<dim,spacedim> >
patches;
3121 std::vector<std::string> dataset_names;
3127 std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> >
3158 std::string
indent(
const unsigned int indent_level)
const 3160 std::string res =
"";
3161 for (
unsigned int i=0; i<indent_level; ++i) res +=
" ";
3167 XDMFEntry(
const std::string filename,
const double time,
const unsigned int nodes,
const unsigned int cells,
const unsigned int dim) : valid(
true), h5_sol_filename(filename), h5_mesh_filename(filename), entry_time(time), num_nodes(nodes), num_cells(cells), dimension(dim) {};
3168 XDMFEntry(
const std::string mesh_filename,
const std::string solution_filename,
const double time,
const unsigned int nodes,
const unsigned int cells,
const unsigned int dim) : valid(
true), h5_sol_filename(solution_filename), h5_mesh_filename(mesh_filename), entry_time(time), num_nodes(nodes), num_cells(cells), dimension(dim) {};
3175 attribute_dims[attr_name] = dimension;
3181 template <
class Archive>
3196 std::string get_xdmf_content(
const unsigned int indent_level)
const;
3207 return (red == green) && (red == blue);
3222 template <
int dim,
int spacedim>
3237 template <
int dim,
int spacedim>
3239 operator >> (std::istream &in,
3244 DEAL_II_NAMESPACE_CLOSE
static void write_filtered_data(const std::vector< Patch< dim, spacedim > > &patches, const std::vector< std::string > &data_names, const std::vector< std_cxx1x::tuple< unsigned int, unsigned int, std::string > > &vector_data_ranges, DataOutFilter &filtered_data)
static const unsigned int invalid_unsigned_int
std::size_t memory_consumption() const
unsigned int n_cells() const
Map3DPoint existing_points
Map of points to an internal index.
unsigned int height_vector
DeclException0(ExcNoPatches)
static std::pair< unsigned int, unsigned int > determine_intermediate_format_dimensions(std::istream &input)
GnuplotFlags gnuplot_flags
static Point< 6 > svg_get_gradient_parameters(Point< 3 > points[])
std::map< unsigned int, unsigned int > filtered_cells
Map of cells to the filtered points.
static std::string get_output_format_names()
Deal_II_IntermediateFlags deal_II_intermediate_flags
static std::string default_suffix(const OutputFormat output_format)
bool valid
Whether this entry is valid and contains data to be written.
static void write_vtu_footer(std::ostream &out)
static void write_data(const std::vector< Patch< dim, spacedim > > &patches, const unsigned int n_data_sets, const bool double_precision, STREAM &out)
double entry_time
The simulation time associated with this entry.
static void write_gnuplot(const std::vector< Patch< dim, spacedim > > &patches, const std::vector< std::string > &data_names, const std::vector< std_cxx1x::tuple< unsigned int, unsigned int, std::string > > &vector_data_ranges, const GnuplotFlags &flags, std::ostream &out)
static void write_ucd(const std::vector< Patch< dim, spacedim > > &patches, const std::vector< std::string > &data_names, const std::vector< std_cxx1x::tuple< unsigned int, unsigned int, std::string > > &vector_data_ranges, const UcdFlags &flags, std::ostream &out)
void serialize(Archive &ar, const unsigned int version)
std::string get_data_set_name(const unsigned int &set_num) const
static void write_svg(const std::vector< Patch< dim, spacedim > > &patches, const std::vector< std::string > &data_names, const std::vector< std_cxx1x::tuple< unsigned int, unsigned int, std::string > > &vector_data_ranges, const SvgFlags &flags, std::ostream &out)
unsigned int default_subdivisions
std::vector< unsigned int > data_set_dims
Data set dimensions.
Point< spacedim > vertices[GeometryInfo< dim >::vertices_per_cell]
bool filter_duplicate_vertices
std::vector< std::vector< double > > data_sets
Data set data.
static void write_deal_II_intermediate(const std::vector< Patch< dim, spacedim > > &patches, const std::vector< std::string > &data_names, const std::vector< std_cxx1x::tuple< unsigned int, unsigned int, std::string > > &vector_data_ranges, const Deal_II_IntermediateFlags &flags, std::ostream &out)
std::map< std::string, unsigned int > attribute_dims
The attributes associated with this entry and their dimension.
static void write_hdf5_parallel(const std::vector< Patch< dim, spacedim > > &patches, const DataOutFilter &data_filter, const std::string &filename, MPI_Comm comm)
const char * tecplot_binary_file_name
int n_cell_verts
Number of vertices per cell.
DataOutBase::DataOutFilterFlags flags
Flags used to specify filtering behavior.
static void write_vtk(const std::vector< Patch< dim, spacedim > > &patches, const std::vector< std::string > &data_names, const std::vector< std_cxx1x::tuple< unsigned int, unsigned int, std::string > > &vector_data_ranges, const VtkFlags &flags, std::ostream &out)
std::vector< typename::DataOutBase::Patch< dim, spacedim > > patches
TecplotFlags tecplot_flags
std::vector< std::string > data_set_names
Data set names.
void add_attribute(const std::string &attr_name, const unsigned int dimension)
unsigned int n_data_sets() const
unsigned int get_data_set_dim(const unsigned int &set_num) const
static void write_tecplot(const std::vector< Patch< dim, spacedim > > &patches, const std::vector< std::string > &data_names, const std::vector< std_cxx1x::tuple< unsigned int, unsigned int, std::string > > &vector_data_ranges, const TecplotFlags &flags, std::ostream &out)
int node_dim
Dimensionality of the nodes, used to properly output filtered data.
static void write_vtu_main(const std::vector< Patch< dim, spacedim > > &patches, const std::vector< std::string > &data_names, const std::vector< std_cxx1x::tuple< unsigned int, unsigned int, std::string > > &vector_data_ranges, const VtkFlags &flags, std::ostream &out)
ColorFunction color_function
unsigned int n_subdivisions
BlockCompressedSparsityPattern CompressedBlockSparsityPattern DEAL_II_DEPRECATED
std::string h5_sol_filename
The name of the HDF5 heavy data solution and/or mesh files this entry references. ...
unsigned int n_nodes() const
DeclException1(ExcErrorOpeningTecplotFile, char *,<< "There was an error opening Tecplot file "<< arg1<< " for output")
static void write_vtu_header(std::ostream &out, const VtkFlags &flags)
std::ostream & operator<<(std::ostream &os, const Vector< number > &v)
static void write_povray(const std::vector< Patch< dim, spacedim > > &patches, const std::vector< std::string > &data_names, const std::vector< std_cxx1x::tuple< unsigned int, unsigned int, std::string > > &vector_data_ranges, const PovrayFlags &flags, std::ostream &out)
static const unsigned int no_neighbor
const double * get_data_set(const unsigned int &set_num) const
DeclException2(ExcInvalidCombinationOfDimensions, int, int,<< "It is not possible to have a structural dimension of "<< arg1<< " to be larger than the space dimension of the surrounding"<< " space "<< arg2)
static OutputFormat parse_output_format(const std::string &format_name)
static const unsigned int space_dim
static Point< 2 > svg_project_point(Point< 3 > point, Point< 3 > camera_position, Point< 3 > camera_direction, Point< 3 > camera_horizontal, float camera_focus)
bool operator==(const Patch &patch) const
static void write_nodes(const std::vector< Patch< dim, spacedim > > &patches, STREAM &out)
unsigned int num_nodes
The number of nodes, cells and dimensionality associated with the data.
static void write_cells(const std::vector< Patch< dim, spacedim > > &patches, STREAM &out)
#define DeclException4(Exception4, type1, type2, type3, type4, outsequence)
unsigned int color_vector
std::vector< std_cxx1x::tuple< unsigned int, unsigned int, std::string > > vector_data_ranges
static void write_eps(const std::vector< Patch< dim, spacedim > > &patches, const std::vector< std::string > &data_names, const std::vector< std_cxx1x::tuple< unsigned int, unsigned int, std::string > > &vector_data_ranges, const EpsFlags &flags, std::ostream &out)
static void write_dx(const std::vector< Patch< dim, spacedim > > &patches, const std::vector< std::string > &data_names, const std::vector< std_cxx1x::tuple< unsigned int, unsigned int, std::string > > &vector_data_ranges, const DXFlags &flags, std::ostream &out)
std::string indent(const unsigned int indent_level) const
Small function to create indentation for XML file.
static void write_vtu(const std::vector< Patch< dim, spacedim > > &patches, const std::vector< std::string > &data_names, const std::vector< std_cxx1x::tuple< unsigned int, unsigned int, std::string > > &vector_data_ranges, const VtkFlags &flags, std::ostream &out)
std::map< unsigned int, unsigned int > filtered_points
Map of actual point index to internal point index.
bool points_are_available
unsigned int neighbors[dim > 0?GeometryInfo< dim >::faces_per_cell:1]
static void write_tecplot_binary(const std::vector< Patch< dim, spacedim > > &patches, const std::vector< std::string > &data_names, const std::vector< std_cxx1x::tuple< unsigned int, unsigned int, std::string > > &vector_data_ranges, const TecplotFlags &flags, std::ostream &out)
unsigned int height_vector
static void write_gmv_reorder_data_vectors(const std::vector< Patch< dim, spacedim > > &patches, Table< 2, double > &data_vectors)
static void write_gmv(const std::vector< Patch< dim, spacedim > > &patches, const std::vector< std::string > &data_names, const std::vector< std_cxx1x::tuple< unsigned int, unsigned int, std::string > > &vector_data_ranges, const GmvFlags &flags, std::ostream &out)