XdmfWriter Class Reference

#include <xdmfwriter.h>

Collaboration diagram for XdmfWriter:
Collaboration graph
[legend]

List of all members.

Classes

struct  comp

Public Member Functions

 XdmfWriter ()
void writeXdmf (std::string hdf5FileName)
 ~XdmfWriter ()

Protected Types

typedef std::map< std::string,
StringList, comp
TimexDataSets
typedef __gnu_cxx::hash_map
< std::string, TimexDataSets,
StringHashFun, struct eqstr
MeshxTimexDataSets

Protected Member Functions

void printData ()
void write_grid (std::ofstream &out, std::string tria)
void write_grid_info (xmlwriter &out, std::string tria)
void write_grid_reference (xmlwriter &out, std::string gridName, unsigned infoNumber)
void write_temporal_grid_collection (xmlwriter &out, std::string tria)
void write_dataset (xmlwriter &out, std::string dataset, std::string datasetName)
void write_time_list (xmlwriter &out, StringList times)
void write_time (xmlwriter &xml, std::string times)

Protected Attributes

MeshxTimexDataSets m_map

Private Attributes

HDF5Reader h5Reader

Detailed Description

Definition at line 12 of file xdmfwriter.h.


Member Typedef Documentation

typedef __gnu_cxx::hash_map<std::string,TimexDataSets,StringHashFun,struct eqstr> XdmfWriter::MeshxTimexDataSets [protected]

Definition at line 33 of file xdmfwriter.h.

typedef std::map<std::string,StringList,comp> XdmfWriter::TimexDataSets [protected]

Definition at line 30 of file xdmfwriter.h.


Constructor & Destructor Documentation

XdmfWriter::XdmfWriter (  ) 

Definition at line 6 of file xdmfwriter.cpp.

00007 {
00008   
00009 }

XdmfWriter::~XdmfWriter (  )  [inline]

Definition at line 49 of file xdmfwriter.h.

00049 {}


Member Function Documentation

void XdmfWriter::printData (  )  [protected]

Definition at line 95 of file xdmfwriter.cpp.

00096 {
00097   for (MeshxTimexDataSets::iterator it= m_map.begin();it!=m_map.end();it++)
00098   {
00099     for (TimexDataSets::iterator it2=it->second.begin();it2!=it->second.end();it2++)
00100       for (StringList::iterator it3=it2->second.begin();it3!=it2->second.end();it3++)
00101         std::cout << it->first << "  " << it2->first << "  " << *it3 << std::endl;
00102   }
00103 }

void XdmfWriter::write_dataset ( xmlwriter out,
std::string  dataset,
std::string  datasetName 
) [protected]

Definition at line 210 of file xdmfwriter.cpp.

00211 {
00212    VecIndex datasetDims=h5Reader.getDataSetDim(dataset);
00213    assert(datasetDims.size() == 1);
00214    xml.AddAttributes("Name",datasetName);
00215    xml.AddAttributes("Center","Node");
00216    xml.CreateTag("Attribute");
00217    
00218    xml.AddAttributes("Format","HDF");
00219    xml.AddAttributes("DataType","Float");
00220    xml.AddAttributes("Precision","8");
00221    xml.AddAttributes("Dimensions",to_string(datasetDims[0]));
00222    xml.CreateChild("DataItem",h5Reader.getFileName()+":" +dataset);
00223    xml.CloseTag("Attribute");
00224 }

void XdmfWriter::write_grid ( std::ofstream &  out,
std::string  tria 
) [protected]

Definition at line 106 of file xdmfwriter.cpp.

00107 {
00108   std::string path="/Triangulations/" + tria;
00109   std::string connections=path+"/connections";
00110   std::string vertices=path+"/vertices";
00111   VecIndex conDims=h5Reader.getDataSetDim(connections);
00112   VecIndex vertDims=h5Reader.getDataSetDim(vertices);
00113 
00114   assert(conDims[1] == 8);
00115   assert(vertDims[1] == 3);
00116 
00117   char str[10000];
00118 
00119   
00120   
00121   sprintf(str,"\
00122 <Topology TopologyType=\"Tetrahedron\"  Order=\"0 1 3 2 4 5 7 6\" NumberOfElements=\"%d\">\n\
00123    <DataItem ItemType=\"Uniform\"   Format=\"HDF\"   NumberType=\"Int\"   Dimensions=\"%d 8\">\n\
00124    %s\n\
00125    </DataItem>\n\
00126 </Topology>\n\
00127 <Geometry GeometryType=\"XYZ\">\n\
00128   <DataItem ItemType=\"Uniform\"   Format=\"HDF\"   NumberType=\"Float\"  Precision=\"8\"  Dimensions=\"%d 3\">\n\
00129     %s\n\
00130   </DataItem>\n\
00131 </Geometry>\n",conDims[0],conDims[0],connections.c_str(),vertDims[0],vertices.c_str()); 
00132   out << str;   
00133 
00134   
00135 }

void XdmfWriter::write_grid_info ( xmlwriter out,
std::string  tria 
) [protected]

Definition at line 138 of file xdmfwriter.cpp.

00139 {
00140   std::string path="/Triangulations/" + tria;
00141   std::string connections=path+"/connections";
00142   std::string vertices=path+"/vertices";
00143   VecIndex conDims=h5Reader.getDataSetDim(connections);
00144   VecIndex vertDims=h5Reader.getDataSetDim(vertices);
00145 
00146   assert(conDims[1] == 8);
00147   assert(vertDims[1] == 3);
00148 
00149 
00150   xml.AddAttributes("TopologyType","Hexahedron");
00151   xml.AddAttributes("Order","0 1 3 2 4 5 7 6");
00152   xml.AddAttributes("NumberType","Int");
00153   xml.AddAttributes("NumberOfElements",to_string(conDims[0]));
00154   xml.CreateTag("Topology");
00155 
00156   xml.AddAttributes("ItemType","Uniform");
00157   xml.AddAttributes("Format","HDF");
00158   xml.AddAttributes("NumberType","Int");
00159   xml.AddAttributes("Dimensions",to_string(conDims[0],8));
00160   xml.CreateTag("DataItem");
00161   xml.AddString(h5Reader.getFileName()+":"+connections);
00162   xml.CloseTag("DataItem");
00163   xml.CloseTag("Topology");
00164   
00165   xml.AddAttributes("GeometryType","XYZ");
00166   xml.CreateTag("Geometry");
00167 
00168   xml.AddAttributes("ItemType","Uniform");
00169   xml.AddAttributes("Format","HDF");
00170   xml.AddAttributes("NumberType","Float");
00171   xml.AddAttributes("Precision","8");
00172   xml.AddAttributes("Dimensions",to_string(vertDims[0],3));
00173   xml.CreateTag("DataItem");
00174   xml.AddString(h5Reader.getFileName()+":"+vertices);
00175   xml.CloseTag("DataItem");
00176   xml.CloseTag("Geometry");
00177 
00178 
00179 
00180 
00181 }

void XdmfWriter::write_grid_reference ( xmlwriter out,
std::string  gridName,
unsigned  infoNumber 
) [protected]

Definition at line 195 of file xdmfwriter.cpp.

00196 {
00197   out.AddAttributes("Name",gridName);
00198   out.AddAttributes("GridType","Uniform");
00199   out.CreateTag("Grid");
00200   out.AddAttributes("Reference","/Xdmf/Domain/Topology[" + to_string(infoNumber) + "]");
00201   out.CreateEmptyElement("Topology");
00202   out.AddAttributes("Reference","/Xdmf/Domain/Geometry[" + to_string(infoNumber) + "]");
00203   out.CreateEmptyElement("Geometry");
00204 
00205 
00206 }

void XdmfWriter::write_temporal_grid_collection ( xmlwriter out,
std::string  tria 
) [protected]

Definition at line 184 of file xdmfwriter.cpp.

00185 {
00186 
00187   xml.AddAttributes("Name","TimeSeries_"+tria);
00188   xml.AddAttributes("GridType","Collection");
00189   xml.AddAttributes("CollectionType","Temporal");
00190   xml.CreateTag("Grid");
00191 
00192 }

void XdmfWriter::write_time ( xmlwriter xml,
std::string  times 
) [protected]

Definition at line 243 of file xdmfwriter.cpp.

00244 {
00245   xml.AddAttributes("Value",time);
00246   xml.CreateEmptyElement("Time");
00247 }

void XdmfWriter::write_time_list ( xmlwriter out,
StringList  times 
) [protected]

Definition at line 227 of file xdmfwriter.cpp.

00228 {
00229   xml.AddAttributes("TimeType","List");
00230   xml.CreateTag("Time");
00231 
00232   xml.AddAttributes("Format","XML");
00233   xml.AddAttributes("DataType","Float");
00234   xml.AddAttributes("Precision","4");
00235   xml.AddAttributes("Dimensions",to_string(times.size()));
00236   xml.CreateChild("DataItem",to_string(times));
00237   xml.CloseTag("Time");  
00238     
00239     
00240 }

void XdmfWriter::writeXdmf ( std::string  hdf5FileName  ) 

Definition at line 12 of file xdmfwriter.cpp.

00013 {
00014 
00015   h5Reader.open(hdf5FileName);
00016   //Get all the triangulations names
00017   StringList trias = h5Reader.ls("/Triangulations");
00018   //Get All DataSets fields
00019   StringList fieldvs= h5Reader.ls("/DataSets");
00020   //For all fields
00021   for (unsigned i=0;i<fieldvs.size();i++)
00022   {
00023     //Get the list of each data of this field
00024     fieldvs[i]="/DataSets/"+fieldvs[i];
00025     StringList vInst=h5Reader.ls(fieldvs[i]);
00026     //For each data of each field
00027     for (unsigned j=0;j<vInst.size();j++)
00028     {
00029           vInst[j]=fieldvs[i]+"/"+vInst[j];
00030           std::string triaName=h5Reader.getDataSetTriangulation(vInst[j]);
00031           std::string time=h5Reader.readAtt(vInst[j],"Time",false);
00032           m_map[triaName][time].push_back(vInst[j]);
00033     }
00034   }
00035 
00036   std::string xdmfFileName = StringFunctions::get_prefix_file(StringFunctions::get_file_name(hdf5FileName));
00037   xdmfFileName+=".xdmf";
00038 
00039 
00040   xmlwriter xml(xdmfFileName);
00041 
00042 
00043   
00044   xml.CreateTag("Xdmf");
00045   xml.CreateTag("Domain");
00046   //for each mesh
00047   for (MeshxTimexDataSets::iterator it= m_map.begin();it!=m_map.end();it++)
00048   {
00049     //Write the geometry and topology info
00050     write_grid_info(xml,it->first);
00051   }
00052 
00053   std::string dataName;
00054   //Run through the meshes again
00055   unsigned gridRef=1;
00056   for (MeshxTimexDataSets::iterator it= m_map.begin();it!=m_map.end();it++)
00057   {
00058     StringList times;
00059     
00060     write_temporal_grid_collection(xml,it->first);
00061 
00062     //Write Time attribute, first get all time values
00063     for (TimexDataSets::iterator txd=it->second.begin();txd!=it->second.end();txd++)
00064     {
00065        times.push_back(txd->first);
00066     }
00067     //write_time_list(xml,times);
00068     
00069     //Now get the TimexDataSet list
00070     for (TimexDataSets::iterator txd=it->second.begin();txd!=it->second.end();txd++)
00071     {
00072       write_grid_reference(xml,it->first+"_"+txd->first,gridRef); 
00073       //for each data set
00074       write_time(xml,txd->first);
00075       StringList &strLst=txd->second;
00076       for (StringList::iterator dataIt=strLst.begin();dataIt!=strLst.end();dataIt++)
00077       {
00078         dataName=StringFunctions::get_file_name(*dataIt);
00079         dataName=StringFunctions::strip_from_end(dataName,'_'); 
00080         write_dataset(xml,*dataIt,dataName);
00081       }
00082       xml.CloseTag("Grid");
00083     }
00084     gridRef++;
00085     xml.CloseTag("Grid");
00086   }
00087   xml.CloseTag("Domain");
00088   xml.CloseTag("Xdmf");
00089   
00090 }


Member Data Documentation

Definition at line 25 of file xdmfwriter.h.

Definition at line 35 of file xdmfwriter.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Generated on Sun Apr 8 23:13:33 2012 for CO2INJECTION by  doxygen 1.6.3