Page MenuHomec4science

paraview_helper.hh
No OneTemporary

File Metadata

Created
Mon, Jul 1, 19:11

paraview_helper.hh

/**
* @file paraview_helper.hh
*
* @author Guillaume Anciaux <guillaume.anciaux@epfl.ch>
*
* @date Fri Jan 11 13:30:17 2013
*
* @brief An helper class to generate VTK headers
*
* @section LICENSE
*
* Copyright INRIA and CEA
*
* The LibMultiScale is a C++ parallel framework for the multiscale
* coupling methods dedicated to material simulations. This framework
* provides an API which makes it possible to program coupled simulations
* and integration of already existing codes.
*
* This Project was initiated in a collaboration between INRIA Futurs Bordeaux
* within ScAlApplix team and CEA/DPTA Ile de France.
* The project is now continued at the Ecole Polytechnique Fédérale de Lausanne
* within the LSMS/ENAC laboratory.
*
* This software is governed by the CeCILL-C license under French law and
* abiding by the rules of distribution of free software. You can use,
* modify and/ or redistribute the software under the terms of the CeCILL-C
* license as circulated by CEA, CNRS and INRIA at the following URL
* "http://www.cecill.info".
*
* As a counterpart to the access to the source code and rights to copy,
* modify and redistribute granted by the license, users are provided only
* with a limited warranty and the software's author, the holder of the
* economic rights, and the successive licensors have only limited
* liability.
*
* In this respect, the user's attention is drawn to the risks associated
* with loading, using, modifying and/or developing or reproducing the
* software by the user in light of its specific status of free software,
* that may mean that it is complicated to manipulate, and that also
* therefore means that it is reserved for developers and experienced
* professionals having in-depth computer knowledge. Users are therefore
* encouraged to load and test the software's suitability as regards their
* requirements in conditions enabling the security of their systems and/or
* data to be ensured and, more generally, to use and operate it in the
* same conditions as regards security.
*
* The fact that you are presently reading this means that you have had
* knowledge of the CeCILL-C license and that you accept its terms.
*
*/
#ifndef __LIBMULTISCALE_PARAVIEW_HELPER_HH__
#define __LIBMULTISCALE_PARAVIEW_HELPER_HH__
/* -------------------------------------------------------------------------- */
#include "base64_writer.hh"
/* -------------------------------------------------------------------------- */
__BEGIN_LIBMULTISCALE__
class ParaviewHelper
{
public:
/* ------------------------------------------------------------------------ */
/* Typedefs */
/* ------------------------------------------------------------------------ */
enum ParaHelperOutType {
TEXT = 0,
BASE64 = 1,
COMPRESSED = 2
};
/* ------------------------------------------------------------------------ */
/* Constructors/Destructors */
/* ------------------------------------------------------------------------ */
public:
ParaviewHelper(LMFile & f){
file = f;
setOutputFile(file);
compteur = 0;
};
ParaviewHelper(){
bflag = BASE64;
compteur = 0;
};
virtual ~ParaviewHelper(){};
/* ------------------------------------------------------------------------ */
/* Methods */
/* ------------------------------------------------------------------------ */
void setOutputFile(LMFile & file);
void write_header(UInt nb_nodes,UInt nb_elems);
void startDofList();
void endDofList();
void startCellsConnectivityList();
void endCellsConnectivityList();
void startCellsoffsetsList();
void endCellsoffsetsList();
void startCellstypesList();
void endCellstypesList();
void startPointDataList();
void endPointDataList();
void startCellDataList();
void endCellDataList();
void startData(const std::string & name,UInt nb_components);
void PDataArray(const std::string & name,UInt nb_components);
void endData();
void write_conclusion();
void pushReal(Real x);
void pushInteger(UInt i);
void setMode(UInt mode){
bflag = BASE64 & mode;
}
/* ------------------------------------------------------------------------ */
/* Class Members */
/* ------------------------------------------------------------------------ */
protected:
Base64Writer b64;
UInt bflag;
LMFile file;
long header_offset;
UInt compteur;
};
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::setOutputFile(LMFile & f){
file = f;
b64.setOutputFile(file);
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::write_header(UInt nb_nodes,UInt nb_elems){
file.printf("<VTKFile type=\"UnstructuredGrid\" version=\"0.1\" ");
/* #ifdef BIG_ENDIAN */
/* file.printf("byte_order=\"BigEndian\">\n"); */
/* #else */
file.printf("byte_order=\"LittleEndian\">\n");
/* #endif */
file.printf("<UnstructuredGrid>\n<Piece NumberOfPoints= \"%d\" NumberOfCells=\"%d\">\n",nb_nodes,nb_elems);
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::startDofList(){
file.printf("<Points><DataArray type = \"Float64\" NumberOfComponents=\"%d\" ",3);
if (bflag == BASE64)
file.printf("format=\"binary\">\n");
else
file.printf("format=\"ascii\">\n");
if (bflag == BASE64)
b64.createHeader();
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::endDofList(){
if (bflag == BASE64)
b64.writeHeader();
file.printf("</DataArray>\n");
file.printf("</Points>\n");
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::startCellsConnectivityList(){
file.printf("<Cells>\n");
file.printf("<DataArray type=\"Int32\" Name=\"connectivity\" ");
if (bflag == BASE64)
file.printf("format=\"binary\">\n");
else
file.printf("format=\"ascii\">\n");
if (bflag == BASE64)
b64.createHeader();
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::endCellsConnectivityList(){
if (bflag == BASE64)
b64.writeHeader();
file.printf("</DataArray>\n");
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::startCellsoffsetsList(){
file.printf("<DataArray type=\"Int32\" Name=\"offsets\" ");
if (bflag == BASE64)
file.printf("format=\"binary\">\n");
else
file.printf("format=\"ascii\">\n");
if (bflag == BASE64)
b64.createHeader();
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::endCellsoffsetsList(){
if (bflag == BASE64)
b64.writeHeader();
file.printf("</DataArray>\n");
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::startCellstypesList(){
file.printf("<DataArray type=\"Int32\" Name=\"types\" ");
if (bflag == BASE64)
file.printf("format=\"binary\">\n");
else
file.printf("format=\"ascii\">\n");
if (bflag == BASE64)
b64.createHeader();
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::endCellstypesList(){
if (bflag == BASE64)
b64.writeHeader();
file.printf("</DataArray>\n");
file.printf("</Cells>\n");
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::startPointDataList(){
file.printf("<PointData>\n");
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::endPointDataList(){
file.printf("</PointData>\n");
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::startCellDataList(){
file.printf("<CellData>\n");
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::endCellDataList(){
file.printf("</CellData>\n");
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::startData(const std::string & name,UInt nb_components){
file.printf("<DataArray type=\"Float64\" NumberOfComponents=\"%d\" Name=\"%s\" ",nb_components,name.c_str());
if (bflag == BASE64)
file.printf("format=\"binary\">\n");
else
file.printf("format=\"ascii\">\n");
if (bflag == BASE64)
b64.createHeader();
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::endData(){
if (bflag == BASE64)
b64.writeHeader();
file.printf("</DataArray>\n");
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::PDataArray(const std::string & name,UInt nb_components){
file.printf("<PDataArray type=\"Float64\" NumberOfComponents=\"%d\" Name=\"%s\" ",nb_components,name.c_str());
if (bflag == BASE64)
file.printf("format=\"binary\"></PDataArray>\n");
else
file.printf("format=\"ascii\"></PDataArray>\n");
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::write_conclusion(){
file.printf("</Piece>\n");
file.printf("</UnstructuredGrid></VTKFile>");
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::pushReal(Real d){
if (bflag == BASE64)
b64.pushRealInBase64(d);
else{
file.printf("%.15e ",d);
++compteur;
if (compteur%3 == 0)
file.printf("\n");
}
}
/* -------------------------------------------------------------------------- */
inline void ParaviewHelper::pushInteger(UInt i){
if (bflag == BASE64)
b64.pushIntegerInBase64(i);
else{
file.printf("%d ",i);
}
}
/* -------------------------------------------------------------------------- */
__END_LIBMULTISCALE__
#endif /* __LIBMULTISCALE_PARAVIEW_HELPER_HH__ */

Event Timeline