Skip to content
Snippets Groups Projects
Commit cb37b2bc authored by Pietro Incardona's avatar Pietro Incardona
Browse files

Reordering io files

parent 62978d3e
No related branches found
No related tags found
No related merge requests found
Showing with 399 additions and 5 deletions
File moved
File moved
File moved
......@@ -11,7 +11,6 @@
#define GS_SIZE 8
#include "GraphMLWriter.hpp"
#include "VTKWriter.hpp"
#include "Graph/CartesianGraphFactory.hpp"
#include "util.hpp"
......
......@@ -7,7 +7,7 @@ io_CXXFLAGS = $(CUDA_CFLAGS) $(INCLUDES_PATH) $(BOOST_CPPFLAGS) -I/usr/local/inc
io_CFLAGS = $(CUDA_CFLAGS)
io_LDADD = $(LINKLIBS)
nobase_include_HEADERS = csv_multiarray.hpp CSVWriter.hpp GraphMLWriter.hpp util.hpp VTKWriter.hpp VTKWriter_graph.hpp VTKWriter_grids.hpp VTKWriter_grids_st.hpp VTKWriter_grids_util.hpp VTKWriter_vector_box.hpp
nobase_include_HEADERS = CSVWriter/csv_multiarray.hpp CSVWriter/CSVWriter.hpp GraphMLWriter/GraphMLWriter.hpp util.hpp VTKWriter/VTKWriter.hpp VTKWriter/VTKWriter_graph.hpp VTKWriter/VTKWriter_grids.hpp VTKWriter/VTKWriter_grids_st.hpp VTKWriter/VTKWriter_grids_util.hpp VTKWriter/VTKWriter_vector_box.hpp
.cu.o :
......
File moved
File moved
File moved
File moved
/*
* VTKWriter_point_set.hpp
*
* Created on: Feb 6, 2016
* Author: i-bird
*/
#ifndef OPENFPM_IO_SRC_VTKWRITER_POINT_SET_HPP_
#define OPENFPM_IO_SRC_VTKWRITER_POINT_SET_HPP_
#include <boost/mpl/pair.hpp>
#include "VTKWriter_grids_util.hpp"
/*! \brief Store the couple of vector position and properties
*
* \tparam Vps Type of vector that store the position of the particles
*
*/
template <typename Vps>
class ele_vps
{
public:
typedef Vps value_type;
const Vps & g;
size_t mark;
ele_vps(const Vps & g, size_t mark)
:g(g),mark(mark)
{}
};
/*! \brief Store the couple of vector position and properties
*
* \tparam Vpp Type of vector that store the property of the particles
*
*/
template <typename Vpp>
class ele_vpp
{
public:
typedef Vpp value_type;
const Vpp & g;
size_t mark;
ele_vpp(const Vpp & vpp, size_t mark)
:g(vpp),mark(mark)
{}
};
/*! \brief this class is a functor for "for_each" algorithm
*
* This class is a functor for "for_each" algorithm. For each
* element of the boost::vector the operator() is called.
* Is mainly used to produce an output for each property
*
* \tparam ele_v It is the class ele_v that store the couple vector of position and property
*
*
*/
template<typename ele_v, typename St>
struct prop_out_v
{
// property output string
std::string & v_out;
// vector that we are processing
const openfpm::vector_std< ele_v > & vv;
/*! \brief constructor
*
* \param v_out string to fill with the vertex properties
*
*/
prop_out_v(std::string & v_out, const openfpm::vector_std< ele_v > & vv)
:v_out(v_out),vv(vv)
{};
//! It produce an output for each property
template<typename T>
void operator()(T& t) const
{
typedef typename boost::mpl::at<typename ele_v::value_type::value_type::type,boost::mpl::int_<T::value>>::type ptype;
meta_prop<boost::mpl::int_<T::value> ,ele_v,St, ptype > m(vv,v_out);
}
void lastProp()
{
// Create point data properties
v_out += "SCALARS domain float\n";
// Default lookup table
v_out += "LOOKUP_TABLE default\n";
// Produce point data
for (size_t k = 0 ; k < vv.size() ; k++)
{
//! Get a vertex iterator
auto it = vv.get(k).g.getIterator();
// if there is the next element
while (it.isNext())
{
if (it.get() < vv.get(k).mark)
v_out += "1.0\n";
else
v_out += "0.0\n";
// increment the iterator and counter
++it;
}
}
}
};
/*!
*
* It write a VTK format file for a list of grids defined on a space
*
* \tparam boost::mpl::pair<G,S>
*
* where G is the type of the vector containing the properties, S is the
* type of vector containing the particle positions
*
*/
template <typename pair>
class VTKWriter<pair,VECTOR_POINTS>
{
//! Vector of couple, position and properties
openfpm::vector< ele_vps<typename pair::first >> vps;
openfpm::vector< ele_vpp<typename pair::second>> vpp;
/*! \brief Get the total number of points
*
* \return the total number
*
*/
size_t get_total()
{
size_t tot = 0;
//! Calculate the full number of vertices
for (size_t i = 0 ; i < vps.size() ; i++)
{
tot += vps.get(i).g.size();
}
return tot;
}
/*! \brief It get the vertex properties list
*
* It get the vertex properties list of the vertex defined as VTK header
*
* \return a string that define the vertex properties in graphML format
*
*/
std::string get_vertex_properties_list()
{
//! vertex property output string
std::string v_out;
// write the number of vertex
v_out += "VERTICES " + std::to_string(get_total()) + " " + std::to_string(get_total() * 2) + "\n";
// return the vertex properties string
return v_out;
}
/*! \brief It get the vertex properties list
*
* It get the vertex properties list of the vertex defined as a VTK header
*
* \return a string that define the vertex properties in graphML format
*
*/
std::string get_point_properties_list()
{
//! vertex property output string
std::string v_out;
// write the number of vertex
v_out += "POINTS " + std::to_string(get_total()) + " float" + "\n";
// return the vertex properties string
return v_out;
}
/*! \brief Create the VTK point definition
*
*/
std::string get_point_list()
{
//! vertex node output string
std::stringstream v_out;
//! For each defined grid
for (size_t i = 0 ; i < vps.size() ; i++)
{
//! write the particle position
auto it = vps.get(i).g.getIterator();
// if there is the next element
while (it.isNext())
{
Point<pair::first::value_type::dims,typename pair::first::value_type::coord_type> p;
p = vps.get(i).g.get(it.get());
if (pair::first::value_type::dims == 2)
v_out << p.toString() << " 0.0" << "\n";
else
v_out << p.toString() << "\n";
// increment the iterator and counter
++it;
}
}
// return the vertex list
return v_out.str();
}
/*! \brief Create the VTK vertex definition
*
*/
std::string get_vertex_list()
{
//! vertex node output string
std::string v_out;
size_t k = 0;
for (size_t i = 0 ; i < vps.size() ; i++)
{
//! For each grid point create a vertex
auto it = vps.get(i).g.getIterator();
while (it.isNext())
{
v_out += "1 " + std::to_string(k) + "\n";
++k;
++it;
}
}
// return the vertex list
return v_out;
}
/*! \brief Get the point data header
*
* \return a string with the point data header for VTK format
*
*/
std::string get_point_data_header()
{
std::string v_out;
v_out += "POINT_DATA " + std::to_string(get_total()) + "\n";
return v_out;
}
public:
/*!
*
* VTKWriter constructor
*
*/
VTKWriter()
{}
/*! \brief Add a vector dataset
*
* \param vps vector of positions
* \param vpp vector of properties
* \param mark, additional information that divide the dataset into 2
* (in general is used to mark real from ghost information)
*
*/
void add(const typename pair::first & vps, const typename pair::second & vpp,size_t mark)
{
ele_vps<typename pair::first> t1(vps,mark);
ele_vpp<typename pair::second> t2(vpp,mark);
this->vps.add(t1);
this->vpp.add(t2);
}
/*! \brief It write a VTK file from a vector of points
*
* \tparam prp_out which properties to output [default = -1 (all)]
*
* \param file path where to write
* \param name name of the dataset
* \param file_type specify if it is a VTK BINARY or ASCII file [default = ASCII]
*
*/
template<int prp = -1> bool write(std::string file, std::string f_name = "grids" , file_type ft = file_type::ASCII)
{
// Header for the vtk
std::string vtk_header;
// Point list of the VTK
std::string point_list;
// Vertex list of the VTK
std::string vertex_list;
// Graph header
std::string vtk_binary_or_ascii;
// vertex properties header
std::string point_prop_header;
// edge properties header
std::string vertex_prop_header;
// Data point header
std::string point_data_header;
// Data point
std::string point_data;
// VTK header
vtk_header = "# vtk DataFile Version 3.0\n"
+ f_name + "\n";
// Choose if binary or ASCII
if (ft == file_type::ASCII)
{vtk_header += "ASCII\n";}
else
{vtk_header += "BINARY\n";}
// Data type for graph is DATASET POLYDATA
vtk_header += "DATASET POLYDATA\n";
// point properties header
point_prop_header = get_point_properties_list();
// Get point list
point_list = get_point_list();
// vertex properties header
vertex_prop_header = get_vertex_properties_list();
// Get vertex list
vertex_list = get_vertex_list();
// Get the point data header
point_data_header = get_point_data_header();
// For each property in the vertex type produce a point data
prop_out_v< ele_vpp<typename pair::second>, typename pair::first::value_type::coord_type> pp(point_data, vpp);
if (prp == -1)
boost::mpl::for_each< boost::mpl::range_c<int,0, pair::second::value_type::max_prop> >(pp);
else
boost::mpl::for_each< boost::mpl::range_c<int,prp, prp> >(pp);
// Add the last property
pp.lastProp();
// write the file
std::ofstream ofs(file);
// Check if the file is open
if (ofs.is_open() == false)
{std::cerr << "Error cannot create the VTK file: " + file + "\n";}
ofs << vtk_header << point_prop_header << point_list <<
vertex_prop_header << vertex_list << point_data_header << point_data;
// Close the file
ofs.close();
// Completed succefully
return true;
}
};
#endif /* OPENFPM_IO_SRC_VTKWRITER_POINT_SET_HPP_ */
......@@ -10,6 +10,7 @@
#include "data_type/aggregate.hpp"
#include <random>
#include "VTKWriter.hpp"
BOOST_AUTO_TEST_SUITE( vtk_writer_test )
......
......@@ -6,7 +6,7 @@
#define BOOST_TEST_MODULE "C++ test module for OpenFPM_io project"
#include <boost/test/included/unit_test.hpp>
#include "CSVWriter_unit_tests.hpp"
#include "GraphMLWriter_unit_tests.hpp"
#include "VTKWriter_unit_tests.hpp"
#include "CSVWriter/CSVWriter_unit_tests.hpp"
#include "GraphMLWriter/GraphMLWriter_unit_tests.hpp"
#include "VTKWriter/VTKWriter_unit_tests.hpp"
#include "Plot/Plot_unit_tests.hpp"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment