#include <xdmfwriter.h>
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 |
Definition at line 12 of file xdmfwriter.h.
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.
XdmfWriter::XdmfWriter | ( | ) |
Definition at line 6 of file xdmfwriter.cpp.
XdmfWriter::~XdmfWriter | ( | ) | [inline] |
Definition at line 49 of file xdmfwriter.h.
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.
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 }
HDF5Reader XdmfWriter::h5Reader [private] |
Definition at line 25 of file xdmfwriter.h.
MeshxTimexDataSets XdmfWriter::m_map [protected] |
Definition at line 35 of file xdmfwriter.h.