Compare commits
1 Commits
H5Part-1.4
..
1.2
| Author | SHA1 | Date | |
|---|---|---|---|
| 002e8bc31a |
@@ -3,6 +3,31 @@
|
||||
/COPYRIGHT -text
|
||||
/ChangeLog -text
|
||||
/GNUmakefile.orig -text
|
||||
H5Fed/applications/gmsh2h5fed.cc -text
|
||||
H5Fed/applications/gmsh2h5fed.hh -text
|
||||
H5Fed/applications/makefile.am -text
|
||||
H5Fed/autogen.sh -text
|
||||
H5Fed/configure.ac -text
|
||||
H5Fed/grids/cube0.geo -text
|
||||
H5Fed/grids/cube0.msh -text
|
||||
H5Fed/grids/cubeincube.geo -text
|
||||
H5Fed/grids/cubeincube.msh -text
|
||||
H5Fed/grids/sphere.geo -text
|
||||
H5Fed/grids/sphere.msh -text
|
||||
H5Fed/libsrc/gmsh/gmsh.cc -text
|
||||
H5Fed/libsrc/gmsh/gmsh.hh -text
|
||||
H5Fed/libsrc/gmsh/gmshconst.hh -text
|
||||
H5Fed/libsrc/gmsh/gmshgrammar.hh -text
|
||||
H5Fed/libsrc/gmsh/gmshsemanticaction.hh -text
|
||||
H5Fed/libsrc/gmsh/makefile.am -text
|
||||
H5Fed/libsrc/h5fed/h5fed.cc -text
|
||||
H5Fed/libsrc/h5fed/h5fed.hh -text
|
||||
H5Fed/libsrc/h5fed/h5fedconst.hh -text
|
||||
H5Fed/libsrc/h5fed/makefile.am -text
|
||||
H5Fed/libsrc/makefile.am -text
|
||||
H5Fed/libsrc/stdincl/nonsciconst.h -text
|
||||
H5Fed/libsrc/stdincl/physicomath.h -text
|
||||
H5Fed/makefile.am -text
|
||||
/Makefile.am -text
|
||||
/Makefile.orig -text
|
||||
/NEWS -text
|
||||
@@ -13,165 +38,93 @@
|
||||
/config.sub -text
|
||||
/configure.ac -text
|
||||
/depcomp -text
|
||||
doc/2006-Berkeley-Visit/BethelSAP_1page-4.doc -text
|
||||
doc/2006-Berkeley-Visit/H5Part.ppt -text
|
||||
doc/2006-Berkeley-Visit/H5xxx.ppt -text
|
||||
doc/2006-Berkeley-Visit/H5xxxVisIt.fig -text
|
||||
doc/2006-Berkeley-Visit/SAP-Combined-v6.doc -text
|
||||
doc/2006-Berkeley-Visit/aqpsi2006mar22.pdf -text
|
||||
doc/2006-Berkeley-Visit/hdf.ps -text
|
||||
doc/Building.html -text
|
||||
doc/BuildingHDF5.html -text
|
||||
doc/Downloading.html -text
|
||||
doc/Doxyfile -text
|
||||
doc/H5X_File_Format.txt -text
|
||||
doc/Makefile.am -text
|
||||
doc/doxyfooter -text
|
||||
doc/H5PartExpress.html -text
|
||||
doc/H5PartIDL.html -text
|
||||
doc/H5PartParaview.html -text
|
||||
doc/H5PartTools.html -text
|
||||
doc/H5PartVisIt.html -text
|
||||
doc/H5PartVisIt/cloud_visit.png -text
|
||||
doc/H5PartVisIt/cloud_visit.s.png -text
|
||||
doc/H5PartVisIt/cloud_visit_2D.png -text
|
||||
doc/H5PartVisIt/cloud_visit_2D.s.png -text
|
||||
doc/H5PartVisIt/visit_query1.png -text
|
||||
doc/H5PartVisIt/visit_query1.s.png -text
|
||||
doc/H5tools/H5tools.htm -text
|
||||
doc/H5tools/H5tools_files/snapshot1.jpg -text
|
||||
doc/H5xxx/H5xxx.tex -text
|
||||
doc/H5xxx/JAC2003.cls -text
|
||||
doc/H5xxx/makefile -text
|
||||
doc/InternalLayout.html -text
|
||||
doc/ReferencePages/H5PartF_8c.html -text
|
||||
doc/ReferencePages/H5Part_8c.html -text
|
||||
doc/ReferencePages/H5Part_8h-source.html -text
|
||||
doc/ReferencePages/H5Part_8h.html -text
|
||||
doc/ReferencePages/annotated.html -text
|
||||
doc/ReferencePages/doxygen.css -text
|
||||
doc/ReferencePages/doxygen.png -text
|
||||
doc/ReferencePages/files.html -text
|
||||
doc/ReferencePages/functions.html -text
|
||||
doc/ReferencePages/functions_vars.html -text
|
||||
doc/ReferencePages/globals.html -text
|
||||
doc/ReferencePages/globals_defs.html -text
|
||||
doc/ReferencePages/globals_func.html -text
|
||||
doc/ReferencePages/globals_type.html -text
|
||||
doc/ReferencePages/index.html -text
|
||||
doc/ReferencePages/structH5IO__getname__t-members.html -text
|
||||
doc/ReferencePages/structH5IO__getname__t.html -text
|
||||
doc/ReferencePages/structH5PartFile-members.html -text
|
||||
doc/ReferencePages/structH5PartFile.html -text
|
||||
doc/UsingC.html -text
|
||||
doc/UsingF.html -text
|
||||
doc/collision_6.png -text
|
||||
doc/collision_6.s.png -text
|
||||
doc/h5part.html -text
|
||||
doc/hdf5.pdf -text
|
||||
doc/layout.png -text
|
||||
/install-sh -text
|
||||
/license.txt -text
|
||||
/missing -text
|
||||
/rules.make -text
|
||||
src/H5Block.c -text
|
||||
src/H5Block.h -text
|
||||
src/H5BlockErrors.h -text
|
||||
src/H5BlockF.c -text
|
||||
src/H5BlockF90.inc -text
|
||||
src/H5BlockPrivate.h -text
|
||||
src/H5BlockTypes.h -text
|
||||
src/H5Part++.cc -text
|
||||
src/H5Part++.hh -text
|
||||
src/H5Part.c -text
|
||||
src/H5Part.cc -text
|
||||
src/H5Part.h -text
|
||||
src/H5PartErrors.h -text
|
||||
src/H5Part.hh -text
|
||||
src/H5Part.inc -text
|
||||
src/H5PartF.c -text
|
||||
src/H5PartF90.inc -text
|
||||
src/H5PartPrivate.h -text
|
||||
src/H5PartTypes.h -text
|
||||
src/Makefile.am -text
|
||||
src/TestUnderscore.f -text
|
||||
src/TestUnderscoreC.c -text
|
||||
src/addToDoxygenMainPage.h -text
|
||||
test/Bench.c -text
|
||||
test/BlockTestSpecs.txt -text
|
||||
test/H5BlockDissolveGhosts.c -text
|
||||
test/H5BlockParTestScalarField.c -text
|
||||
test/H5BlockParTestScalarField.pbs -text
|
||||
test/H5BlockParTestScalarFieldF.f90 -text
|
||||
test/H5BlockTestAttributes.c -text
|
||||
test/H5BlockTestAttributesF.f90 -text
|
||||
test/H5ParallelTest.cc -text
|
||||
test/H5PartAndreasTest.cc -text
|
||||
test/H5PartTest.cc -text
|
||||
test/H5PartTestParallel.cc -text
|
||||
test/H5ecloudExample.cc -text
|
||||
test/H5test.cc -text
|
||||
test/H5testF.f -text
|
||||
test/H5testFpar.f90 -text
|
||||
test/H5testFpar.f -text
|
||||
test/Makefile.am -text
|
||||
tools/Makefile.am -text
|
||||
tools/README -text
|
||||
tools/h5pAttrib.cc -text
|
||||
tools/h5pToGNUplot.cc -text
|
||||
tools/homdynToH5p.cc -text
|
||||
trunk/AUTHORS -text
|
||||
trunk/COPYRIGHT -text
|
||||
trunk/ChangeLog -text
|
||||
trunk/GNUmakefile.orig -text
|
||||
trunk/Makefile.am -text
|
||||
trunk/Makefile.orig -text
|
||||
trunk/NEWS -text
|
||||
trunk/README -text
|
||||
trunk/autogen.sh -text
|
||||
trunk/config.guess -text
|
||||
trunk/config.h.in -text
|
||||
trunk/config.sub -text
|
||||
trunk/configure.ac -text
|
||||
trunk/depcomp -text
|
||||
trunk/doc/Doxyfile -text
|
||||
trunk/doc/H5X_File_Format.txt -text
|
||||
trunk/doc/Makefile.am -text
|
||||
trunk/doc/doxyfooter -text
|
||||
trunk/install-sh -text
|
||||
trunk/license.txt -text
|
||||
trunk/missing -text
|
||||
trunk/rules.make -text
|
||||
trunk/src/H5Block.c -text
|
||||
trunk/src/H5Block.h -text
|
||||
trunk/src/H5BlockErrors.h -text
|
||||
trunk/src/H5BlockF.c -text
|
||||
trunk/src/H5BlockF90.inc -text
|
||||
trunk/src/H5BlockPrivate.h -text
|
||||
trunk/src/H5BlockTypes.h -text
|
||||
trunk/src/H5Part.c -text
|
||||
trunk/src/H5Part.h -text
|
||||
trunk/src/H5PartErrors.h -text
|
||||
trunk/src/H5PartF.c -text
|
||||
trunk/src/H5PartF90.inc -text
|
||||
trunk/src/H5PartPrivate.h -text
|
||||
trunk/src/H5PartTypes.h -text
|
||||
trunk/src/Makefile.am -text
|
||||
trunk/src/TestUnderscore.f -text
|
||||
trunk/src/TestUnderscoreC.c -text
|
||||
trunk/test/Bench.c -text
|
||||
trunk/test/BlockTestSpecs.txt -text
|
||||
trunk/test/H5BlockDissolveGhosts.c -text
|
||||
trunk/test/H5BlockParTestScalarField.c -text
|
||||
trunk/test/H5BlockParTestScalarField.pbs -text
|
||||
trunk/test/H5BlockParTestScalarFieldF.f90 -text
|
||||
trunk/test/H5BlockTestAttributes.c -text
|
||||
trunk/test/H5BlockTestAttributesF.f90 -text
|
||||
trunk/test/H5ParallelTest.cc -text
|
||||
trunk/test/H5PartAndreasTest.cc -text
|
||||
trunk/test/H5PartTest.cc -text
|
||||
trunk/test/H5PartTestParallel.cc -text
|
||||
trunk/test/H5test.cc -text
|
||||
trunk/test/H5testF.f -text
|
||||
trunk/test/H5testFpar.f90 -text
|
||||
trunk/test/Makefile.am -text
|
||||
trunk/tools/Makefile.am -text
|
||||
trunk/tools/README -text
|
||||
trunk/tools/h5pAttrib.cc -text
|
||||
trunk/tools/h5pToGNUplot.cc -text
|
||||
trunk/tools/homdynToH5p.cc -text
|
||||
trunk/visit_plugins/databases/H5Part/.depend -text
|
||||
trunk/visit_plugins/databases/H5Part/Makefile -text
|
||||
trunk/visit_plugins/databases/H5Part/README.txt -text
|
||||
trunk/visit_plugins/databases/H5Part/avth5partFileFormat.C -text
|
||||
trunk/visit_plugins/databases/H5Part/avth5partFileFormat.h -text
|
||||
trunk/visit_plugins/databases/H5Part/h5part.xml -text
|
||||
trunk/visit_plugins/databases/H5Part/h5partCommonPluginInfo.C -text
|
||||
trunk/visit_plugins/databases/H5Part/h5partEnginePluginInfo.C -text
|
||||
trunk/visit_plugins/databases/H5Part/h5partMDServerPluginInfo.C -text
|
||||
trunk/visit_plugins/databases/H5Part/h5partPluginInfo.C -text
|
||||
trunk/visit_plugins/databases/H5Part/h5partPluginInfo.h -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/.depend -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/Binner.xml -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/BinnerCommonPluginInfo.C -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/BinnerEnginePluginInfo.C -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.C -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.h -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.java -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/BinnerGUIPluginInfo.C -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/BinnerMakefile -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/BinnerPluginInfo.C -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/BinnerPluginInfo.h -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/BinnerScriptingPluginInfo.C -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/BinnerViewerPluginInfo.C -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/Binnerreplace.txt -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/Makefile -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/PyBinner.C -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/PyBinner.h -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/QvisBinnerWindow.C -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/QvisBinnerWindow.h -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/avtBinnerFilter.C -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/avtBinnerFilter.h -text
|
||||
trunk/visit_plugins/operators/BinnerFilter/icon.xpm -text
|
||||
trunk/visit_plugins/operators/RandomSample/.depend -text
|
||||
trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.C -text
|
||||
trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.h -text
|
||||
trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.java -text
|
||||
trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleCommonPluginInfo.C -text
|
||||
trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleEnginePluginInfo.C -text
|
||||
trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleGUIPluginInfo.C -text
|
||||
trunk/visit_plugins/operators/RandomSample/H5PartRandomSamplePluginInfo.C -text
|
||||
trunk/visit_plugins/operators/RandomSample/H5PartRandomSamplePluginInfo.h -text
|
||||
trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleScriptingPluginInfo.C -text
|
||||
trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleViewerPluginInfo.C -text
|
||||
trunk/visit_plugins/operators/RandomSample/Makefile -text
|
||||
trunk/visit_plugins/operators/RandomSample/PyH5PartRandomSampleAttributes.C -text
|
||||
trunk/visit_plugins/operators/RandomSample/PyH5PartRandomSampleAttributes.h -text
|
||||
trunk/visit_plugins/operators/RandomSample/QvisH5PartRandomSampleWindow.C -text
|
||||
trunk/visit_plugins/operators/RandomSample/QvisH5PartRandomSampleWindow.h -text
|
||||
trunk/visit_plugins/operators/RandomSample/RandomSample.xml -text
|
||||
trunk/visit_plugins/operators/RandomSample/avtH5PartRandomSampleFilter.C -text
|
||||
trunk/visit_plugins/operators/RandomSample/avtH5PartRandomSampleFilter.h -text
|
||||
trunk/visit_plugins/operators/RandomSample/icon.xpm -text
|
||||
tools/h5pToGNUplot.py -text
|
||||
visit_plugins/databases/H5Part/.depend -text
|
||||
visit_plugins/databases/H5Part/Makefile -text
|
||||
visit_plugins/databases/H5Part/README.txt -text
|
||||
|
||||
@@ -0,0 +1,427 @@
|
||||
// rights - 2006-, copyright patrick leidenberger and benedikt oswald,
|
||||
// all rights reserved
|
||||
// project - gmsh2h5fed
|
||||
// file name - gmsh2h5fed.cc
|
||||
// file type - c++ implementaton file
|
||||
// objective - main file for the gmsh to hdf5fed converter
|
||||
// modified - 2006 jun 26, creation, patrick leidenberger
|
||||
// modified - 2006 aug 25, extend, patrick leidenberger
|
||||
// modified - 2006 aug 26, pl, integrate automatic index mapping.
|
||||
//
|
||||
// feature - Implements the a mesh preprocessor.
|
||||
// feature - It will read gmsh's mesh files of version 2.0 and write the mesh
|
||||
// feature - into an HDF5/FiniteElementData file.
|
||||
// required software - rlog library, boost library
|
||||
|
||||
#include <gmsh2h5fed.hh>
|
||||
|
||||
using namespace rlog;
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
//=================//
|
||||
// Initialize RLog //
|
||||
//=================//
|
||||
// Make a instance of the class for RLog.
|
||||
StdioNode stdLog;
|
||||
|
||||
/** Subscchar* inFile_;ribe output channels.
|
||||
* Compile with -DRLOG_DEBUG to get the debug output.
|
||||
**/
|
||||
#ifdef USE_RLOG_DEBUG_CHANNEL
|
||||
stdLog.subscribeTo(GetGlobalChannel("debug"));
|
||||
#endif //USE_RLOG_DEBUG_CHANNEL
|
||||
#ifdef USE_RLOG_ERROR_CHANNEL
|
||||
stdLog.subscribeTo(GetGlobalChannel("error"));
|
||||
#endif //USE_RLOG_ERROR_CHANNEL
|
||||
#ifdef USE_RLOG_INFO_CHANNEL
|
||||
stdLog.subscribeTo(GetGlobalChannel("info"));
|
||||
#endif //USE_RLOG_INFO_CHANNEL
|
||||
#ifdef USE_RLOG_WARNING_CHANNEL
|
||||
stdLog.subscribeTo(GetGlobalChannel("warning"));
|
||||
#endif //USE_RLOG_WARNING_CHANNEL
|
||||
|
||||
// Define variables that hold the command line parameters.
|
||||
string gmshInputFile;
|
||||
string hdf5fedOutputFile;
|
||||
bool writeFileForce = false;
|
||||
|
||||
//==================================================//
|
||||
// Parse the comand line options //
|
||||
// with the program_options from the boost library. //
|
||||
//==================================================//
|
||||
try
|
||||
{
|
||||
// Define and instance of the program_options class and name it.
|
||||
boost::program_options::options_description
|
||||
desc("Allowed program options");
|
||||
// Define the command line options parsing rules.
|
||||
desc.add_options()
|
||||
("help", "produce this help")
|
||||
("input-file", boost::program_options::value<string>(),
|
||||
"gmsh v2.0 input file")
|
||||
("output-file", boost::program_options::value<string>(),
|
||||
"hdf5fed output file")
|
||||
("force", "if output file already exists, overwrite");
|
||||
// Parse the command line.
|
||||
boost::program_options::variables_map varMap;
|
||||
boost::program_options::store
|
||||
(boost::program_options::parse_command_line(argc, argv, desc),
|
||||
varMap);
|
||||
boost::program_options::notify(varMap);
|
||||
// Action in relation to the command line options.
|
||||
if (varMap.count("help"))
|
||||
{
|
||||
cout << desc << "\n";
|
||||
return ERRORCODE;
|
||||
}
|
||||
else if ((varMap.count("input-file"))
|
||||
&& (varMap.count("output-file")))
|
||||
{
|
||||
gmshInputFile = varMap["input-file"].as<string>();
|
||||
hdf5fedOutputFile = varMap["output-file"].as<string>();
|
||||
rInfo("Input filename: %s",
|
||||
gmshInputFile.c_str());
|
||||
rInfo("Output filename: %s",
|
||||
hdf5fedOutputFile.c_str());
|
||||
// Check it --force is set.
|
||||
// --force writes the output file, if the file already exists.
|
||||
if (varMap.count("force"))
|
||||
writeFileForce = true;
|
||||
else
|
||||
writeFileForce = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
rError("You have insert wrong options.");
|
||||
rError("For details use: --help.");
|
||||
return ERRORCODE;
|
||||
}
|
||||
}
|
||||
catch(exception& error)
|
||||
{
|
||||
rError("Error: %d",error.what());
|
||||
return ERRORCODE;
|
||||
}
|
||||
|
||||
//==========================//
|
||||
// Start with the main work //
|
||||
//==========================//
|
||||
//---------------------------------------//
|
||||
// Variables for the data form gmsh file //
|
||||
//---------------------------------------//
|
||||
// Variable for the gmsh nodes.
|
||||
std::vector<vector<double> > gmshNodes;
|
||||
gmshNodes.clear();
|
||||
// Vector for the gmshs nodes index.
|
||||
std::vector<unsigned int> gmshNodesIndex;
|
||||
gmshNodesIndex.clear();
|
||||
// Vector for the gmshs tetrahedrons.
|
||||
std::vector<std::vector<unsigned int> > gmshTetrahedron;
|
||||
gmshTetrahedron.clear();
|
||||
// Vector for the gmshs tetrahedrons.
|
||||
std::vector<std::vector<unsigned int> > gmshTetrahedronTag;
|
||||
gmshTetrahedronTag.clear();
|
||||
|
||||
// Make an instance of the vtk class.
|
||||
gmsh gmshInFile;
|
||||
|
||||
// Set the file name of the input file
|
||||
gmshInFile.gmshFileName(gmshInputFile);
|
||||
|
||||
// Open the gmsh mesh file, write the content to a string and close the
|
||||
// file.
|
||||
gmshInFile.gmshOpen();
|
||||
|
||||
// Parse the gmsh mesh file.
|
||||
gmshInFile.gmshParseFile(&gmshInFile);
|
||||
|
||||
// Get a vector with all node coordinates from the gmsh file.
|
||||
gmshNodes = gmshInFile.gmshNode();
|
||||
|
||||
// Put all H5Fed funktions in here.
|
||||
#ifdef HAVE_HDF5
|
||||
// Create H5Fed class instance.
|
||||
H5Fed::H5Fed h5fedFile;
|
||||
|
||||
// Open H5Fed file for writing. Filename and file write access comes
|
||||
// from command line parameters.
|
||||
if (writeFileForce == false)
|
||||
h5fedFile.open(hdf5fedOutputFile,FILE_CREATE);
|
||||
else
|
||||
h5fedFile.open(hdf5fedOutputFile,FILE_CREATE_FORCE);
|
||||
|
||||
// Create the group hierarchie in the hdf5fed file.
|
||||
h5fedFile.createGroupHierarchie();
|
||||
|
||||
// Get the gmsh node index vector
|
||||
gmshNodesIndex = gmshInFile.gmshNodeNumber();
|
||||
|
||||
// The gmsh node index has gaps and is not consecutive.
|
||||
// So we activate the automatic index mapping from the h5fed api.
|
||||
h5fedFile.beginIndexMapping(&gmshNodesIndex);
|
||||
|
||||
// Get a vector with all node coordinates from the gmsh file.
|
||||
gmshNodes = gmshInFile.gmshNode();
|
||||
// Write the nodes to the h5fed file.
|
||||
h5fedFile.coord3d(&gmshNodes);
|
||||
// Every node in h5fed file, so we can save memory.
|
||||
gmshNodes.clear();
|
||||
|
||||
//Get a vector with all tetrahedrons from gmsh file.
|
||||
gmshTetrahedron = gmshInFile.gmshTetrahedron();
|
||||
for(int varI = 0; varI<gmshTetrahedron.size(); varI++)
|
||||
{
|
||||
// rDebug("Elem: %d Nodes: %d; %d; %d; %d", varI, gmshTetrahedron[varI][0], gmshTetrahedron[varI][1], gmshTetrahedron[varI][2], gmshTetrahedron[varI][3]);
|
||||
}
|
||||
// Write the tetrahedrons to the h5fed file on the respective level.
|
||||
h5fedFile.tetrahedron(0,&gmshTetrahedron);
|
||||
// Every terahedron in h5fed file, so we can save memory.
|
||||
gmshTetrahedron.clear();
|
||||
|
||||
//Get a vector with all tetrahedrons from gmsh file.
|
||||
gmshTetrahedronTag = gmshInFile.gmshTetrahedronTag();
|
||||
for(int varI = 0; varI<gmshTetrahedronTag.size(); varI++)
|
||||
{
|
||||
// rDebug("Elem: %d Nodes: %d; %d", varI, gmshTetrahedronTag[varI][0], gmshTetrahedronTag[varI][1]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// End with the automatic index mapping because we have no further actcion
|
||||
// with an gmsh file index.
|
||||
h5fedFile.endIndexMapping();
|
||||
|
||||
// Close H5Fed file.
|
||||
h5fedFile.close();
|
||||
|
||||
|
||||
#endif // HAVE_HDF5
|
||||
/*
|
||||
// Write all vtkPoints_ to the screen.
|
||||
for (int i = 0; i<(gmshInFile.getVtkVecSize()); i++)
|
||||
{
|
||||
rDebug("%d vtkPoint x, y, z: %e %e %e",
|
||||
i, gmshInFile.getVtkVec(i,0),gmshInFile.getVtkVec(i,1),gmshInFile.getVtkVec(i,2));
|
||||
}
|
||||
*/
|
||||
/*
|
||||
//Write all vktCells_ with cell types and cell points on the screen.
|
||||
for (int i = 0;
|
||||
(i<(gmshInFile.getVtkCellTypesN())) && (i<(gmshInFile.getVtkCellsN()));
|
||||
i++)
|
||||
{
|
||||
rDebug("vtkCellType: %d", gmshInFile.getVtkCellType(i));
|
||||
for (int j = 0; j<(gmshInFile.getVtkCellPointN(i)); j++)
|
||||
{
|
||||
rDebug(" vtkPoint: %d", gmshInFile.getVtkCellPoint(i,j));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Write all vtk point datas on the screen.
|
||||
//rDebug("size: %d", gmshInFile.vtkVectorSize("vtkPointData_"));
|
||||
for (int i = 0;
|
||||
i<(gmshInFile.vtkVectorSize("vtkPointData_"));
|
||||
i++)
|
||||
{
|
||||
for (int j = 0; j<(gmshInFile.vtkVectorSize("vtkPointData_",i)); j++)
|
||||
{
|
||||
for(int k = 0; k<(gmshInFile.vtkVectorSize("vtkPointData_",i,j)); k++)
|
||||
rDebug("vtk point vector element i, j, k, value: %d %d %d %e",
|
||||
i,j,k,gmshInFile.vtkVector("vtkPointData_",i,j,k));
|
||||
}
|
||||
}
|
||||
|
||||
// Write all vtkPointsType_ to the screen.
|
||||
rDebug("size of vtkPointDataType_: %d", gmshInFile.vtkVectorSize("vtkPointDataType_"));
|
||||
for (int i = 0; i<(gmshInFile.vtkVectorSize("vtkPointDataType_")); i++)
|
||||
{
|
||||
rDebug("vtkPointDataType_ %s", gmshInFile.vtkVector("vtkPointDataType_",i).c_str());
|
||||
}
|
||||
// Write all vtkPointsName_ to the screen.
|
||||
rDebug("size of vtkPointDataName_: %d", gmshInFile.vtkVectorSize("vtkPointDataName_"));
|
||||
for (int i = 0; i<(gmshInFile.vtkVectorSize("vtkPointDataName_")); i++)
|
||||
{
|
||||
rDebug("vtkPointName_ %s", gmshInFile.vtkVector("vtkPointDataName_",i).c_str());
|
||||
}
|
||||
// Write all vtkPointsFormat_ to the screen.
|
||||
rDebug("size of vtkPointDataFormat_: %d", gmshInFile.vtkVectorSize("vtkPointDataFormat_"));
|
||||
for (int i = 0; i<(gmshInFile.vtkVectorSize("vtkPointDataFormat_")); i++)
|
||||
{
|
||||
rDebug("vtkPointFormat_ %s", (gmshInFile.vtkVector("vtkPointDataFormat_",i)).c_str());
|
||||
}
|
||||
|
||||
|
||||
// Write all vtk point datas on the screen.
|
||||
//rDebug("size: %d", gmshInFile.vtkVectorSize("vtkCellData_"));
|
||||
for (int i = 0;
|
||||
i<(gmshInFile.vtkVectorSize("vtkCellData_"));
|
||||
i++)
|
||||
{
|
||||
for (int j = 0; j<(gmshInFile.vtkVectorSize("vtkCellData_",i)); j++)
|
||||
{
|
||||
for(int k = 0; k<(gmshInFile.vtkVectorSize("vtkCellData_",i,j)); k++)
|
||||
rDebug("vtk cell vector element i, j, k, value: %d %d %d %e",
|
||||
i,j,k,gmshInFile.vtkVector("vtkCellData_",i,j,k));
|
||||
}
|
||||
}
|
||||
|
||||
// Write all vtkCellsType_ to the screen.
|
||||
rDebug("size of vtkCellDataType_: %d", gmshInFile.vtkVectorSize("vtkCellDataType_"));
|
||||
for (int i = 0; i<(gmshInFile.vtkVectorSize("vtkCellDataType_")); i++)
|
||||
{
|
||||
rDebug("vtkCellDataType_ %s", (gmshInFile.vtkVector("vtkCellDataType_",i)).c_str());
|
||||
}
|
||||
// Write all vtkCellsName_ to the screen.
|
||||
rDebug("size of vtkCellDataName_: %d", gmshInFile.vtkVectorSize("vtkCellDataName_"));
|
||||
for (int i = 0; i<(gmshInFile.vtkVectorSize("vtkCellDataName_")); i++)
|
||||
{
|
||||
rDebug("vtkCellDataName_ %s", (gmshInFile.vtkVector("vtkCellDataName_",i)).c_str());
|
||||
}
|
||||
// Write all vtkCellsFormat_ to the screen.
|
||||
rDebug("size of vtkCellDataFormat_: %d", gmshInFile.vtkVectorSize("vtkCellDataFormat_"));
|
||||
for (int i = 0; i<(gmshInFile.vtkVectorSize("vtkCellDataFormat_")); i++)
|
||||
{
|
||||
rDebug("vtkCellDataFormat_ %s", (gmshInFile.vtkVector("vtkCellDataFormat_",i)).c_str());
|
||||
}
|
||||
*/
|
||||
|
||||
// cout <<"\n\n" <<gmshInFile.getUg PointsN()<< "\n\n";
|
||||
|
||||
// int i = gmshInFile.openVtk();
|
||||
//vtk* vtkPt;
|
||||
//vtkPt = &gmshInFile;
|
||||
//vtkPt->vtkVersion();
|
||||
|
||||
//gmshInFile.vtkVersion();
|
||||
|
||||
// This vector is used in loops to transport datas from vtk to ristream.
|
||||
vector<double> dataVector1;
|
||||
/*
|
||||
// Scaling factor for the vtk input data.
|
||||
double scale = 15.0;
|
||||
ristream rib;
|
||||
// Set the filname of the .rib file.
|
||||
rib.RibsFile(ribOutputFile);
|
||||
rib.openRibs();
|
||||
rib.RibsFormat(1024,768);
|
||||
rib.RibsLightSource("distantlight");
|
||||
rib.RibsProjection("perspective");
|
||||
//rib.RibsProjection("orthographic");
|
||||
|
||||
// Give the center or the rotation.
|
||||
double rotCenterX = 0.0;
|
||||
double rotCenterY = 0.0;
|
||||
double rotRadius = 1.6;
|
||||
double cameraPosX = sqrt(3.92); // Only the camera postion if nLoop = 1;
|
||||
double cameraPosY = 0;
|
||||
cameraPosX = 1; // Only the camera postion if nLoop = 1;
|
||||
cameraPosY = -1;
|
||||
|
||||
char filename[20];
|
||||
|
||||
const int nLoop = 1;
|
||||
for(int i = 0; i<nLoop; i++)
|
||||
{
|
||||
if (nLoop > 1)
|
||||
{
|
||||
cameraPosX = -rotRadius*cos(2*PI*i/(double)nLoop) + rotCenterX;
|
||||
cameraPosY = -rotRadius*sin(2*PI*i/(double)nLoop) + rotCenterY;
|
||||
}
|
||||
|
||||
rib.RibsFrameBegin();
|
||||
// Set the file name for the renderer output image.
|
||||
string tempstring = "";
|
||||
tempstring = "tests/movie_data/Hallo";
|
||||
//tempstring.append("%d.tiff",i);
|
||||
//tempstring.append((string)i);
|
||||
tempstring.append(".tiff");
|
||||
//sprintf ( tempchar ,"tests/movie_data/Hallo%d.tiff",i );
|
||||
// rib.RibsFrameFilename("");
|
||||
rib.RibsDisplay(frameName);
|
||||
|
||||
rDebug(tempstring.c_str());
|
||||
|
||||
// Camera Position and orientation:
|
||||
// The default camera postion is the world coordinate origin and it
|
||||
// looks in the -z-direction.
|
||||
|
||||
// The function RibsPlaceCamera set the position of the camera in world
|
||||
// coordinates and the point, where to look at in world coordinates.
|
||||
// To get a skew view, you can roll the camera.
|
||||
// This function must be called befor RibsWorldBegin!
|
||||
rib.RibsPlaceCamera(1.5*cameraPosX, 1.5*cameraPosY, 2.0, // position
|
||||
0.0, 0.0, 1.2, // look-at point
|
||||
0.0) ; // roll angle (in degree)
|
||||
|
||||
rib.RibsWorldBegin();
|
||||
rib.RibsSurface("plastic");
|
||||
rib.RibsCoordinateSystem();
|
||||
|
||||
//Write all vktCells_ with cell types and cell points on the screen.
|
||||
//rDebug("getVtkCellTypesN(): %d", gmshInFile.getVtkCellTypesN());
|
||||
for (int i = 0; i<(gmshInFile.getVtkCellTypesN()); i++)
|
||||
{
|
||||
// Look if there is a thetrahedron.
|
||||
if (gmshInFile.getVtkCellType(i) == 10)
|
||||
{
|
||||
// Clear the data structur to save the point cooridnates temporal.
|
||||
dataVector1.clear();
|
||||
|
||||
// Read the points of a tetrahedron.
|
||||
//rDebug("getVtkCellPointN(%d): %d", i, gmshInFile.getVtkCellPointN(i));
|
||||
for (int j = 0; j<(gmshInFile.getVtkCellPointN(i)); j++)
|
||||
{
|
||||
int tempInt = gmshInFile.getVtkCellPoint(i,j);
|
||||
dataVector1.push_back(gmshInFile.getVtkVec(tempInt, 0));
|
||||
dataVector1.push_back(gmshInFile.getVtkVec(tempInt, 1));
|
||||
dataVector1.push_back(gmshInFile.getVtkVec(tempInt, 2));
|
||||
//rDebug("vtkPoint: %d, %f %f %f", tempInt,
|
||||
// gmshInFile.getVtkVec(tempInt, 0),
|
||||
// gmshInFile.getVtkVec(tempInt, 1),
|
||||
// gmshInFile.getVtkVec(tempInt, 2));
|
||||
|
||||
}
|
||||
rib.RibsColor(0.0,0,1.0,1.0);
|
||||
rib.RibsTetrahedron(scale*dataVector1[0], scale*dataVector1[1], scale*dataVector1[2],
|
||||
scale*dataVector1[3], scale*dataVector1[4], scale*dataVector1[5],
|
||||
scale*dataVector1[6], scale*dataVector1[7], scale*dataVector1[8],
|
||||
scale*dataVector1[9], scale*dataVector1[10],scale*dataVector1[11],
|
||||
0.8);
|
||||
}
|
||||
}
|
||||
*/
|
||||
/*
|
||||
rib.RibsColor(1.0,0,0,0.6);
|
||||
rib.RibsTetrahedron(0.3, 0.3, 0.0,
|
||||
2.0, 0.3, 0.0,
|
||||
0.3, 2.0, 0.0,
|
||||
0.3, 0.3, 0.5,
|
||||
1.0);
|
||||
rib.RibsColor(0,1.0,0,0.7);
|
||||
rib.RibsTetrahedron(0.3, 0.3, 0.0,
|
||||
2.0, 0.3, 0.0,
|
||||
0.3, 2.0, 0.0,
|
||||
0.3, 0.3, 0.5,
|
||||
0.6);
|
||||
|
||||
rib.RibsColor(0.0,0,1.0,1.0);
|
||||
rib.RibsTetrahedron(0.3, 0.3, 0.0,
|
||||
2.0, 0.3, 0.0,
|
||||
0.3, 2.0, 0.0,
|
||||
0.3, 0.3, 0.5,
|
||||
0.3);
|
||||
*/
|
||||
// rib,RibsAxes();
|
||||
// rib.RibsVector(0,0,0,0.5);
|
||||
/*
|
||||
rib.RibsWorldEnd();
|
||||
rib.RibsFrameEnd();
|
||||
}
|
||||
rib.closeRibs();
|
||||
*/
|
||||
// return(0);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
// rights - 2006-, copyright benedikt oswald and patrick leidenberger, all rights reserved
|
||||
// project - phidias3d
|
||||
// file name - phidias3d.h
|
||||
// file type - c++ header file
|
||||
// objective - header file for the phidias3d visualization postprocessor
|
||||
// modified - 2006 jun 26, creation, benedikt oswald
|
||||
// modified - 2006 jun 28,
|
||||
// modified - 2006 jul 30, Add include for command line argument parser
|
||||
// with boost::program_options, pl.
|
||||
// inheritance -
|
||||
// feature - implements the phidias3d visualization postprocessor; the features
|
||||
// feature - will be (1) read VTK legacy formatted files (2) read HDF5/ELECTROMAGNETIC
|
||||
// feature - structures files (3) export VTK legacy formatted files (4) export
|
||||
// feature - data, both meshes and fields, throught the Renderman Interface
|
||||
// feature - routines.
|
||||
// required software -
|
||||
|
||||
|
||||
/* include standard header files */
|
||||
#include <cmath>
|
||||
#include <complex>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <iterator>
|
||||
#include <math.h>
|
||||
|
||||
/* Include the files for rlog. */
|
||||
#include <rlog/rlog.h>
|
||||
#include <rlog/rloglocation.h>
|
||||
#include <rlog/Error.h>
|
||||
#include <rlog/RLogChannel.h>
|
||||
#include <rlog/StdioNode.h>
|
||||
// Include this if you want to log the time.
|
||||
#include <rlog/RLogTime.h>
|
||||
|
||||
// Include the boost program program_options to parse the comand line
|
||||
// options.
|
||||
#include <boost/program_options.hpp>
|
||||
|
||||
|
||||
/* include standard proprietary header files */
|
||||
#include <nonsciconst.h>
|
||||
#include <physicomath.h>
|
||||
//#include <ristream.h>
|
||||
#include <gmsh.hh>
|
||||
|
||||
// Include the Hdf5FiniteElementData API.
|
||||
#ifdef HAVE_HDF5
|
||||
// Include the Hdf5FiniteElementData API.
|
||||
#include <h5fed.hh>
|
||||
// Include h5fed specific constants.
|
||||
#include <h5fedconst.hh>
|
||||
#else
|
||||
#warning No hdf5 lib found!!
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifndef PHIDIAS3D_H_
|
||||
#define PHIDIAS3D_H_
|
||||
|
||||
using namespace physicomath;
|
||||
using namespace nonsciconst;
|
||||
using namespace gmshtohdf5fed;
|
||||
|
||||
|
||||
|
||||
#endif /*PHIDIAS3D_H_*/
|
||||
@@ -0,0 +1,26 @@
|
||||
## Makefile.am -- process this file with automake to produce Makefile.in
|
||||
##
|
||||
## authors - benedikt oswald and patrick leidenberger
|
||||
## modified - 2006 aug 21, patrick leidenberger, creation
|
||||
## modified - 2006 aug 23, pl, adaped to changed directory structure.
|
||||
## modified - 2006 aug 25, pl, adaped to changed directory structure.
|
||||
#
|
||||
## objective - automake input file for the gmsh directory
|
||||
## project - gmsh2h5fed
|
||||
|
||||
noinst_PROGRAMS = gmsh2h5fed
|
||||
|
||||
gmsh2h5fed_SOURCES = gmsh2h5fed.cc
|
||||
gmsh2h5fed_DEPENDENCIES = ../libsrc/stdincl/nonsciconst.h \
|
||||
../libsrc/stdincl/physicomath.h \
|
||||
../libsrc/gmsh/gmsh.hh \
|
||||
../libsrc/gmsh/gmsh.cc \
|
||||
../libsrc/gmsh/gmshconst.hh \
|
||||
../libsrc/gmsh/gmshgrammar.hh \
|
||||
../libsrc/gmsh/gmshsemanticaction.hh \
|
||||
../libsrc/h5fed/h5fed.hh \
|
||||
../libsrc/h5fed/h5fed.cc
|
||||
|
||||
gmsh2h5fed_LDADD = @GMSH2H5FED_LIBS@
|
||||
|
||||
#AM_CPPFLAGS = @AM_CPPFLAGS@
|
||||
@@ -0,0 +1,10 @@
|
||||
libtoolize -f && \
|
||||
aclocal && \
|
||||
autoconf && \
|
||||
autoheader && \
|
||||
automake --add-missing && \
|
||||
CC='mpicc' F9X='mpif90' CXX='mpiCC' ./configure --with-rlog=$HOME/extlib/rlog-1.3.7 --with-boost='' --with-hdf5=$HOME/extlib/hdf5-1.6.5 &&\
|
||||
make clean && \
|
||||
make all
|
||||
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
## Process this file with autoconf to produce a configure script
|
||||
##
|
||||
## author - benedikt oswald and patrick leidenberger
|
||||
## modified - 2006 aug 21, pl, creation.
|
||||
## modified - 2006 aug 24, pl, add h5fed path.
|
||||
##
|
||||
## to do : The rlog lib needs a -DRLOG_COMPONENT="some name", I don't know
|
||||
## how tho do this so that the quotation marks are in the output
|
||||
## stream as well, pl, 2006 jul 04.
|
||||
##
|
||||
## objective - develop input file for GNU autotools/configure
|
||||
## project - H5Fed
|
||||
##
|
||||
|
||||
AC_PREREQ(2.59)
|
||||
AC_COPYRIGHT([This configure script is copyright by Benedikt Oswald and Patrick Leidenberger, 2006])
|
||||
|
||||
AC_INIT([gmshtohdf5fed], [1.0], [in case of problems mail to: benedikt.oswald@psi.ch or patrick.leidenberger@psi.ch])
|
||||
|
||||
# library creation
|
||||
AC_PROG_LIBTOOL
|
||||
|
||||
# standard macros
|
||||
AC_CONFIG_AUX_DIR(./)
|
||||
AM_INIT_AUTOMAKE
|
||||
AC_CONFIG_HEADER([./config.h:./config.in])
|
||||
|
||||
# set cppflags to zero
|
||||
CPPFLAGS=""
|
||||
CFFLAGS=""
|
||||
CXXFLAGS=""
|
||||
|
||||
# provide include directories
|
||||
AC_SUBST([AM_CPPFLAGS], '-I$(top_srcdir)/libsrc/stdincl -I$(top_srcdir)/libsrc/gmsh -I$(top_srcdir)/libsrc/h5fed')
|
||||
AC_SUBST([GMSH2H5FED_LIBS],'$(top_srcdir)/libsrc/gmsh/libgmsh.la $(top_srcdir)/libsrc/h5fed/libh5fed.la')
|
||||
|
||||
# Make available external libraries
|
||||
AC_ARG_WITH(boost,
|
||||
AC_HELP_STRING([--with-boost=PREFIX],
|
||||
[prefix where the Boost libraries and include files are to be found]),
|
||||
[BOOST_PREFIX=$withval
|
||||
LDFLAGS="-lz -lboost_program_options "])
|
||||
|
||||
AC_ARG_WITH(rlog,
|
||||
AC_HELP_STRING([--with-rlog=PREFIX],
|
||||
[prefix where the rlog libraries and include files are to be found]),
|
||||
[RLOG_PREFIX=$withval
|
||||
CPPFLAGS="-I"$RLOG_PREFIX"/include "${CPPFLAGS}
|
||||
LDFLAGS=$RLOG_PREFIX"/lib/librlog.la "${LDFLAGS}])
|
||||
|
||||
AC_ARG_ENABLE(rlog-debug,
|
||||
AC_HELP_STRING([--disable-rlog-debug],
|
||||
[disable the debug output channel of rlog]),
|
||||
[],
|
||||
[CFFLAGS="-DUSE_RLOG_DEBUG_CHANNEL "${CFFLAGS}
|
||||
CXXFLAGS="-DUSE_RLOG_DEBUG_CHANNEL "${CXXFLAGS}])
|
||||
|
||||
AC_ARG_ENABLE(rlog-error,
|
||||
AC_HELP_STRING([--disable-rlog-error],
|
||||
[disable the error output channel of rlog]),
|
||||
[],
|
||||
[CFFLAGS="-DUSE_RLOG_ERROR_CHANNEL "${CFFLAGS}
|
||||
CXXFLAGS="-DUSE_RLOG_ERROR_CHANNEL "${CXXFLAGS}])
|
||||
|
||||
AC_ARG_ENABLE(rlog-info,
|
||||
AC_HELP_STRING([--disable-rlog-info],
|
||||
[disable the info output channel of rlog]),
|
||||
[],
|
||||
[CFFLAGS="-DUSE_RLOG_INFO_CHANNEL "${CFFLAGS}
|
||||
CXXFLAGS="-DUSE_RLOG_INFO_CHANNEL "${CXXFLAGS}])
|
||||
|
||||
AC_ARG_ENABLE(rlog-warning,
|
||||
AC_HELP_STRING([--disable-rlog-warning],
|
||||
[disable the warning output channel of rlog]),
|
||||
[],
|
||||
[CFFLAGS="-DUSE_RLOG_WARNING_CHANNEL "${CFFLAGS}
|
||||
CXXFLAGS="-DUSE_RLOG_WARNING_CHANNEL "${CXXFLAGS}])
|
||||
|
||||
AC_ARG_WITH(hdf5,
|
||||
AC_HELP_STRING([--with-hdf5=PREFIX],
|
||||
[prefix to hdf5 libraries and include files]),
|
||||
[HDF5_PREFIX=$withval
|
||||
CPPFLAGS="-DHAVE_HDF5 -I"$HDF5_PREFIX"/include "${CPPFLAGS}
|
||||
LDFLAGS="-L"$HDF5_PREFIX"/lib -lhdf5 "${LDFLAGS}])
|
||||
# LDFLAGS=$HDF5_PREFIX"/lib/libhdf5.la "${LDFLAGS}])
|
||||
|
||||
|
||||
# Set C/C++ compiler flags.
|
||||
CPPFLAGS=${CPPFLAGS}
|
||||
CFFLAGS="-g3 "${CFFLAGS}
|
||||
CXXFLAGS="-g3 "${CXXFLAGS}
|
||||
|
||||
AM_INIT_AUTOMAKE([1.9 foreign])
|
||||
|
||||
AC_PROG_CC
|
||||
AC_PROG_MAKE_SET
|
||||
AC_PROG_INSTALL([install])
|
||||
|
||||
AC_CONFIG_FILES([makefile
|
||||
applications/makefile
|
||||
libsrc/makefile
|
||||
libsrc/gmsh/makefile
|
||||
libsrc/h5fed/makefile])
|
||||
|
||||
|
||||
AC_OUTPUT
|
||||
@@ -0,0 +1,114 @@
|
||||
// rights - 2002-2005, benedikt oswald,
|
||||
// project - aq
|
||||
// file name - cube0.geo
|
||||
// file type - GMSH script file
|
||||
// objective - model cube fundamental cube
|
||||
// modified - 2005 jan 25, benedikt oswald, creation
|
||||
// modified - 2005 jan 25, benedikt oswald, added background hexahedron, subsurface hexahedron
|
||||
// modified - 2005 feb 01, benedikt oswald, adapted to the simple.geo problem
|
||||
// modified - 2005 mar 08, benedikt oswald, adapted to the cube in cube geometry
|
||||
// modified - 2005 mar 22, benedikt oswald, adapted to model fundamental cube
|
||||
// inheritance -
|
||||
// feature - models fundamental cube, used for benchmark calculations of a Hertzian dipole
|
||||
// feature - radiating into free space; the model uses standard physical domain tags;
|
||||
|
||||
|
||||
// 1 modeling constants
|
||||
|
||||
lcl1=0.50; // characteristic length in fractions of lambda@1 GHz for air domain
|
||||
lcl2=0.50; // characteristic length in fractions of lambda@1 GHz for air domain
|
||||
|
||||
lambda=0.30; // wavelength of electromagntic wave at a frequency of 1 GHz
|
||||
|
||||
lx=2.0; // x dim of computational domain
|
||||
ly=2.0; // y dim of computational domain
|
||||
lz=2.0; // z dim of computational domain
|
||||
|
||||
cx=0.5*lx; // calculate center of computational domain
|
||||
cy=0.5*ly; // calculate center of computational domain
|
||||
cz=0.5*lz; // calculate center of computational domain
|
||||
|
||||
|
||||
// 1.2 Define physical material domains
|
||||
|
||||
vacuum=609; // physical entity vacuum
|
||||
air=709; // physical entity air
|
||||
subsurface=809; // physical entity subsurface
|
||||
pml=1301; // physical entity pml material
|
||||
icelens=4001; // physical entity icelens
|
||||
vacuum_background_bnd=12701; // boundary to background, i.e. vacuum
|
||||
interelement_bnd=12702; // interior boundary, separating different material domains
|
||||
|
||||
|
||||
|
||||
// 2 Define cubes
|
||||
// 2.1.1 Define points of cube
|
||||
|
||||
p0=newp; Point(p0) = {0.0, 0.0, 0.0, lambda * lcl1};
|
||||
p1=newp; Point(p1) = { lx, 0.0, 0.0, lambda * lcl1};
|
||||
p2=newp; Point(p2) = { lx, ly, 0.0, lambda * lcl1};
|
||||
p3=newp; Point(p3) = {0.0, ly, 0.0, lambda * lcl1};
|
||||
p4=newp; Point(p4) = {0.0, 0.0, lz, lambda * lcl1};
|
||||
p5=newp; Point(p5) = { lx, 0.0, lz, lambda * lcl1};
|
||||
p6=newp; Point(p6) = { lx, ly, lz, lambda * lcl1};
|
||||
p7=newp; Point(p7) = {0.0, ly, lz, lambda * lcl1};
|
||||
|
||||
// 2.1.3 Define lines of cube
|
||||
|
||||
// lower xy plane
|
||||
li0=newl; Line(li0) = {p0,p1};
|
||||
li1=newl; Line(li1) = {p1,p2};
|
||||
li2=newl; Line(li2) = {p2,p3};
|
||||
li3=newl; Line(li3) = {p3,p0};
|
||||
|
||||
// upper xy plane
|
||||
li4=newl; Line(li4) = {p4,p5};
|
||||
li5=newl; Line(li5) = {p5,p6};
|
||||
li6=newl; Line(li6) = {p6,p7};
|
||||
li7=newl; Line(li7) = {p7,p4};
|
||||
|
||||
// vertical lines
|
||||
li8=newl; Line(li8) = {p0,p4};
|
||||
li9=newl; Line(li9) = {p1,p5};
|
||||
li10=newl; Line(li10) = {p2,p6};
|
||||
li11=newl; Line(li11) = {p3,p7};
|
||||
|
||||
|
||||
// 2.1.5 Define line 6 line loops for the 6 faces of the cube
|
||||
|
||||
lloop0= newreg; Line Loop(lloop0) = { li0, li1, li2, li3};
|
||||
lloop1= newreg; Line Loop(lloop1) = { li4, li5, li6, li7};
|
||||
|
||||
lloop2= newreg; Line Loop(lloop2) = { li0, li9, -li4, -li8 };
|
||||
lloop3= newreg; Line Loop(lloop3) = { li1, li10, -li5, -li9};
|
||||
|
||||
lloop4= newreg; Line Loop(lloop4) = { li2, li11, -li6, -li10};
|
||||
lloop5= newreg; Line Loop(lloop5) = { li3, li8, -li7, -li11};
|
||||
|
||||
|
||||
// 2.1.7 define plane surfaces for the cube
|
||||
|
||||
s0=news; Plane Surface(s0) = {lloop0};
|
||||
s1=news; Plane Surface(s1) = {lloop1};
|
||||
s2=news; Plane Surface(s2) = {lloop2};
|
||||
s3=news; Plane Surface(s3) = {lloop3};
|
||||
s4=news; Plane Surface(s4) = {lloop4};
|
||||
s5=news; Plane Surface(s5) = {lloop5};
|
||||
|
||||
|
||||
// 2.1.9 Define surface loops required for volume definition of the cube
|
||||
|
||||
sloop0=newreg; Surface Loop(sloop0) ={s0,s1,s2,s3,s4,s5};
|
||||
|
||||
// 2.1.10 Define volume of the cube
|
||||
|
||||
v0=newv; Volume(v0) = {sloop0};
|
||||
|
||||
// 3.0 define physical entitites
|
||||
|
||||
Physical Point(vacuum_background_bnd) = {p0:p7};
|
||||
Physical Line(vacuum_background_bnd) = {li0:li11};
|
||||
Physical Surface(vacuum_background_bnd) = {s0:s5};
|
||||
Physical Volume(air) = {v0};
|
||||
|
||||
|
||||
@@ -0,0 +1,206 @@
|
||||
// rights - 2002-2005, benedikt oswald,
|
||||
// project - aq
|
||||
// file name - cubeincube.geo
|
||||
// file type - GMSH script file
|
||||
// objective - model cube in a cube mesh, useful for PML booundary conditions
|
||||
// modified - 2005 jan 25, benedikt oswald, creation
|
||||
// modified - 2005 jan 25, benedikt oswald, added background hexahedron, subsurface hexahedron
|
||||
// modified - 2005 feb 01, benedikt oswald, adapted to the simple.geo problem
|
||||
// modified - 2005 mar 08, benedikt oswald, adapted to the cube in cube geometry
|
||||
// inheritance -
|
||||
// feature - models a cube in a cube mesh, useful for PML booundary conditions;
|
||||
// feature - the PML boundary model is based on a 3D region with special electromagnetic
|
||||
// feature - material properties which guarantee, in theory, perfect absorption of incident
|
||||
// feature - electromagnetic waves independent of the angle between the wave vector
|
||||
// feature - and the boundary; in order to model the PML material domain a separate mesh
|
||||
// feature - region is created so that there is a clean boundary between the PML and
|
||||
// feature - and the air region.
|
||||
|
||||
|
||||
// 1 modeling constants
|
||||
|
||||
lcair=0.90; // characteristic length in fractions of lambda@1 GHz for air domain
|
||||
lcpml=0.70; // characteristic length in fractions of lambda@1 GHz for PML region
|
||||
lambda=0.30; // wavelength of electromagntic wave at a frequency of 1 GHz
|
||||
|
||||
lx=1.0; // x dim of computational domain
|
||||
ly=1.0; // y dim of computational domain
|
||||
lz=1.0; // z dim of computational domain
|
||||
|
||||
cx=0.5*lx; // calculate center of computational domain
|
||||
cy=0.5*ly; // calculate center of computational domain
|
||||
cz=0.5*lz; // calculate center of computational domain
|
||||
|
||||
lpmlxl=0.1; // thickness of PML region
|
||||
lpmlxh=0.1; // thickness of PML region
|
||||
|
||||
lpmlyl=0.1; // thickness of PML region
|
||||
lpmlyh=0.1; // thickness of PML region
|
||||
|
||||
lpmlzl=0.1; // thickness of PML region
|
||||
lpmlzh=0.1; // thickness of PML region
|
||||
|
||||
xminic=lpmlxl; // x min of inner cube
|
||||
xmaxic=lx-lpmlxh; // x max of inner cube
|
||||
yminic=lpmlyl; // y min of inner cube
|
||||
ymaxic=ly-lpmlyh; // y max of inner cube
|
||||
zminic=lpmlzl; // z min of inner cube
|
||||
zmaxic=lz-lpmlzh; // z max of inner cube
|
||||
|
||||
// 1.2 Define physical material domains
|
||||
|
||||
vacuum=609; // physical entity vacuum
|
||||
air=709; // physical entity air
|
||||
pml=1301; // physical entity pml material
|
||||
icelens=4001; // physical entity icelens
|
||||
vacuum_background_bnd=12701; // boundary to background, i.e. vacuum
|
||||
interelement_bnd=12702; // interior boundary, separating different material domains
|
||||
|
||||
|
||||
|
||||
// 2 Define cubes
|
||||
// 2.1.1 Define points of outer cube
|
||||
|
||||
p0=newp; Point(p0) = {0.0, 0.0, 0.0, lambda * lcpml};
|
||||
p1=newp; Point(p1) = { lx, 0.0, 0.0, lambda * lcpml};
|
||||
p2=newp; Point(p2) = { lx, ly, 0.0, lambda * lcpml};
|
||||
p3=newp; Point(p3) = {0.0, ly, 0.0, lambda * lcpml};
|
||||
p4=newp; Point(p4) = {0.0, 0.0, lz, lambda * lcpml};
|
||||
p5=newp; Point(p5) = { lx, 0.0, lz, lambda * lcpml};
|
||||
p6=newp; Point(p6) = { lx, ly, lz, lambda * lcpml};
|
||||
p7=newp; Point(p7) = {0.0, ly, lz, lambda * lcpml};
|
||||
|
||||
// 2.1.2 Define points of inner cube
|
||||
|
||||
p100=newp; Point(p100) = {xminic, yminic, zminic, lambda * lcair};
|
||||
p101=newp; Point(p101) = {xmaxic, yminic, zminic, lambda * lcair};
|
||||
p102=newp; Point(p102) = {xmaxic, ymaxic, zminic, lambda * lcair};
|
||||
p103=newp; Point(p103) = {xminic, ymaxic, zminic, lambda * lcair};
|
||||
|
||||
p104=newp; Point(p104) = {xminic, yminic, zmaxic, lambda * lcair};
|
||||
p105=newp; Point(p105) = {xmaxic, yminic, zmaxic, lambda * lcair};
|
||||
p106=newp; Point(p106) = {xmaxic, ymaxic, zmaxic, lambda * lcair};
|
||||
p107=newp; Point(p107) = {xminic, ymaxic, zmaxic, lambda * lcair};
|
||||
|
||||
|
||||
// 2.1.3 Define lines of outer cube
|
||||
|
||||
// lower xy plane
|
||||
li0=newl; Line(li0) = {p0,p1};
|
||||
li1=newl; Line(li1) = {p1,p2};
|
||||
li2=newl; Line(li2) = {p2,p3};
|
||||
li3=newl; Line(li3) = {p3,p0};
|
||||
|
||||
// upper xy plane
|
||||
li4=newl; Line(li4) = {p4,p5};
|
||||
li5=newl; Line(li5) = {p5,p6};
|
||||
li6=newl; Line(li6) = {p6,p7};
|
||||
li7=newl; Line(li7) = {p7,p4};
|
||||
|
||||
// vertical lines
|
||||
li8=newl; Line(li8) = {p0,p4};
|
||||
li9=newl; Line(li9) = {p1,p5};
|
||||
li10=newl; Line(li10) = {p2,p6};
|
||||
li11=newl; Line(li11) = {p3,p7};
|
||||
|
||||
// 2.1.4 Define lines of outer cube
|
||||
|
||||
// lower xy plane
|
||||
li100=newl; Line(li100) = {p100,p101};
|
||||
li101=newl; Line(li101) = {p101,p102};
|
||||
li102=newl; Line(li102) = {p102,p103};
|
||||
li103=newl; Line(li103) = {p103,p100};
|
||||
|
||||
// upper xy plane
|
||||
li104=newl; Line(li104) = {p104,p105};
|
||||
li105=newl; Line(li105) = {p105,p106};
|
||||
li106=newl; Line(li106) = {p106,p107};
|
||||
li107=newl; Line(li107) = {p107,p104};
|
||||
|
||||
// vertical lines
|
||||
li108=newl; Line(li108) = {p100,p104};
|
||||
li109=newl; Line(li109) = {p101,p105};
|
||||
li110=newl; Line(li110) = {p102,p106};
|
||||
li111=newl; Line(li111) = {p103,p107};
|
||||
|
||||
|
||||
// 2.1.5 Define line 6 line loops for the 6 faces of outer cube
|
||||
|
||||
lloop0= newreg; Line Loop(lloop0) = { li0, li1, li2, li3};
|
||||
lloop1= newreg; Line Loop(lloop1) = { li4, li5, li6, li7};
|
||||
|
||||
lloop2= newreg; Line Loop(lloop2) = { li0, li9, -li4, -li8 };
|
||||
lloop3= newreg; Line Loop(lloop3) = { li1, li10, -li5, -li9};
|
||||
|
||||
lloop4= newreg; Line Loop(lloop4) = { li2, li11, -li6, -li10};
|
||||
lloop5= newreg; Line Loop(lloop5) = { li3, li8, -li7, -li11};
|
||||
|
||||
|
||||
// 2.1.6 Define line 6 line loops for the 6 faces of inner cube
|
||||
|
||||
lloop100= newreg; Line Loop(lloop100) = { li100, li101, li102, li103};
|
||||
lloop101= newreg; Line Loop(lloop101) = { li104, li105, li106, li107};
|
||||
|
||||
lloop102= newreg; Line Loop(lloop102) = { li100, li109, -li104, -li108 };
|
||||
lloop103= newreg; Line Loop(lloop103) = { li101, li110, -li105, -li109};
|
||||
|
||||
lloop104= newreg; Line Loop(lloop104) = { li102, li111, -li106, -li110};
|
||||
lloop105= newreg; Line Loop(lloop105) = { li103, li108, -li107, -li111};
|
||||
|
||||
|
||||
// 2.1.7 define plane surfaces for outer cube
|
||||
|
||||
s0=news; Plane Surface(s0) = {lloop0};
|
||||
s1=news; Plane Surface(s1) = {lloop1};
|
||||
s2=news; Plane Surface(s2) = {lloop2};
|
||||
s3=news; Plane Surface(s3) = {lloop3};
|
||||
s4=news; Plane Surface(s4) = {lloop4};
|
||||
s5=news; Plane Surface(s5) = {lloop5};
|
||||
|
||||
// 2.1.8 define plane surfaces for inner cube
|
||||
|
||||
s100=news; Plane Surface(s100) = {lloop100};
|
||||
s101=news; Plane Surface(s101) = {lloop101};
|
||||
s102=news; Plane Surface(s102) = {lloop102};
|
||||
s103=news; Plane Surface(s103) = {lloop103};
|
||||
s104=news; Plane Surface(s104) = {lloop104};
|
||||
s105=news; Plane Surface(s105) = {lloop105};
|
||||
|
||||
|
||||
// 2.1.9 Define surface loops required for volume definition of outer cube
|
||||
|
||||
sloop0=newreg; Surface Loop(sloop0) ={s0,s1,s2,s3,s4,s5};
|
||||
|
||||
|
||||
// 2.1.9 Define surface loops required for volume definition of inner cube
|
||||
|
||||
sloop100=newreg; Surface Loop(sloop100) ={s100,s101,s102,s103,s104,s105};
|
||||
|
||||
|
||||
// 2.1.10 Define volume of outer cube
|
||||
|
||||
v0=newv; Volume(v0) = {sloop0,sloop100};
|
||||
|
||||
|
||||
// 2.1.11 Define volume of inner cube
|
||||
|
||||
v100=newv; Volume(v100) = {sloop100};
|
||||
|
||||
|
||||
// 3.0 define physical entitites
|
||||
|
||||
Physical Point(vacuum_background_bnd) = {p0,p1,p2,p3,p4,p5,p6,p7};
|
||||
Physical Line(vacuum_background_bnd) = {li0,li1,li2,li3,li4,li5,li6,li7,li8,li9,li10,li11};
|
||||
//Physical Line Loop(vacuum_background_bnd) = {lloop0,lloop1,lloop2,lloop3,lloop4,lloop5};
|
||||
Physical Surface(vacuum_background_bnd) = {s0,s1,s2,s3,s4,s5};
|
||||
//Physical Surface Loop(vacuum_background_bnd) = {sloop0};
|
||||
Physical Volume(pml) = {v0};
|
||||
|
||||
Physical Point(interelement_bnd) = {p100,p101,p102,p103,p104,p105,p106,p107};
|
||||
Physical Line(interelement_bnd) = {li100,li101,li102,li103,li104,li105,li106,li107,li108,li109,li110,li111};
|
||||
//Physical Line Loop(interelement_bnd) = {lloop100,lloop101,lloop102,lloop103,lloop104,lloop105};
|
||||
Physical Surface(interelement_bnd) = {s100,s101,s102,s103,s104,s105};
|
||||
//Physical Surface Loop(interelement_bnd) = {sloop100};
|
||||
Physical Volume(air) = {v100};
|
||||
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
// rights - 2002-2005, benedikt oswald,
|
||||
// project - aq
|
||||
// file name - sphere.geo
|
||||
// file type - GMSH script file
|
||||
// objective - model cube in a cube, 2 spherical objects mesh to investigate sub lambda resolution capability
|
||||
// modified - 2005 jan 25, benedikt oswald, creation
|
||||
// modified - 2005 jan 25, benedikt oswald, added background hexahedron, subsurface hexahedron
|
||||
// modified - 2005 feb 01, benedikt oswald, adapted to the simple.geo problem
|
||||
// modified - 2005 mar 08, benedikt oswald, adapted to the cube in cube geometry
|
||||
// modified - 2005 mar 09, benedikt oswald, adapted to cube in cube and spherical particle configuration
|
||||
// modified - 2005 mar 11, benedikt oswald, adapted to investigation of sub-lambda resolution capability
|
||||
// modified - 2005 mar 22, benedikt oswald, adapted to be based on reference background medium subLambda310.geo
|
||||
// modified - 2005 mar 23, benedikt oswald, adapted to model a microresonator geometry
|
||||
// modified - 2005 mar 29, benedikt oswald, adapted to model a high quality sphere for a Hertzian dipole benchmark
|
||||
// modified - 2005
|
||||
// inheritance -
|
||||
// feature - models a microresonator geometry; a dielectric sphere within an air sphere; the dielectric
|
||||
// feature - sphere will be excited by a Hertzian dipole in the vicinity of the sphere;
|
||||
// feature -
|
||||
|
||||
|
||||
// 1 modeling constants
|
||||
|
||||
lcair=1.20; // characteristic length in fractions of lambda@1 GHz for air domain
|
||||
lcsubsurface=1.20; // characteristic length in fractions of lambda@1 GHz for subsurface domain
|
||||
lcil1=0.80; // characteristic length in fractions of lambda@1 GHz for icelens region
|
||||
lcil2=0.40; // characteristic length in fractions of lambda@1 GHz for icelens 2 region
|
||||
lambda=3.0e-1; // wavelength of electromagntic wave at a frequency of 1 GHz
|
||||
|
||||
lx=3.0; // x dim of computational domain
|
||||
ly=3.0; // y dim of computational domain
|
||||
lz=2.0; // z dim of computational domain
|
||||
|
||||
cx=0.5*lx; // calculate center of computational domain
|
||||
cy=0.5*ly; // calculate center of computational domain
|
||||
cz=0.5*lz; // calculate center of computational domain
|
||||
|
||||
dxl=0.3; // thickness of PML region
|
||||
dxh=0.3; // thickness of PML region
|
||||
|
||||
dyl=0.3; // thickness of PML region
|
||||
dyh=0.3; // thickness of PML region
|
||||
|
||||
dzl=0.30; // thickness of PML region
|
||||
dzh=0.60; // thickness of PML region
|
||||
|
||||
xminic=dxl; // x min of inner cube
|
||||
xmaxic=lx-dxh; // x max of inner cube
|
||||
yminic=dyl; // y min of inner cube
|
||||
ymaxic=ly-dyh; // y max of inner cube
|
||||
zminic=dzl; // z min of inner cube
|
||||
zmaxic=lz-dzh; // z max of inner cube
|
||||
|
||||
dsx=0.10; // x distance separating the two spherical scatterers
|
||||
dsy=0.00; // y distance separating the two spherical scatterers
|
||||
dsz=0.00; // z distance separating the two spherical scatterers
|
||||
|
||||
r1=1.0; // radius of air sphere
|
||||
ilcx=0.0; // x center of air sphere
|
||||
ilcy=0.0; // y center of
|
||||
ilcz=0.0; // z center of
|
||||
|
||||
r2=2.0e-6; // radius of dielectric sphere
|
||||
il2cx=0.0; // x center of dielectric sphere
|
||||
il2cy=0.0; // y center of dielectric sphere
|
||||
il2cz=0.0; // z center of dielectric sphere
|
||||
|
||||
|
||||
// 1.2 Define physical material domains
|
||||
|
||||
vacuum=609; // physical entity vacuum
|
||||
air=709; // physical entity air
|
||||
subsurface=809; // physical entity subsurface
|
||||
pml=1301; // physical entity pml material
|
||||
icelens1=4001; // physical entity icelens
|
||||
icelens2=4003; // physical entity icelens 2
|
||||
dielsphere=4005; // physical entity dielectric sphere
|
||||
vacuum_background_bnd=12701; // boundary to background, i.e. vacuum
|
||||
air_soil_bnd=12702; // interior boundary, separating air and subsurface material
|
||||
soil_icelens1_bnd=12703; // interior boundary, separating background subsurface from icelens particle
|
||||
soil_icelens2_bnd=12705; // interior boundary, separating background subsurface from icelens 2 particle
|
||||
dielectric_sphere_bnd=12707; // interior boundary, separting air background from dielectric sphere
|
||||
|
||||
|
||||
// 2.2.1 Define air sphere 1
|
||||
|
||||
ilp1 = newp; Point(ilp1) = {ilcx, ilcy, ilcz, lcil1 * lambda} ;
|
||||
ilp2 = newp; Point(ilp2) = {ilcx+r1, ilcy, ilcz, lcil1 * lambda} ;
|
||||
ilp3 = newp; Point(ilp3) = {ilcx, ilcy+r1, ilcz, lcil1 * lambda} ;
|
||||
ilp4 = newp; Point(ilp4) = {ilcx, ilcy, ilcz+r1, lcil1 * lambda} ;
|
||||
ilp5 = newp; Point(ilp5) = {ilcx-r1, ilcy, ilcz, lcil1 * lambda} ;
|
||||
ilp6 = newp; Point(ilp6) = {ilcx, ilcy-r1, ilcz, lcil1 * lambda} ;
|
||||
ilp7 = newp; Point(ilp7) = {ilcx, ilcy, ilcz-r1, lcil1 * lambda} ;
|
||||
|
||||
ilc1 = newreg; Circle(ilc1) = {ilp2,ilp1,ilp7};
|
||||
ilc2 = newreg; Circle(ilc2) = {ilp7,ilp1,ilp5};
|
||||
ilc3 = newreg; Circle(ilc3) = {ilp5,ilp1,ilp4};
|
||||
ilc4 = newreg; Circle(ilc4) = {ilp4,ilp1,ilp2};
|
||||
ilc5 = newreg; Circle(ilc5) = {ilp2,ilp1,ilp3};
|
||||
ilc6 = newreg; Circle(ilc6) = {ilp3,ilp1,ilp5};
|
||||
ilc7 = newreg; Circle(ilc7) = {ilp5,ilp1,ilp6};
|
||||
ilc8 = newreg; Circle(ilc8) = {ilp6,ilp1,ilp2};
|
||||
ilc9 = newreg; Circle(ilc9) = {ilp7,ilp1,ilp3};
|
||||
ilc10 = newreg; Circle(ilc10) = {ilp3,ilp1,ilp4};
|
||||
ilc11 = newreg; Circle(ilc11) = {ilp4,ilp1,ilp6};
|
||||
ilc12 = newreg; Circle(ilc12) = {ilp6,ilp1,ilp7};
|
||||
|
||||
// We need non-plane surfaces to define the spherical icelens:
|
||||
// here we use ruled surfaces, which can have 3 or 4
|
||||
// sides:
|
||||
|
||||
ill1 = newreg; Line Loop(ill1) = {ilc5,ilc10,ilc4}; ilruls1=newreg; Ruled Surface(ilruls1) = {ill1};
|
||||
ill2 = newreg; Line Loop(ill2) = {ilc9,-ilc5,ilc1}; ilruls2=newreg; Ruled Surface(ilruls2) = {ill2};
|
||||
ill3 = newreg; Line Loop(ill3) = {ilc12,-ilc8,-ilc1}; ilruls3=newreg; Ruled Surface(ilruls3) = {ill3};
|
||||
ill4 = newreg; Line Loop(ill4) = {ilc8,-ilc4,ilc11}; ilruls4=newreg; Ruled Surface(ilruls4) = {ill4};
|
||||
ill5 = newreg; Line Loop(ill5) = {-ilc10,ilc6,ilc3}; ilruls5=newreg; Ruled Surface(ilruls5) = {ill5};
|
||||
ill6 = newreg; Line Loop(ill6) = {-ilc11,-ilc3,ilc7}; ilruls6=newreg; Ruled Surface(ilruls6) = {ill6};
|
||||
ill7 = newreg; Line Loop(ill7) = {-ilc2,-ilc7,-ilc12};ilruls7=newreg; Ruled Surface(ilruls7) = {ill7};
|
||||
ill8 = newreg; Line Loop(ill8) = {-ilc6,-ilc9,ilc2}; ilruls8=newreg; Ruled Surface(ilruls8) = {ill8};
|
||||
|
||||
ilsloop0 = newreg;
|
||||
Surface Loop(ilsloop0) = {ill8+1,ill5+1,ill1+1,ill2+1,ill3+1,ill7+1,ill6+1,ill4+1};
|
||||
|
||||
|
||||
// 2.3.3 Define volume of air sphere
|
||||
|
||||
vil1=newv; Volume(vil1) = {ilsloop0};
|
||||
|
||||
|
||||
// 3.0 define physical entitites
|
||||
|
||||
Physical Point(vacuum_background_bnd) = {ilp1,ilp2,ilp3,ilp4,ilp5,ilp6,ilp7};
|
||||
Physical Surface(vacuum_background_bnd) = {ilruls1,ilruls2,ilruls3,ilruls4,ilruls5,ilruls6,ilruls7,ilruls8};
|
||||
Physical Volume(air) = {vil1};
|
||||
|
||||
@@ -0,0 +1,375 @@
|
||||
// rights - 2006-, copyright patrick leidenberger and benedikt oswald,
|
||||
// all rights reserved
|
||||
// project - gmsh2h5fed
|
||||
// file name - gmsh.cc
|
||||
// file type - c++ implementation file
|
||||
// objective - implement class for readind gmsh data files
|
||||
// modified - 2006 aug 24, creation, patrick leidenberger
|
||||
// modified - 2006 aug 26, pl, Access to private members.
|
||||
|
||||
#include "gmsh.hh"
|
||||
|
||||
using namespace boost::spirit;
|
||||
using namespace gmshtohdf5fed;
|
||||
using namespace rlog;
|
||||
using namespace std;
|
||||
|
||||
#include <boost/spirit/core.hpp>
|
||||
#include <boost/spirit/iterator/file_iterator.hpp>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "gmshgrammar.hh"
|
||||
#include "gmshsemanticaction.hh"
|
||||
|
||||
|
||||
gmsh::gmsh()
|
||||
{
|
||||
//rDebug("Enter vtk constructor.");
|
||||
// Clean the gmsh data structure.
|
||||
gmshNodes_.clear();
|
||||
gmshNodesNumber_.clear();
|
||||
gmshLine_.clear();
|
||||
gmshLineTag_.clear();
|
||||
gmshTriangle_.clear();
|
||||
gmshTriangleTag_.clear();
|
||||
gmshQuadrangle_.clear();
|
||||
gmshQuadrangleTag_.clear();
|
||||
gmshTetrahedron_.clear();
|
||||
gmshTetrahedronTag_.clear();
|
||||
gmshHexahedron_.clear();
|
||||
gmshHexahedronTag_.clear();
|
||||
gmshPrism_.clear();
|
||||
gmshPrismTag_.clear();
|
||||
gmshPyramid_.clear();
|
||||
gmshPyramidTag_.clear();
|
||||
gmsh2ndLineTag_.clear();
|
||||
gmsh2ndTriangle_.clear();
|
||||
gmsh2ndTriangleTag_.clear();
|
||||
gmsh2ndQuadrangle_.clear();
|
||||
gmsh2ndQuadrangleTag_.clear();
|
||||
gmsh2ndTetrahedron_.clear();
|
||||
gmsh2ndTetrahedronTag_.clear();
|
||||
gmsh2ndHexahedron_.clear();
|
||||
gmsh2ndHexahedronTag_.clear();
|
||||
gmsh2ndPrism_.clear();
|
||||
gmsh2ndPrismTag_.clear();
|
||||
gmsh2ndPyramid_.clear();
|
||||
gmsh2ndPyramidTag_.clear();
|
||||
gmshPoint_.clear();
|
||||
gmshPointTag_.clear();
|
||||
//rDebug("Leafe vtk constructor.");
|
||||
}
|
||||
|
||||
gmsh::~gmsh()
|
||||
{
|
||||
//rDebug("Enter vtk destructor.");
|
||||
//rDebug("Leafe vtk destructor.");
|
||||
}
|
||||
|
||||
|
||||
int gmsh::gmshFileName(char* fileName)
|
||||
{
|
||||
//rDebug("Enter fileName.");
|
||||
// Erase the fileName_.
|
||||
fileName_.erase();
|
||||
// Copy fileName in private string fileName_.
|
||||
gmshCpString(fileName, &fileName_);
|
||||
// rDebug("fileName_= %s",fileName_.c_str());
|
||||
//rDebug("Leafe fileName");
|
||||
return OKCODE;
|
||||
}
|
||||
int gmsh::gmshFileName(string fileName)
|
||||
{
|
||||
//rDebug("Enter fileName.");
|
||||
// Erase the fileName_.
|
||||
fileName_.erase();
|
||||
// Copy fileName in private string fileName_.
|
||||
fileName_ = fileName;
|
||||
// rDebug("fileName_= %s",fileName_.c_str());
|
||||
//rDebug("Leafe fileName");
|
||||
}
|
||||
|
||||
|
||||
int gmsh::gmshOpen(void)
|
||||
{
|
||||
//rDebug("Enter openVtk.");
|
||||
|
||||
// Open a stream to read the gmsh file in a string.
|
||||
ifstream inFile (fileName_.c_str());
|
||||
|
||||
// Check if file was opened corretly.
|
||||
if (! inFile)
|
||||
{
|
||||
rError("Cannot open file %s.", fileName_.c_str());
|
||||
return ERRORCODE;
|
||||
}
|
||||
else
|
||||
{
|
||||
rInfo("Open file %s", fileName_.c_str());
|
||||
|
||||
// Read file content into a string
|
||||
fileContent.erase();
|
||||
char chr;
|
||||
while (inFile.get(chr))
|
||||
{
|
||||
fileContent.append(1,chr);
|
||||
}
|
||||
rInfo(" File has been read.");
|
||||
//rDebug("Input file:\n%s",fileContent.c_str());
|
||||
// Close input file.
|
||||
inFile.close();
|
||||
rInfo(" File Closed.");
|
||||
return OKCODE;
|
||||
}
|
||||
//rDebug("Leave openVtk.");
|
||||
}
|
||||
|
||||
|
||||
int gmsh::gmshParseFile(gmsh* gmshSelf)
|
||||
{
|
||||
//rDebug("Enter parseFile.");
|
||||
|
||||
// Provide an instance of the grammar describing the gmsh file format.
|
||||
stack<long> gmshStack;
|
||||
// Our vtk parser.
|
||||
// Give the parser a pointer to the instance of the gmsh class. So we can
|
||||
// call member functions as semantic action.
|
||||
gmsh_g gmsh_p(gmshSelf);
|
||||
|
||||
// Call the parser.
|
||||
parse_info <iterator_t> info = parse(fileContent.c_str(),gmsh_p,space_p);
|
||||
|
||||
// Feedback to user on parsing outcome.
|
||||
if (info.full)
|
||||
{
|
||||
rInfo("-------------------------");
|
||||
rInfo("parsing succeeded :-)");
|
||||
rInfo("-------------------------");
|
||||
return OKCODE;
|
||||
}
|
||||
else
|
||||
{
|
||||
ostringstream temp;
|
||||
temp << info.stop ;
|
||||
rError("-------------------------");
|
||||
rError("parsing failed :-(");
|
||||
rError("stopped at line: %s", temp.str().c_str());
|
||||
rError("-------------------------");
|
||||
return ERRORCODE;
|
||||
}
|
||||
|
||||
//rDebug("Leave parseFile.");
|
||||
}
|
||||
|
||||
int gmsh::gmshPushNode(vector<double>* nodeCoords)
|
||||
{
|
||||
//rDebug("gmshPushNode(vector<double>* nodeCoords).");
|
||||
gmshNodes_.push_back(*nodeCoords);
|
||||
return OKCODE;
|
||||
}
|
||||
|
||||
int gmsh::gmshPushNodeNumber(unsigned int* nodeNumber)
|
||||
{
|
||||
gmshNodesNumber_.push_back(*nodeNumber);
|
||||
return OKCODE;
|
||||
}
|
||||
|
||||
int gmsh::gmshPushElem(unsigned short int elemType,
|
||||
vector<unsigned int>* nodeVector)
|
||||
{
|
||||
//rDebug("Inside gmshPushElem.");
|
||||
if (elemType == GMSH_LINE)
|
||||
gmshLine_.push_back(*nodeVector);
|
||||
else if (elemType == GMSH_TRIANGLE)
|
||||
gmshTriangle_.push_back(*nodeVector);
|
||||
else if (elemType == GMSH_QUADRANGLE)
|
||||
gmshQuadrangle_.push_back(*nodeVector);
|
||||
else if (elemType == GMSH_TETRAHEDRON)
|
||||
gmshTetrahedron_.push_back(*nodeVector);
|
||||
else if (elemType == GMSH_HEXAHEDRON)
|
||||
gmshHexahedron_.push_back(*nodeVector);
|
||||
else if (elemType == GMSH_PRISM)
|
||||
gmshPrism_.push_back(*nodeVector);
|
||||
else if (elemType == GMSH_PYRAMID)
|
||||
gmshPyramid_.push_back(*nodeVector);
|
||||
else if (elemType == GMSH_2ND_LINE)
|
||||
gmsh2ndLine_.push_back(*nodeVector);
|
||||
else if (elemType == GMSH_2ND_TRIANGLE)
|
||||
gmsh2ndTriangle_.push_back(*nodeVector);
|
||||
else if (elemType == GMSH_2ND_QUADRANGLE)
|
||||
gmsh2ndQuadrangle_.push_back(*nodeVector);
|
||||
else if (elemType == GMSH_2ND_TETRAHEDRON)
|
||||
gmsh2ndTetrahedron_.push_back(*nodeVector);
|
||||
else if (elemType == GMSH_2ND_HEXAHEDRON)
|
||||
gmsh2ndHexahedron_.push_back(*nodeVector);
|
||||
else if (elemType == GMSH_2ND_PRISM)
|
||||
gmsh2ndPrism_.push_back(*nodeVector);
|
||||
else if (elemType == GMSH_2ND_PYRAMID)
|
||||
gmsh2ndPyramid_.push_back(*nodeVector);
|
||||
else if (elemType == GMSH_POINT)
|
||||
gmshPoint_.push_back(*nodeVector);
|
||||
else
|
||||
{
|
||||
rError("A unknown element type found!");
|
||||
rError("Element type: %d", elemType);
|
||||
}
|
||||
return OKCODE;
|
||||
}
|
||||
|
||||
int gmsh::gmshPushTag(unsigned short int elemType,
|
||||
vector<unsigned int>* tagVector)
|
||||
{
|
||||
//rDebug("Inside gmshPushElem.");
|
||||
if (elemType == GMSH_LINE)
|
||||
{
|
||||
//rDebug(" Line pushedback");
|
||||
}
|
||||
else if (elemType == GMSH_TRIANGLE)
|
||||
{
|
||||
//rDebug(" Triangle pushedback");
|
||||
}
|
||||
else if (elemType == GMSH_QUADRANGLE)
|
||||
{
|
||||
//rDebug(" Quadrangle pushedback");
|
||||
}
|
||||
else if (elemType == GMSH_TETRAHEDRON)
|
||||
{
|
||||
//rDebug(" Tetrahedron pushedback");
|
||||
gmshTetrahedronTag_.push_back(*tagVector);
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
return OKCODE;
|
||||
}
|
||||
|
||||
|
||||
int gmsh::gmshShowElemResult()
|
||||
{
|
||||
rInfo("Elements found in gmsh file:");
|
||||
rInfo(" lines: %d",gmshLine_.size());
|
||||
rInfo(" triangles: %d",gmshTriangle_.size());
|
||||
rInfo(" quadrangles: %d",gmshQuadrangle_.size());
|
||||
rInfo(" tetrahedrons: %d",gmshTetrahedron_.size());
|
||||
rInfo(" hexahedrons: %d",gmshHexahedron_.size());
|
||||
rInfo(" prisms: %d",gmshPrism_.size());
|
||||
rInfo(" pyramids: %d",gmshPyramid_.size());
|
||||
rInfo(" 2nd order lines: %d",gmsh2ndLine_.size());
|
||||
rInfo(" 2nd order Triangles: %d",gmsh2ndTriangle_.size());
|
||||
rInfo(" 2nd order Quadrangles: %d",gmsh2ndQuadrangle_.size());
|
||||
rInfo(" 2nd order Tetrahedrons: %d",gmsh2ndTetrahedron_.size());
|
||||
rInfo(" 2nd order Hexahedrons: %d",gmsh2ndHexahedron_.size());
|
||||
rInfo(" 2nd order Prisms: %d",gmsh2ndPrism_.size());
|
||||
rInfo(" 2nd order Pyramids: %d",gmsh2ndPyramid_.size());
|
||||
rInfo(" Points : %d",gmshPoint_.size());
|
||||
return OKCODE;
|
||||
}
|
||||
|
||||
void gmsh::cpString(char const* first,
|
||||
char const* last,
|
||||
string* str)
|
||||
{
|
||||
//rDebug("Enter cpString.");
|
||||
|
||||
// Erase the str content.
|
||||
str->erase();
|
||||
|
||||
// Copy version in str.
|
||||
for(unsigned int i = 0; i<strlen(first)-strlen(last); i++)
|
||||
{
|
||||
str->append(1,first[i]);
|
||||
}
|
||||
//rDebug("*str= %s",str->c_str());
|
||||
|
||||
//rDebug("Leafe cpString.");
|
||||
}
|
||||
string gmsh::cpString(char const* first,
|
||||
char const* last)
|
||||
{
|
||||
//rDebug("Enter cpString.");
|
||||
|
||||
// Create and erase a tempral string;
|
||||
string tempString;
|
||||
tempString.erase();
|
||||
|
||||
// Copy version in str.
|
||||
for(unsigned int i = 0; i<strlen(first)-strlen(last); i++)
|
||||
{
|
||||
tempString.append(1,first[i]);
|
||||
}
|
||||
//rDebug("tempString= %s",tempString.c_str());
|
||||
//rDebug("Leafe cpString.");
|
||||
return tempString;
|
||||
}
|
||||
|
||||
int gmsh::gmshCpString(char const* first,
|
||||
string*str)
|
||||
{
|
||||
// Create and erase a tempral string;
|
||||
std::string tempString;
|
||||
tempString.erase();
|
||||
// Copy the character sign for sign into the string.
|
||||
for(unsigned int i = 0; i<strlen(first); i++)
|
||||
{
|
||||
tempString.append(1,first[i]);
|
||||
}
|
||||
//rDebug("tempString= %s",tempString.c_str());
|
||||
//rDebug("Leafe cpString.");
|
||||
return OKCODE;
|
||||
}
|
||||
|
||||
int gmsh::gmshCheckVersion(int* version)
|
||||
{
|
||||
if ((int)(*version) == 2)
|
||||
{
|
||||
rInfo("Gmsh file has format 2.");
|
||||
return OKCODE;
|
||||
}
|
||||
else
|
||||
{
|
||||
rError("Gmsh file has format: %d.", (int)(*version));
|
||||
rError("But this program can only read format 2.");
|
||||
rError("Exit");
|
||||
exit(ERRORCODE);
|
||||
}
|
||||
}
|
||||
|
||||
int gmsh::gmshCheckFileType(int* fileType)
|
||||
{
|
||||
if ((int)(*fileType) == 0)
|
||||
{
|
||||
rInfo("Gmsh file has ascii format.");
|
||||
return OKCODE;
|
||||
}
|
||||
else
|
||||
{
|
||||
rError("Gmsh file has format: %d.", (int)(*fileType));
|
||||
rError("But this program can only read format 0 (ascii).");
|
||||
rError("Exit");
|
||||
exit(ERRORCODE);
|
||||
}
|
||||
}
|
||||
|
||||
std::vector< std::vector <double> > gmsh::gmshNode()
|
||||
{
|
||||
return gmshNodes_;
|
||||
}
|
||||
|
||||
std::vector<unsigned int> gmsh::gmshNodeNumber()
|
||||
{
|
||||
return gmshNodesNumber_;
|
||||
}
|
||||
|
||||
std::vector< std::vector<unsigned int> > gmsh::gmshTetrahedron()
|
||||
{
|
||||
return gmshTetrahedron_;
|
||||
}
|
||||
|
||||
std::vector< std::vector<unsigned int> > gmsh::gmshTetrahedronTag()
|
||||
{
|
||||
return gmshTetrahedronTag_;
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
// rights - 2006-, copyright patrick leidenberger and benedikt oswald,
|
||||
// all rights reserved
|
||||
// project - gmsh2h5fed
|
||||
// file name - gmsh.hh
|
||||
// file type - c++ header file
|
||||
// objective - declare class for readind gmsh mesh files v2.0
|
||||
//
|
||||
// modified - 2006 aug 21, creation, Patrick Leidenberger
|
||||
// modified - 2006 aug 22, pl.
|
||||
// modified - 2006 aug 23, pl.
|
||||
// modified - 2006 aug 24, pl, delete old things.
|
||||
// modified - 2006 aug 26, pl, Access to private members.
|
||||
|
||||
#ifndef GMSH_HH_
|
||||
#define GMSH_HH_
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <boost/spirit/core.hpp>
|
||||
#include <boost/spirit/iterator/file_iterator.hpp>
|
||||
#include <boost/spirit/core.hpp>
|
||||
|
||||
/* Include the files for rlog. */
|
||||
#include <rlog/rlog.h>
|
||||
#include <rlog/rloglocation.h>
|
||||
#include <rlog/Error.h>
|
||||
#include <rlog/RLogChannel.h>
|
||||
#include <rlog/StdioNode.h>
|
||||
#include <rlog/RLogTime.h>
|
||||
|
||||
#include <nonsciconst.h>
|
||||
|
||||
// Include gmsh specific constants.
|
||||
#include "gmshconst.hh"
|
||||
|
||||
using namespace std;
|
||||
using namespace nonsciconst;
|
||||
|
||||
namespace gmshtohdf5fed
|
||||
{
|
||||
class gmsh
|
||||
{
|
||||
public:
|
||||
// Constructor: Here we clear all private data vectors.
|
||||
gmsh();
|
||||
// Destructor.
|
||||
~gmsh();
|
||||
|
||||
int gmshFileName(char* fileName);
|
||||
int gmshFileName(string fileName);
|
||||
|
||||
int gmshOpen(void);
|
||||
|
||||
int gmshParseFile(gmsh* vtkSelf);
|
||||
|
||||
void cpString(char const* first,
|
||||
char const* last,
|
||||
string* str);
|
||||
string cpString(char const* first,
|
||||
char const* last);
|
||||
|
||||
int gmshCpString(char const* first,
|
||||
string*str);
|
||||
// Check if gmsh file is of version 2.
|
||||
int gmshCheckVersion(int* version);
|
||||
// Check if the gmsh file is in ascii format.
|
||||
int gmshCheckFileType(int* fileType);
|
||||
|
||||
// Pushes the three coordinates of a node in the gmshNodes_ vector.
|
||||
int gmshPushNode(vector<double>* nodeCoords);
|
||||
|
||||
// Pushes the number of a node in the gmshNodesNumber_ vector.
|
||||
int gmshPushNodeNumber(unsigned int * nodeNumber);
|
||||
|
||||
// Push the node vector nodeVector to the appropriate data structure
|
||||
// denoted by the string.
|
||||
int gmshPushElem(unsigned short int elemType,
|
||||
vector<unsigned int>* nodeVector);
|
||||
// Push the tag vector tagVector to the appropriate data structure
|
||||
// denoted by the string.
|
||||
int gmshPushTag(unsigned short int elemType,
|
||||
vector<unsigned int>* tagVector);
|
||||
// Show the size of the element vectors.
|
||||
int gmshShowElemResult();
|
||||
|
||||
//-------------------------------------//
|
||||
// Access to private stored gmsh data. //
|
||||
//-------------------------------------//
|
||||
|
||||
std::vector< std::vector <double> > gmshNode();
|
||||
std::vector<unsigned int> gmshNodeNumber();
|
||||
std::vector< std::vector<unsigned int> > gmshTetrahedron();
|
||||
std::vector< std::vector<unsigned int> > gmshTetrahedronTag();
|
||||
|
||||
private:
|
||||
string fileName_;
|
||||
string fileContent;
|
||||
|
||||
// Data structure for node coordinates from gmsh file.
|
||||
vector<vector<double> > gmshNodes_;
|
||||
// Data structure for gmsh node number.
|
||||
// A number belongs to the respective node coordinate in the gmshNodes_
|
||||
// vector.
|
||||
vector<unsigned int> gmshNodesNumber_;
|
||||
|
||||
// Data structure for the topological entities and their tags stored in
|
||||
// the gmsh file. The 'gmsh2nd..' denote second order Elements.
|
||||
vector<vector<unsigned int> > gmshLine_;
|
||||
vector<vector<unsigned int> > gmshLineTag_;
|
||||
vector<vector<unsigned int> > gmshTriangle_;
|
||||
vector<vector<unsigned int> > gmshTriangleTag_;
|
||||
vector<vector<unsigned int> > gmshQuadrangle_;
|
||||
vector<vector<unsigned int> > gmshQuadrangleTag_;
|
||||
vector<vector<unsigned int> > gmshTetrahedron_;
|
||||
vector<vector<unsigned int> > gmshTetrahedronTag_;
|
||||
vector<vector<unsigned int> > gmshHexahedron_;
|
||||
vector<vector<unsigned int> > gmshHexahedronTag_;
|
||||
vector<vector<unsigned int> > gmshPrism_;
|
||||
vector<vector<unsigned int> > gmshPrismTag_;
|
||||
vector<vector<unsigned int> > gmshPyramid_;
|
||||
vector<vector<unsigned int> > gmshPyramidTag_;
|
||||
vector<vector<unsigned int> > gmsh2ndLine_;
|
||||
vector<vector<unsigned int> > gmsh2ndLineTag_;
|
||||
vector<vector<unsigned int> > gmsh2ndTriangle_;
|
||||
vector<vector<unsigned int> > gmsh2ndTriangleTag_;
|
||||
vector<vector<unsigned int> > gmsh2ndQuadrangle_;
|
||||
vector<vector<unsigned int> > gmsh2ndQuadrangleTag_;
|
||||
vector<vector<unsigned int> > gmsh2ndTetrahedron_;
|
||||
vector<vector<unsigned int> > gmsh2ndTetrahedronTag_;
|
||||
vector<vector<unsigned int> > gmsh2ndHexahedron_;
|
||||
vector<vector<unsigned int> > gmsh2ndHexahedronTag_;
|
||||
vector<vector<unsigned int> > gmsh2ndPrism_;
|
||||
vector<vector<unsigned int> > gmsh2ndPrismTag_;
|
||||
vector<vector<unsigned int> > gmsh2ndPyramid_;
|
||||
vector<vector<unsigned int> > gmsh2ndPyramidTag_;
|
||||
vector<vector<unsigned int> > gmshPoint_;
|
||||
vector<vector<unsigned int> > gmshPointTag_;
|
||||
};
|
||||
}
|
||||
|
||||
#endif //GMSH_HH_
|
||||
@@ -0,0 +1,28 @@
|
||||
#ifndef GMSHCONST_HH_
|
||||
#define GMSHCONST_HH_
|
||||
|
||||
// Contants of gmsh element types.
|
||||
// See Gmsh Reference Manual (14 May 2006) page 147-148.
|
||||
const unsigned short int GMSH_LINE = 1;
|
||||
const unsigned short int GMSH_TRIANGLE = 2;
|
||||
const unsigned short int GMSH_QUADRANGLE = 3;
|
||||
const unsigned short int GMSH_TETRAHEDRON = 4;
|
||||
const unsigned short int GMSH_HEXAHEDRON = 5;
|
||||
const unsigned short int GMSH_PRISM = 6;
|
||||
const unsigned short int GMSH_PYRAMID = 7;
|
||||
const unsigned short int GMSH_2ND_LINE = 8;
|
||||
const unsigned short int GMSH_2ND_TRIANGLE = 9;
|
||||
const unsigned short int GMSH_2ND_QUADRANGLE = 10;
|
||||
const unsigned short int GMSH_2ND_TETRAHEDRON = 11;
|
||||
const unsigned short int GMSH_2ND_HEXAHEDRON = 12;
|
||||
const unsigned short int GMSH_2ND_PRISM = 13;
|
||||
const unsigned short int GMSH_2ND_PYRAMID = 14;
|
||||
const unsigned short int GMSH_POINT = 15;
|
||||
|
||||
// Every element has an spesific number of tags.
|
||||
// This is the list of the number. There is a leading zero, because there is
|
||||
// no element with the index 0.
|
||||
const unsigned short int GMSH_ELEM_N_NODES[] = { 0, 2, 3, 4, 4, 8, 6, 5, 3,
|
||||
6, 9, 10, 27, 18, 14, 1 };
|
||||
|
||||
#endif //GMSHCONST_HH_
|
||||
@@ -0,0 +1,242 @@
|
||||
/** \brief Definition of gmsh file format v2.0 parser data types and variables
|
||||
*
|
||||
* rights - patrick leidenberger and benedikt oswald
|
||||
* file name - gmshgrammar.hh
|
||||
* file type - include file
|
||||
* objective - define grammar of gmsh file format v2.0
|
||||
* author - patrick leidenberger and benedikt oswald
|
||||
* modified - 2006 jun 29, pl, creation
|
||||
* features - defines grammar of gmsh files v2.0
|
||||
*/
|
||||
|
||||
/* include standard header files */
|
||||
#include <boost/spirit/core.hpp>
|
||||
#include <boost/spirit/iterator/file_iterator.hpp>
|
||||
#include <boost/spirit/actor/assign_actor.hpp>
|
||||
#include <boost/spirit/utility/functor_parser.hpp>
|
||||
#include <boost/spirit/utility/escape_char.hpp>
|
||||
#include <boost/spirit/utility/loops.hpp>
|
||||
#include <boost/spirit/dynamic/if.hpp>
|
||||
#include <iostream>
|
||||
#include <functional>
|
||||
#include <map>
|
||||
#include <stack>
|
||||
#include <string>
|
||||
#include <boost/bind.hpp>
|
||||
#include <boost/ref.hpp>
|
||||
|
||||
/* include proprietary header files */
|
||||
#include "gmshsemanticaction.hh"
|
||||
#include "gmsh.hh"
|
||||
// Include gmsh specific constants.
|
||||
#include "gmshconst.hh"
|
||||
|
||||
#ifndef GMSHGRAMMAR_HH_
|
||||
#define GMSHGRAMMAR_HH_
|
||||
|
||||
/* activate namespaces */
|
||||
using namespace std;
|
||||
using namespace boost::spirit;
|
||||
using namespace gmshtohdf5fed;
|
||||
|
||||
/* type definitions */
|
||||
//typedef char char_t;
|
||||
//typedef file_iterator<char_t> iterator_t;
|
||||
//typedef scanner<iterator_t> scanner_t;
|
||||
//typedef rule<scanner_t> rule_t;
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Our calculator grammar
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
struct gmsh_g : public grammar<gmsh_g>
|
||||
{
|
||||
// vtk_g(/*stack<long>& eval_*/)
|
||||
// /*: eval(eval_)*/ {}
|
||||
gmsh_g(gmsh* gmshSelf)
|
||||
: gmshSelf_(gmshSelf)
|
||||
{
|
||||
}
|
||||
|
||||
template <typename ScannerT>
|
||||
struct definition
|
||||
{
|
||||
definition(gmsh_g const& self)
|
||||
{
|
||||
gmsh_import_r = gmsh_mesh_format_r
|
||||
>> gmsh_nodes_r
|
||||
>> gmsh_elements_r;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// GENERAL NOTE: All tranport of numbers to gmshsemanticaction.hh must //
|
||||
// be done by reference, not by value. Transport by //
|
||||
// value fails! You have to debug long for it! //
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Rules for the MeshFormat section.
|
||||
gmsh_mesh_format_r = str_p("$MeshFormat")
|
||||
>> int_p[assign_a(tempInt1_)]
|
||||
[gmsh_version_a(self.gmshSelf_, &tempInt1_)]
|
||||
>> int_p[assign_a(tempInt1_)]
|
||||
[gmsh_file_type_a(self.gmshSelf_, &tempInt1_)]
|
||||
>> int_p[assign_a(tempInt1_)]
|
||||
>> str_p("$EndMeshFormat");
|
||||
|
||||
// Rules for the Nodes section.
|
||||
gmsh_nodes_r = str_p("$Nodes")
|
||||
>> eps_p[gmsh_clear_map_a<unsigned int,
|
||||
vector<double> >(&tempCoordMap_)]
|
||||
>> int_p[assign_a(tempUnInt1_)]
|
||||
>> eps_p[gmsh_info_msg_a("Nodes in gmsh file: ",
|
||||
&tempUnInt1_)]
|
||||
>> repeat_p(boost::ref(tempUnInt1_))
|
||||
[
|
||||
eps_p[gmsh_clear_vec_a<double>(&tempVecDouble1_)]
|
||||
>> int_p[assign_a(tempUnInt2_)]
|
||||
>> repeat_p(3)
|
||||
[real_p[assign_a(tempDouble1_)]
|
||||
[gmsh_push_vec_a<double>(&tempVecDouble1_,
|
||||
&tempDouble1_)]
|
||||
]
|
||||
[gmsh_insert_map_a<unsigned int,
|
||||
vector<double> >
|
||||
(&tempCoordMap_, &tempUnInt2_,
|
||||
&tempVecDouble1_)
|
||||
]
|
||||
]
|
||||
>> str_p("$EndNodes")
|
||||
>> eps_p[gmsh_transport_nodes_a(self.gmshSelf_,
|
||||
&tempCoordMap_)];
|
||||
|
||||
// Rules for the Elements section.
|
||||
gmsh_elements_r = str_p("$Elements")
|
||||
>> int_p[assign_a(tempUnInt1_)]
|
||||
>> eps_p[gmsh_info_msg_a("Elements in gmsh file: ",
|
||||
&tempUnInt1_)]
|
||||
>> gmsh_element_r
|
||||
>> str_p("$EndElements");
|
||||
|
||||
gmsh_element_r = repeat_p(boost::ref(tempUnInt1_))
|
||||
[ // Parse one element
|
||||
// Clear the vectors for nodes and tags of an elem.
|
||||
eps_p[gmsh_clear_vec_a<unsigned int>
|
||||
(&tempElemNode_)]
|
||||
>> eps_p[gmsh_clear_vec_a<unsigned int>
|
||||
(&tempElemTag_)]
|
||||
// Parse the element number. We don't need it.
|
||||
>> int_p[assign_a(tempUnInt2_)]
|
||||
// Parse the element type.
|
||||
>> int_p[assign_a(tempUnShortInt1_)]
|
||||
// Parse the number of tags.
|
||||
>> int_p[assign_a(tempUnInt3_)]
|
||||
// Parse the tags.
|
||||
>> repeat_p(boost::ref(tempUnInt3_))
|
||||
[
|
||||
// Parse a single tag.
|
||||
int_p[assign_a(tempUnInt4_)]
|
||||
// Copy to vector.
|
||||
>> eps_p[gmsh_push_vec_a<unsigned int>
|
||||
(&tempElemTag_, &tempUnInt4_)]
|
||||
][gmsh_nothing_a()]
|
||||
// Copy the number of nodes of the actual element
|
||||
// type (in tempUnShortInt1_) from the
|
||||
// GMSH_ELEM_N_NODES array in gmshconst.hh in
|
||||
// tempUnShortInt2_.
|
||||
// Do this, because I don't get the direct array
|
||||
// access not work.
|
||||
>> eps_p[gmsh_array_access_a<unsigned short int>
|
||||
(&tempUnShortInt2_, &tempUnShortInt1_)]
|
||||
// Parse the respective number of nodes.
|
||||
>> repeat_p(boost::ref(tempUnShortInt2_))
|
||||
[
|
||||
// Parse a sigle node.
|
||||
int_p[assign_a(tempUnInt4_)]
|
||||
// Copy to vector.
|
||||
>> eps_p[gmsh_push_vec_a<unsigned int>
|
||||
(&tempElemNode_, &tempUnInt4_)]
|
||||
|
||||
]
|
||||
[
|
||||
// Transport the parsed element nodes in the
|
||||
// respective gmsh.hh data structure.
|
||||
gmsh_transport_elem_a(self.gmshSelf_,
|
||||
&tempUnShortInt1_, &tempElemNode_)
|
||||
]
|
||||
[
|
||||
// Transport the parsed element tags in the
|
||||
// respective gmsh.hh data structure.
|
||||
gmsh_transport_tag_a(self.gmshSelf_,
|
||||
&tempUnShortInt1_, &tempElemTag_)
|
||||
]
|
||||
// This short section demonstrates, like con-
|
||||
// ditional parsing can be used instead:
|
||||
//
|
||||
//>> if_p(gmsh_compare_a<unsigned short int>
|
||||
// (&tempUnShortInt1_,&(elemType_[0])))
|
||||
// [
|
||||
// // Element type 1 == line.
|
||||
// repeat_p(2)
|
||||
// [
|
||||
// int_p[assign_a(tempUnInt4_)]
|
||||
// ][gmsh_nothing_a()]
|
||||
// ]
|
||||
//
|
||||
]
|
||||
[
|
||||
// All elements are parsed.
|
||||
// Show what we have paresd.
|
||||
gmsh_show_elem_result_a(self.gmshSelf_)
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
rule<ScannerT> expression, term, factor, integer;
|
||||
|
||||
|
||||
rule<ScannerT> vtk_import_r;
|
||||
|
||||
rule<ScannerT> gmsh_import_r;
|
||||
rule<ScannerT> gmsh_mesh_format_r;
|
||||
rule<ScannerT> gmsh_nodes_r;
|
||||
rule<ScannerT> gmsh_elements_r;
|
||||
rule<ScannerT> gmsh_element_r;
|
||||
|
||||
rule<ScannerT> const&
|
||||
start() const { return gmsh_import_r; }
|
||||
|
||||
// These are temporal variables used during the parsing process.
|
||||
// These variables are used at different places for different things,
|
||||
// they are only valid in small ranges.
|
||||
int tempInt1_;
|
||||
unsigned int tempUnInt1_;
|
||||
unsigned int tempUnInt2_;
|
||||
unsigned int tempUnInt3_;
|
||||
unsigned int tempUnInt4_;
|
||||
unsigned short int tempUnShortInt1_;
|
||||
unsigned short int tempUnShortInt2_;
|
||||
|
||||
double tempDouble1_;
|
||||
|
||||
vector<int> tempIntVec1_;
|
||||
vector<double> tempDoubleVec1_;
|
||||
vector<vector<double> > tempDoubleVec2_;
|
||||
|
||||
vector<double> tempVecDouble1_;
|
||||
|
||||
// Data structure for node coordinates.
|
||||
// The gmsh node coordinates are not stored and numbered consecutive. So we
|
||||
// have to sort and map them to a consecutive index set using this map.
|
||||
map<unsigned int, vector<double> > tempCoordMap_;
|
||||
// Data structure to store the nodes of an element.
|
||||
vector<unsigned int> tempElemNode_;
|
||||
// Data structure to store an elements tags.
|
||||
vector<unsigned int> tempElemTag_;
|
||||
|
||||
};
|
||||
|
||||
gmsh* gmshSelf_;
|
||||
};
|
||||
|
||||
#endif // GMSHGRAMMAR_HH_
|
||||
@@ -0,0 +1,344 @@
|
||||
// rights - 2006-, copyright benedikt oswald and patrick leidenberger,
|
||||
// all rights reserved
|
||||
/** \brief Definition of VTK ASCII file format parser
|
||||
* project - phidias3d
|
||||
* file name - vtksemanticaction.h
|
||||
* file type - c++ include file
|
||||
* objective - declare semantic action for the vtk file parser
|
||||
* modified - 2006 jul 03, creation, pl
|
||||
* modified - 2006 jul 05, insert fuctionality of calling member functions
|
||||
* of the vtk class, pl
|
||||
* modified - 2006 jul 06, Add actions for vtk file header and file format.
|
||||
* modified - 2006 jul 11, Add a lot of action to store the unstructured
|
||||
* grid dataset. This section is complete.
|
||||
* modified - 2006 jul 13, Make the action work well: it is not a good idea
|
||||
* to transport pointers or strings! Use pointers of
|
||||
* characters.
|
||||
* modified - 2006 aug 27, Correct error in pushNode function, pl.
|
||||
**/
|
||||
|
||||
|
||||
/* include standard header files */
|
||||
#include <boost/spirit/core.hpp>
|
||||
#include <boost/spirit/iterator/file_iterator.hpp>
|
||||
#include <iostream>
|
||||
//#include <iterator>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <functional>
|
||||
#include <stack>
|
||||
#include "gmsh.hh"
|
||||
|
||||
/* include proprietary header files */
|
||||
//#include "ansyscnx.h"
|
||||
|
||||
/* activate namespaces */
|
||||
using namespace std;
|
||||
using namespace boost;
|
||||
using namespace boost::spirit;
|
||||
//using namespace phidias3d;
|
||||
|
||||
using namespace gmshtohdf5fed;
|
||||
|
||||
|
||||
/* type definitions */
|
||||
typedef char char_t;
|
||||
typedef file_iterator<char_t> iterator_t;
|
||||
typedef scanner<iterator_t> scanner_t;
|
||||
typedef rule<scanner_t> rule_t;
|
||||
|
||||
#ifndef GMSHSEMANTICACTION_HH_
|
||||
#define GMSHSEMANTICACTION_HH_
|
||||
|
||||
/* semantic actions */
|
||||
|
||||
// Call version-check of gmsh file.
|
||||
struct gmsh_version_a
|
||||
{
|
||||
gmsh_version_a(gmsh* gmshSelf, int* tempInt)
|
||||
: gmshSelf_(gmshSelf), tempInt_(tempInt) {}
|
||||
void operator()(int value) const
|
||||
{
|
||||
//rDebug("Inside gmsh_version_a.");
|
||||
gmshSelf_->gmshCheckVersion(tempInt_);
|
||||
};
|
||||
gmsh* gmshSelf_;
|
||||
int* tempInt_;
|
||||
};
|
||||
|
||||
struct gmsh_file_type_a
|
||||
{
|
||||
gmsh_file_type_a(gmsh* gmshSelf, int* tempInt)
|
||||
: gmshSelf_(gmshSelf), tempInt_(tempInt) {}
|
||||
void operator()(int value) const
|
||||
{
|
||||
//rDebug("Inside gmsh_version_a.");
|
||||
gmshSelf_->gmshCheckFileType(tempInt_);
|
||||
};
|
||||
gmsh* gmshSelf_;
|
||||
int* tempInt_;
|
||||
};
|
||||
|
||||
template<typename Type>
|
||||
struct gmsh_clear_vec_a
|
||||
{
|
||||
gmsh_clear_vec_a(vector<Type>* vect)
|
||||
: vect_(vect) {}
|
||||
void operator()(char const* first, char const* last)
|
||||
const
|
||||
{
|
||||
//rDebug("Clear temporal vector.");
|
||||
(*vect_).clear();
|
||||
};
|
||||
vector<Type>* vect_;
|
||||
};
|
||||
|
||||
template<typename type>
|
||||
struct gmsh_resize_vec_a
|
||||
{
|
||||
gmsh_resize_vec_a(vector<type>* vec, unsigned int size)
|
||||
: vec_(vec), size_(size) {}
|
||||
void operator() (char const* first,char const* last)
|
||||
const
|
||||
{
|
||||
//rDebug("Inside gmsh_resize_vec_a.");
|
||||
(*vec_).resize(size_);
|
||||
};
|
||||
void operator() (const int tempInt)
|
||||
const
|
||||
{
|
||||
//rDebug("Inside gmsh_resize_vec_a.");
|
||||
(*vec_).resize(size_);
|
||||
};
|
||||
unsigned int size_;
|
||||
vector<type> * vec_;
|
||||
};
|
||||
|
||||
template<typename type>
|
||||
struct gmsh_insert_vec_a
|
||||
{
|
||||
gmsh_insert_vec_a(vector<type>* vec, unsigned int const position,
|
||||
type* value)
|
||||
: vec_(vec), position_(position), value_(value) {}
|
||||
void operator() (char const* first,char const* last)
|
||||
const
|
||||
{
|
||||
(*vec_)[position_]=*value_;
|
||||
}
|
||||
vector<type> * vec_;
|
||||
unsigned int position_;
|
||||
type* value_;
|
||||
};
|
||||
|
||||
|
||||
template<typename type>
|
||||
struct gmsh_push_vec_a
|
||||
{
|
||||
gmsh_push_vec_a(vector<type>* vec, type* value)
|
||||
: vec_(vec), value_(value){}
|
||||
void operator() (char const* first,char const* last)
|
||||
const
|
||||
{
|
||||
//rDebug(" Push value to vector.");
|
||||
(*vec_).push_back(*value_);
|
||||
};
|
||||
void operator() (const double tempDouble)
|
||||
const
|
||||
{
|
||||
//rDebug(" Push value to vector.");
|
||||
(*vec_).push_back(*value_);
|
||||
};
|
||||
type* value_;
|
||||
vector<type> * vec_;
|
||||
};
|
||||
|
||||
|
||||
template<typename type1, typename type2>
|
||||
struct gmsh_insert_map_a
|
||||
{
|
||||
gmsh_insert_map_a(map<type1, type2>* tempMap, type1* key,
|
||||
type2* value)
|
||||
: map_(tempMap), key_(key), value_(value) {}
|
||||
void operator() (char const* first,char const* last)
|
||||
const
|
||||
{
|
||||
(*map_)[(*key_)]=*value_;
|
||||
};
|
||||
map<type1, type2> * map_;
|
||||
type1* key_;
|
||||
type2* value_;
|
||||
};
|
||||
|
||||
template<typename type1, typename type2>
|
||||
struct gmsh_clear_map_a
|
||||
{
|
||||
gmsh_clear_map_a(map<type1, type2>* tempMap)
|
||||
: map_(tempMap) {}
|
||||
void operator() (char const* first,char const* last)
|
||||
const
|
||||
{
|
||||
(*map_).clear();
|
||||
};
|
||||
map<type1, type2> * map_;
|
||||
};
|
||||
|
||||
|
||||
struct gmsh_transport_nodes_a
|
||||
{
|
||||
gmsh_transport_nodes_a(gmsh* gmshSelf,
|
||||
map<unsigned int, vector<double> >* tempMap)
|
||||
: gmshSelf_(gmshSelf), map_(tempMap) {}
|
||||
void operator() (char const* first,char const* last)
|
||||
const
|
||||
{
|
||||
//rDebug("Copy nodes in data structure.");
|
||||
for (map<unsigned int, vector<double> >::iterator
|
||||
iter = (*map_).begin(); iter != (*map_).end(); iter++)
|
||||
{
|
||||
vector<double>* temp;
|
||||
unsigned int tempNumber;
|
||||
temp = &((*iter).second);
|
||||
tempNumber = ((*iter).first);
|
||||
gmshSelf_->gmshPushNode(temp);
|
||||
gmshSelf_->gmshPushNodeNumber(&tempNumber);
|
||||
//rDebug("%f %f %f", (*temp)[0], (*temp)[1], (*temp)[2]);
|
||||
}
|
||||
|
||||
};
|
||||
map<unsigned int, vector<double> >* map_;
|
||||
gmsh* gmshSelf_;
|
||||
};
|
||||
|
||||
|
||||
|
||||
struct gmsh_transport_elem_a
|
||||
{
|
||||
gmsh_transport_elem_a(gmsh* gmshSelf, unsigned short int* elemType,
|
||||
vector <unsigned int>* tempElemNode)
|
||||
: gmshSelf_(gmshSelf), elemType_(elemType), tempElemNode_(tempElemNode) {}
|
||||
void operator() (char const* first,char const* last)
|
||||
const
|
||||
{
|
||||
//rDebug("Copy element type %d in data structure.", *elemType_);
|
||||
gmshSelf_->gmshPushElem(*elemType_, tempElemNode_);
|
||||
};
|
||||
gmsh* gmshSelf_;
|
||||
unsigned short int* elemType_;
|
||||
vector <unsigned int>* tempElemNode_;
|
||||
};
|
||||
|
||||
|
||||
struct gmsh_transport_tag_a
|
||||
{
|
||||
gmsh_transport_tag_a(gmsh* gmshSelf, unsigned short int* elemType,
|
||||
vector <unsigned int>* tempElemTag)
|
||||
: gmshSelf_(gmshSelf), elemType_(elemType), tempElemTag_(tempElemTag) {}
|
||||
void operator() (char const* first,char const* last)
|
||||
const
|
||||
{
|
||||
//rDebug("Copy element tag list in data structure.");
|
||||
gmshSelf_->gmshPushTag(*elemType_, tempElemTag_);
|
||||
};
|
||||
gmsh* gmshSelf_;
|
||||
unsigned short int* elemType_;
|
||||
vector <unsigned int>* tempElemTag_;
|
||||
};
|
||||
|
||||
|
||||
// Print actions.
|
||||
struct gmshEMsg_a
|
||||
{
|
||||
gmshEMsg_a(string gmshEMsg, unsigned int* tempUnLongInt)
|
||||
: gmshEMsg_(gmshEMsg), tempUnLongInt_(tempUnLongInt) {}
|
||||
void operator()(char const* first, char const* last)
|
||||
const
|
||||
{
|
||||
rError("%s %d",gmshEMsg_.c_str(),(*tempUnLongInt_));
|
||||
};
|
||||
string gmshEMsg_;
|
||||
unsigned int* tempUnLongInt_;
|
||||
};
|
||||
|
||||
struct gmsh_info_msg_a
|
||||
{
|
||||
gmsh_info_msg_a(string gmsh_info_msg)
|
||||
: gmsh_info_msg_(gmsh_info_msg), tempUnLongInt_(NULL), tempUnShortInt_(NULL) {}
|
||||
gmsh_info_msg_a(string gmsh_info_msg, unsigned int* tempUnLongInt)
|
||||
: gmsh_info_msg_(gmsh_info_msg), tempUnLongInt_(tempUnLongInt), tempUnShortInt_(NULL) {}
|
||||
gmsh_info_msg_a(string gmsh_info_msg, unsigned short int* tempUnShortInt)
|
||||
: gmsh_info_msg_(gmsh_info_msg), tempUnLongInt_(NULL), tempUnShortInt_(tempUnShortInt) {}
|
||||
void operator()(char const* first, char const* last)
|
||||
const
|
||||
{
|
||||
if ((tempUnLongInt_ == NULL) && (tempUnShortInt_ == NULL))
|
||||
rInfo("%s",gmsh_info_msg_.c_str());
|
||||
else if ((tempUnLongInt_ != NULL) && (tempUnShortInt_ == NULL))
|
||||
rInfo("%s%d",gmsh_info_msg_.c_str(),(*tempUnLongInt_));
|
||||
else if ((tempUnLongInt_ == NULL) && (tempUnShortInt_ != NULL))
|
||||
rInfo("%s%d",gmsh_info_msg_.c_str(),(*tempUnShortInt_));
|
||||
};
|
||||
string gmsh_info_msg_;
|
||||
unsigned int* tempUnLongInt_;
|
||||
unsigned short int* tempUnShortInt_;
|
||||
};
|
||||
|
||||
struct gmsh_nothing_a
|
||||
{
|
||||
gmsh_nothing_a()
|
||||
{}
|
||||
void operator()(char const* first, char const* last)
|
||||
const
|
||||
{
|
||||
};
|
||||
};
|
||||
|
||||
template<typename type>
|
||||
struct gmsh_compare_a
|
||||
{
|
||||
gmsh_compare_a(type* a, type* b)
|
||||
: a_(a), b_(b) {}
|
||||
bool operator () () const
|
||||
{
|
||||
if (*a_ == *b_)
|
||||
{
|
||||
//rDebug("Return TRUE! a = %d b = %d", *a_, *b_);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//rDebug("Return FALSE! a = %d b = %d", *a_, *b_);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
type* a_;
|
||||
type* b_;
|
||||
};
|
||||
|
||||
template<typename type>
|
||||
struct gmsh_array_access_a
|
||||
{
|
||||
gmsh_array_access_a(type* a, type* b)
|
||||
: a_(a), b_(b) {}
|
||||
void operator()(char const* first, char const* last) const
|
||||
{
|
||||
*a_ = GMSH_ELEM_N_NODES[*b_];
|
||||
};
|
||||
type* a_;
|
||||
type* b_;
|
||||
};
|
||||
|
||||
|
||||
struct gmsh_show_elem_result_a
|
||||
{
|
||||
gmsh_show_elem_result_a(gmsh* gmshSelf)
|
||||
: gmshSelf_(gmshSelf) {}
|
||||
void operator()(char const* first, char const* last)
|
||||
const
|
||||
{
|
||||
gmshSelf_->gmshShowElemResult();
|
||||
};
|
||||
gmsh* gmshSelf_;
|
||||
};
|
||||
|
||||
#endif // GMSHSEMANTICACTION_HH_
|
||||
@@ -0,0 +1,18 @@
|
||||
## Makefile.am -- process this file with automake to produce Makefile.in
|
||||
##
|
||||
## authors - benedikt oswald and patrick leidenberger
|
||||
## modified - 2006 aug 21, patrick leidenberger, creation
|
||||
## modified - 2006 aug 23, pl, adaped to new directory structure.
|
||||
#
|
||||
## objective - automake input file for the gmsh directory
|
||||
## project - gmshtohdf5fed
|
||||
|
||||
noinst_LTLIBRARIES = libgmsh.la
|
||||
gmshdir = $(topleveldir)/libsrc/gmsh
|
||||
gmsh_HEADERS = gmsh.hh
|
||||
libgmsh_la_SOURCES = gmsh.cc \
|
||||
gmsh.hh \
|
||||
gmshconst.hh \
|
||||
gmshgrammer.hh \
|
||||
gmshsemanticaction.hh
|
||||
AM_CPPFLAGS = @AM_CPPFLAGS@
|
||||
@@ -0,0 +1,37 @@
|
||||
// rights - 2006-, copyright benedikt, all rights reserved
|
||||
// project - phidias3d
|
||||
// file name - hdf5em.h
|
||||
// file type - c++ implementation file
|
||||
// objective - implement class for HDF5/ELECTROMAGNETIC file format access
|
||||
// modified - 2006 jun 26, creation, benedikt oswald
|
||||
// modified - 2006
|
||||
// inheritance -
|
||||
// feature - implements the base class for HDF5/ELECTROMAGNETIC file format access.
|
||||
// feature -
|
||||
// required software -
|
||||
|
||||
|
||||
/* include standard header files */
|
||||
//#include <h5.h>
|
||||
|
||||
|
||||
|
||||
/* include proprietary files */
|
||||
#include "h5fed.hh"
|
||||
#ifdef HAVE_HDF5
|
||||
|
||||
namespace hdf5em
|
||||
{
|
||||
//
|
||||
// hdf5em::hdf5em()
|
||||
// {
|
||||
// ;
|
||||
// }
|
||||
//
|
||||
// hdf5em::~hdf5em()
|
||||
// {
|
||||
// ;
|
||||
// }
|
||||
//
|
||||
}
|
||||
#endif // HAVE_HDF5
|
||||
@@ -0,0 +1,658 @@
|
||||
// rights - 2006-, copyright benedikt, all rights reserved
|
||||
// project - phidias3d
|
||||
// file name - hdf5em.h
|
||||
// file type - c++ header file
|
||||
// objective - declare class for HDF5/ELECTROMAGNETIC file format access
|
||||
// modified - 2006 jun 26, creation, benedikt oswald
|
||||
// modified - 2006 aug 26, pl, integrate automatic index mapping.
|
||||
// inheritance -
|
||||
// feature - declares the base class for HDF5/ELECTROMAGNETIC file format access;
|
||||
// feature - this class is completely self contained, i.e. it does not need anything
|
||||
// feature - external, except the STL and the HDF5 header files and the corresponding
|
||||
// feature - library.
|
||||
// required software -
|
||||
|
||||
#ifndef H5FED_HH_
|
||||
#define H5FED_HH_
|
||||
|
||||
#ifdef HAVE_HDF5
|
||||
|
||||
/* include standard header files */
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
#include <complex>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
// Include the files for rlog.
|
||||
#include <rlog/rlog.h>
|
||||
#include <rlog/rloglocation.h>
|
||||
#include <rlog/Error.h>
|
||||
#include <rlog/RLogChannel.h>
|
||||
#include <rlog/StdioNode.h>
|
||||
#include <rlog/RLogTime.h>
|
||||
|
||||
// Include HDF5 headers.
|
||||
#include <hdf5.h>
|
||||
|
||||
// Include h5fed specific constants.
|
||||
#include "h5fedconst.hh"
|
||||
|
||||
/* include standard proprietary header files */
|
||||
#include "nonsciconst.h"
|
||||
#include "physicomath.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace physicomath;
|
||||
using namespace nonsciconst;
|
||||
|
||||
namespace H5Fed
|
||||
{
|
||||
|
||||
class H5Fed {
|
||||
public:
|
||||
/** \brief constructor and destructor */
|
||||
H5Fed()
|
||||
{
|
||||
doIndexMapping_ = false;
|
||||
indexMap_.clear();
|
||||
positionMap_.clear();
|
||||
|
||||
// Deactivate the HDF5 error output.
|
||||
H5Eset_auto (0, NULL );
|
||||
};
|
||||
|
||||
// The Destructor.
|
||||
~H5Fed(){};
|
||||
|
||||
|
||||
//! Open an hdf5 finite element data file with appropriate access.
|
||||
int open(string fileName, string fileAccess)
|
||||
{
|
||||
// Store filename and file access in private variable.
|
||||
fileName_ = fileName;
|
||||
fileAccess_ = fileAccess;
|
||||
// Open file with respective rights via HDF5 API.
|
||||
if (!fileAccess_.compare(FILE_READ))
|
||||
{
|
||||
hdf5FileIdent_ = H5Fopen(fileName_.c_str(), H5F_ACC_RDONLY, H5P_DEFAULT);
|
||||
return OKCODE;
|
||||
}
|
||||
else if (!fileAccess_.compare(FILE_READ_WRITE))
|
||||
{
|
||||
hdf5FileIdent_ = H5Fopen(fileName_.c_str(), H5F_ACC_RDWR, H5P_DEFAULT);
|
||||
return OKCODE;
|
||||
}
|
||||
else if (!fileAccess_.compare(FILE_CREATE))
|
||||
{
|
||||
hdf5FileIdent_ = H5Fcreate(fileName_.c_str(), H5F_ACC_EXCL,
|
||||
H5P_DEFAULT, H5P_DEFAULT);
|
||||
if (hdf5FileIdent_ < 0)
|
||||
{
|
||||
rError("The file %s already exist.",fileName_.c_str());
|
||||
rError("To overwrite use the --force option.");
|
||||
exit(ERRORCODE);
|
||||
}
|
||||
else
|
||||
return OKCODE;
|
||||
}
|
||||
else if (!fileAccess_.compare(FILE_CREATE_FORCE))
|
||||
{
|
||||
hdf5FileIdent_ = H5Fcreate(fileName_.c_str(), H5F_ACC_TRUNC,
|
||||
H5P_DEFAULT, H5P_DEFAULT);
|
||||
return OKCODE;
|
||||
}
|
||||
else
|
||||
{
|
||||
rError("Unknown file-open-attribute for hdf5 file.");
|
||||
exit(ERRORCODE);
|
||||
}
|
||||
};
|
||||
|
||||
// Close an open hdf5 file.
|
||||
int close(void)
|
||||
{
|
||||
if (hdf5FileIdent_ >= 0)
|
||||
{
|
||||
hdf5Status_ = H5Fclose(hdf5FileIdent_);
|
||||
return OKCODE;
|
||||
}
|
||||
else
|
||||
{
|
||||
rError("You cannot close a file that is not opened.");
|
||||
return ERRORCODE;
|
||||
}
|
||||
};
|
||||
|
||||
// Create the empty HDF5 Finite Element Stardart group hierarchy.
|
||||
int createGroupHierarchie()
|
||||
{
|
||||
// Hdf5 group identifier for group access, localy valid (this method).
|
||||
hid_t hdf5GroupIdent_;
|
||||
// Create the groups. All group-name strings are defined in h5fedconst.hh.
|
||||
hdf5GroupIdent_ = H5Gcreate(hdf5FileIdent_,
|
||||
H5FED_G_ROOT.c_str(),H5P_DEFAULT);
|
||||
hdf5GroupIdent_ = H5Gcreate(hdf5FileIdent_,
|
||||
H5FED_G_COORD.c_str(),H5P_DEFAULT);
|
||||
hdf5GroupIdent_ = H5Gcreate(hdf5FileIdent_,
|
||||
H5FED_G_VOLUME_MESH.c_str(),H5P_DEFAULT);
|
||||
hdf5GroupIdent_ = H5Gcreate(hdf5FileIdent_,
|
||||
H5FED_G_BOUNDARY_MESH.c_str(),H5P_DEFAULT);
|
||||
hdf5GroupIdent_ = H5Gcreate(hdf5FileIdent_,
|
||||
H5FED_G_MATERIAL.c_str(),H5P_DEFAULT);
|
||||
hdf5GroupIdent_ = H5Gcreate(hdf5FileIdent_,
|
||||
H5FED_G_ELECTROMAGNETIC.c_str(),H5P_DEFAULT);
|
||||
hdf5GroupIdent_ = H5Gcreate(hdf5FileIdent_,
|
||||
H5FED_G_DISCRETE.c_str(),H5P_DEFAULT);
|
||||
hdf5GroupIdent_ = H5Gcreate(hdf5FileIdent_,
|
||||
H5FED_G_PHYSICAL.c_str(),H5P_DEFAULT);
|
||||
hdf5GroupIdent_ = H5Gcreate(hdf5FileIdent_,
|
||||
H5FED_G_DEBYE.c_str(),H5P_DEFAULT);
|
||||
hdf5GroupIdent_ = H5Gcreate(hdf5FileIdent_,
|
||||
H5FED_G_LORENTZ.c_str(),H5P_DEFAULT);
|
||||
hdf5GroupIdent_ = H5Gcreate(hdf5FileIdent_,
|
||||
H5FED_G_DRUDE.c_str(),H5P_DEFAULT);
|
||||
hdf5GroupIdent_ = H5Gcreate(hdf5FileIdent_,
|
||||
H5FED_G_DOF.c_str(),H5P_DEFAULT);
|
||||
hdf5GroupIdent_ = H5Gcreate(hdf5FileIdent_,
|
||||
H5FED_G_FIELD.c_str(),H5P_DEFAULT);
|
||||
return OKCODE;
|
||||
};
|
||||
|
||||
// This function activate the automatic index mapping to create a gapfree
|
||||
// and consecutive index set for the hdf5fed file.
|
||||
// The indexVec holdes the numbers of the nodes in the same way, as the
|
||||
// nodes are in the node vector.
|
||||
int beginIndexMapping(std::vector<unsigned int>* indexVec)
|
||||
{
|
||||
rDebug("Begin automatic index mapping.");
|
||||
doIndexMapping_ = true;
|
||||
indexMap_.clear();
|
||||
positionMap_.clear();
|
||||
|
||||
// Copy the old index to the map as map-key.
|
||||
for(unsigned int varI = 0; varI < indexVec->size(); varI++)
|
||||
{
|
||||
indexMap_.insert(make_pair((*indexVec)[varI],0));
|
||||
}
|
||||
// Number all elements in the map consecutive, starting with zero, that
|
||||
// is the new index set.
|
||||
unsigned int tempUnInt = 0;
|
||||
for(std::map<unsigned int, unsigned int>::iterator
|
||||
iter = indexMap_.begin();
|
||||
iter != indexMap_.end(); iter ++)
|
||||
{
|
||||
iter->second = tempUnInt;
|
||||
tempUnInt++;
|
||||
}
|
||||
// The first column contains the new index, the second the old position
|
||||
// of the coordinate in the vector.
|
||||
for(unsigned int varI = 0; varI < indexVec->size(); varI++)
|
||||
{
|
||||
positionMap_.insert(make_pair(
|
||||
(indexMap_.find((*indexVec)[varI]))->second,varI));
|
||||
}
|
||||
return OKCODE;
|
||||
};
|
||||
|
||||
// This function deactivate the automatic index mapping.
|
||||
// The uses index sets must be consecutive and gapfree.
|
||||
int endIndexMapping()
|
||||
{
|
||||
rDebug("End automatic index mapping.");
|
||||
doIndexMapping_ = false;
|
||||
indexMap_.clear();
|
||||
return OKCODE;
|
||||
};
|
||||
|
||||
// Write 3dim coordinates to h5fed file.
|
||||
int coord3d (std::vector<std::vector<double> >* coord)
|
||||
{
|
||||
// All these operations are only allowed, if there is a valid file
|
||||
// identifier.
|
||||
if (hdf5FileIdent_ >= 0)
|
||||
{
|
||||
// Define the rank of the different dataspaces.
|
||||
const int rank = 2;
|
||||
// Hdf5 error handling variable for Hdf5 actions.
|
||||
herr_t hdf5Status;
|
||||
// Hdf5 dataspace identifier.
|
||||
hid_t hdf5DataspaceId;
|
||||
// Hdf5 dataset identifier.
|
||||
hid_t hdf5DatasetId;
|
||||
// Define the dimension of the data array.
|
||||
// Number of rows: as much as coordinates.
|
||||
// Number of colums: 3, one for each dimension.
|
||||
hsize_t dim[2];
|
||||
dim[0] = coord->size();
|
||||
dim[1] = 3;
|
||||
|
||||
// We copy the coordinates from coord in an standart array, so that
|
||||
// hdf5 can handle it.
|
||||
// We do this in portions, so we save memory.
|
||||
|
||||
// Subdimension of hyperslab in memory: 1 line, 3 columns.
|
||||
hsize_t dim_sub_mem[2];
|
||||
dim_sub_mem[0] = 1;
|
||||
dim_sub_mem[1] = 3;
|
||||
// Subdimension of hyperslab in file: 1 line, 3 columns.
|
||||
hsize_t dim_sub_file[2];
|
||||
dim_sub_file[0] = 1;
|
||||
dim_sub_file[1] = 3;
|
||||
// Define the offset for reading from the memory.
|
||||
// Always fixed.
|
||||
hsize_t offset_mem[2];
|
||||
offset_mem[0] = 0;
|
||||
offset_mem[1] = 0;
|
||||
// Define the offset for writing into the file.
|
||||
hsize_t offset_file[2];
|
||||
offset_file[0] = 0; // Row only at the beginning. We iterate over it.
|
||||
offset_file[1] = 0; // We have no offset respective to the column.
|
||||
|
||||
// Array for x, y and z component of one coordinate.
|
||||
double coordinate[3];
|
||||
|
||||
// Dimesion and datatype of the file dataset, read out form file.
|
||||
// This is not the fastest, but the most robust way.
|
||||
hsize_t dim_out[2];
|
||||
hid_t dataType;
|
||||
|
||||
|
||||
// Create dataspace of full size.
|
||||
hdf5DataspaceId = H5Screate_simple(rank, dim, H5P_DEFAULT);
|
||||
|
||||
// Create dataset of full size.
|
||||
hdf5DatasetId = H5Dcreate(hdf5FileIdent_, H5FED_D_COORD3D.c_str(),
|
||||
H5T_IEEE_F64LE, hdf5DataspaceId, H5P_DEFAULT);
|
||||
|
||||
|
||||
|
||||
// Loop over all rows of the dataset (file) and copy the coord vector
|
||||
// element wise.
|
||||
hdf5Status = H5Sget_simple_extent_dims(hdf5DataspaceId, dim_out, H5P_DEFAULT);
|
||||
dataType = H5Dget_type(hdf5DatasetId);
|
||||
// If we use automatic mapping we need an interator to the map.
|
||||
std::map<unsigned int, unsigned int>::iterator
|
||||
iter = positionMap_.begin();
|
||||
for (unsigned int varI = 0; varI < dim_out[0]; varI++)
|
||||
{
|
||||
// Iterate over the rows in file dataspace.
|
||||
offset_file[0] = varI;
|
||||
|
||||
// Copy every element of a coordinate.
|
||||
for (unsigned int varJ = 0; varJ < dim_out[1]; varJ++)
|
||||
{
|
||||
// Here is the only special case for automated mapping:
|
||||
// Do not copy the next in the input vector, copy the coord
|
||||
// with the next following number.
|
||||
if (doIndexMapping_ == true)
|
||||
coordinate[varJ] = (*coord)[iter->second][varJ];
|
||||
else
|
||||
coordinate[varJ] = (*coord)[varI][varJ];
|
||||
}
|
||||
|
||||
// Select hyperslab ('region') in file dataspace.
|
||||
hdf5Status = H5Sselect_hyperslab(hdf5DataspaceId, H5S_SELECT_SET,
|
||||
offset_file, H5P_DEFAULT,
|
||||
dim_sub_file, H5P_DEFAULT);
|
||||
|
||||
// Define memory Dataspace.
|
||||
hid_t hdf5MemspaceId;
|
||||
hdf5MemspaceId = H5Screate_simple(rank, dim_sub_mem, H5P_DEFAULT);
|
||||
// Select hyperslab ('region') in memory.
|
||||
hdf5Status = H5Sselect_hyperslab(hdf5MemspaceId, H5S_SELECT_SET,
|
||||
offset_mem, H5P_DEFAULT,
|
||||
dim_sub_mem, H5P_DEFAULT);
|
||||
|
||||
// Copy dataset to dataset from memory to file.
|
||||
hdf5Status = H5Dwrite(hdf5DatasetId, H5T_NATIVE_DOUBLE,
|
||||
hdf5MemspaceId, hdf5DataspaceId,
|
||||
H5P_DEFAULT, coordinate);
|
||||
|
||||
H5Sclose(hdf5MemspaceId);
|
||||
// Increment the map iterator if we make automatic mapping.
|
||||
if (doIndexMapping_)
|
||||
iter++;
|
||||
}
|
||||
|
||||
// Close hdf5 identifier.
|
||||
hdf5Status = H5Dclose(hdf5DatasetId);
|
||||
hdf5Status = H5Sclose(hdf5DataspaceId);
|
||||
|
||||
return OKCODE;
|
||||
}
|
||||
else
|
||||
{
|
||||
rError("You cannot operate to dataset COORD3D.");
|
||||
rError("There is no valid file identifier.");
|
||||
return ERRORCODE;
|
||||
}
|
||||
};
|
||||
|
||||
// Read and return tetrahedron on of the given level.
|
||||
std::vector<std::vector<unsigned int> > tetrahedron(unsigned int level)
|
||||
{
|
||||
rError("The function: tetrahedron(unsigned int level) is not implemented.");
|
||||
};
|
||||
// Copy the tetrahedon elements to the h5fed file.
|
||||
int tetrahedron(unsigned int level,
|
||||
std::vector< std::vector<unsigned int> >* elem)
|
||||
{
|
||||
// Set dimension of an elements vector.
|
||||
unsigned int elemDim = H5FED_TET_N_NODE;
|
||||
// Set the name of the dataset, we want to operate.
|
||||
string datasetName = H5FED_D_TETMESH + stringify(level);
|
||||
// This function does the real work for all elements.
|
||||
element_(level, elem, datasetName, elemDim);
|
||||
return OKCODE;
|
||||
|
||||
}
|
||||
|
||||
int element_(unsigned int level,
|
||||
std::vector< std::vector<unsigned int> >* elem,
|
||||
std::string datasetName,
|
||||
unsigned int elemDim )
|
||||
{
|
||||
// All these operations are only allowed, if there is a valid file
|
||||
// identifier.
|
||||
if (hdf5FileIdent_ >= 0)
|
||||
{
|
||||
rDebug("Insert a check, if the selected level exits,");
|
||||
rDebug("and if it is consecutive.");
|
||||
// Define the rank of the different dataspaces.
|
||||
const int rank = 2;
|
||||
// Hdf5 error handling variable for Hdf5 actions.
|
||||
herr_t hdf5Status;
|
||||
// Hdf5 dataspace identifier.
|
||||
hid_t hdf5DataspaceId;
|
||||
// Hdf5 dataset identifier.
|
||||
hid_t hdf5DatasetId;
|
||||
// Define the dimension of the data array.
|
||||
hsize_t dim[2];
|
||||
// Number of rows: as much as elements.
|
||||
dim[0] = elem->size();
|
||||
// Number of colums: dimenstion of an elements vector.
|
||||
dim[1] = elemDim;
|
||||
|
||||
// We copy the element nodes from a element in an standart array,
|
||||
// so that hdf5 can handle it.
|
||||
// We do this for every element separate, so we save memory.
|
||||
|
||||
// Subdimension of hyperslab in memory: 1 line, elemDim columns.
|
||||
hsize_t dim_sub_mem[2];
|
||||
dim_sub_mem[0] = 1;
|
||||
dim_sub_mem[1] = elemDim;
|
||||
// Subdimension of hyperslab in file: 1 line, elemDim columns.
|
||||
hsize_t dim_sub_file[2];
|
||||
dim_sub_file[0] = 1;
|
||||
dim_sub_file[1] = elemDim;
|
||||
// Define the offset for reading from the memory.
|
||||
// Always fixed, because memory has exactly the same size.
|
||||
hsize_t offset_mem[2];
|
||||
offset_mem[0] = 0;
|
||||
offset_mem[1] = 0;
|
||||
// Define the offset for writing into the file.
|
||||
hsize_t offset_file[2];
|
||||
offset_file[0] = 0; // Row ofsett zero only at the beginning.
|
||||
offset_file[1] = 0; // We have no offset respective to the column.
|
||||
|
||||
// Array for single elements of an element vector.
|
||||
unsigned int element[elemDim];
|
||||
|
||||
// Dimesion and datatype of the file dataset, read out form file.
|
||||
// This is not the fastest, but the most robust way.
|
||||
hsize_t dim_out[2];
|
||||
hid_t dataType;
|
||||
|
||||
// Create dataspace of full size.
|
||||
hdf5DataspaceId = H5Screate_simple(rank, dim, H5P_DEFAULT);
|
||||
|
||||
// Create dataset of full size.
|
||||
hdf5DatasetId = H5Dcreate(hdf5FileIdent_, datasetName.c_str(),
|
||||
H5T_STD_U32LE, hdf5DataspaceId, H5P_DEFAULT);
|
||||
|
||||
// Loop over all rows of the dataset (file) and copy the elem vector
|
||||
// row wise.
|
||||
hdf5Status = H5Sget_simple_extent_dims(hdf5DataspaceId, dim_out,
|
||||
H5P_DEFAULT);
|
||||
// Get the datatype of the datas we want to write.
|
||||
dataType = H5Dget_type(hdf5DatasetId);
|
||||
for (unsigned int varI = 0; varI < dim_out[0]; varI++)
|
||||
{
|
||||
// Iterate over the rows in file dataspace.
|
||||
offset_file[0] = varI;
|
||||
|
||||
// Copy every element of a coordinate.
|
||||
for (unsigned int varJ = 0; varJ < dim_out[1]; varJ++)
|
||||
{
|
||||
// Here is the only special case for automated mapping:
|
||||
// Do not copy the next in the input vector, copy the coord
|
||||
// with the next following number.
|
||||
if (doIndexMapping_ == true)
|
||||
{
|
||||
std::map<unsigned int, unsigned int>::iterator iter;
|
||||
iter = indexMap_.find((*elem)[varI][varJ]);
|
||||
element[varJ] = iter->second;
|
||||
}
|
||||
else
|
||||
element[varJ] = (*elem)[varI][varJ];
|
||||
}
|
||||
|
||||
// Select hyperslab ('region') in file dataspace.
|
||||
hdf5Status = H5Sselect_hyperslab(hdf5DataspaceId, H5S_SELECT_SET,
|
||||
offset_file, H5P_DEFAULT,
|
||||
dim_sub_file, H5P_DEFAULT);
|
||||
// Define memory Dataspace.
|
||||
hid_t hdf5MemspaceId;
|
||||
hdf5MemspaceId = H5Screate_simple(rank, dim_sub_mem, H5P_DEFAULT);
|
||||
// Select hyperslab ('region') in memory.
|
||||
hdf5Status = H5Sselect_hyperslab(hdf5MemspaceId, H5S_SELECT_SET,
|
||||
offset_mem, H5P_DEFAULT,
|
||||
dim_sub_mem, H5P_DEFAULT);
|
||||
// Copy dataset to dataset from memory to file.
|
||||
hdf5Status = H5Dwrite(hdf5DatasetId, dataType,
|
||||
hdf5MemspaceId, hdf5DataspaceId,
|
||||
H5P_DEFAULT, element);
|
||||
// Close the memory space identifier.
|
||||
H5Sclose(hdf5MemspaceId);
|
||||
}
|
||||
|
||||
// Close hdf5 identifier.
|
||||
hdf5Status = H5Dclose(hdf5DatasetId);
|
||||
hdf5Status = H5Sclose(hdf5DataspaceId);
|
||||
|
||||
return OKCODE;
|
||||
}
|
||||
else
|
||||
{
|
||||
rError("You cannot operate to a dataset.");
|
||||
rError("There is no valid file identifier.");
|
||||
exit(ERRORCODE);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** \brief Inquire existence of HDF5 groups */
|
||||
// existsVolumeMesh()
|
||||
// existsCoord()
|
||||
// virtual bool existsMesh(){ return(false); }
|
||||
// virtual bool existsVertices(){ return(false); }
|
||||
// virtual bool existsEdges(){ return(false); }
|
||||
// virtual bool existsTriangles(){ return(false); }
|
||||
// virtual bool existsBoundaryTriangles(){ return(false); }
|
||||
|
||||
// /** \brief Data access both reading and writing */
|
||||
// virtual unsigned int nDim(){ return(ndim_); } /* retrieve number of mesh dimension */
|
||||
// virtual unsigned int nLevel(){ return(nlevel_); } /* retrieve number of mesh levels */
|
||||
// virtual unsigned int nCoord(){ return(nvertex_); } /* retrieve total number of all vertices */
|
||||
// virtual unsigned int nCoord(unsigned int level){ return(nvertex_); } /* retrieve total number of vertices used for defining the mesh */
|
||||
// Überladen greifen auf nelem zu
|
||||
// virtual std::vector<unsigned int> nTet(){ return(ntet_); } /* retrieve vector containing number of tetrahedra present in levels of the mesh */
|
||||
// virtual std::vector<unsigned int> nBoundary(){ return(nboundary_); } /* retrieve vector containing number of boundary meshes present on a level of the mesh */
|
||||
// Pism, ...
|
||||
// nBoundaryTriangle
|
||||
// Quad..
|
||||
// Edge
|
||||
|
||||
|
||||
/** \brief HDF5EM data access routines */
|
||||
|
||||
/** \brief Electromagnetic boundary conditions */
|
||||
//_______________________________
|
||||
// virtual int triangleBC(unsigned int level, unsigned int triangle, unsigned int bc){} /* set electromagnetic boundary condition for triangle on level */
|
||||
// virtual unsigned int triangleBC(unsigned int level, unsigned int triangle){} /* retrieve electromagnetic boundary condition type */
|
||||
//
|
||||
// virtual int rhoSurfaceImpedance(unsigned int level, unsigned int triangle, double rho){} /* store resistance of surface impedance for triangle on level */
|
||||
// virtual double rhoSurfaceImpedance(unsigned int level, unsigned int triangle){} /* retrieve resistance of surface impedance boundary condition */
|
||||
//
|
||||
// /** \brief Mesh */
|
||||
// stl vectoren
|
||||
// virtual unsigned int** tetrahedron(unsigned int level){} /* read tetrahedra on level l stored in hdf5 file and return them in simple form */
|
||||
// virtual int tetrahedron(unsigned int level, unsigned int ntetrahedron, unsigned int** tetrahedron){}
|
||||
// virtual unsigned int* vertexId(){} /* read identification tag of vertices */
|
||||
//
|
||||
// virtual double** vertex(unsigned int level){} /* read vertices */
|
||||
// virtual int vertex(unsigned int nvertex, double** vertex){} /* write vertices */
|
||||
//
|
||||
// virtual unsigned int** boundary(unsigned int level, unsigned int wboundary){} /* read boundary meshes stored in the hdf5 file on level and return number of them */
|
||||
// virtual int boundary(unsigned int level, unsigned int** boundary, unsigned int wboundary){} /* write whichboundary boundary mesh into file */
|
||||
//
|
||||
// virtual unsigned int** edge(unsigned int level, aqmedge* &edge){} /* read edges on level and return number of them */
|
||||
// virtual int edge(unsigned int level, unsigned int* edge){} /* write edges on level and return number of them */
|
||||
//
|
||||
// virtual unsigned int** triangle(unsigned int level){} /* read Triangular faces on level */
|
||||
// virtual int triangle(unsigned int level, unsigned int** triangle){} /* write Triangular faces on level */
|
||||
//
|
||||
// /** \brief Materials */
|
||||
// bool existsMaterials() /* find out if there are materials parameters at discrete frequencies, energies or wavelength */
|
||||
//
|
||||
// vector<double> frequency(){} /* read a vector of discrete frequencies stored in the file */
|
||||
// int frequency(vector<double> f){} /* store a vector of discrete frequencies into the file */
|
||||
//
|
||||
// vector<double> energy(){} /* read a vector of discrete energies stored in the file */
|
||||
// int energy(vector<double> e){} /* store a vector of discrete wavelengths into the file */
|
||||
//
|
||||
// vector<double> wavelength(){} /* read a vector of discrete wavelengths stored in the file */
|
||||
// int wavelength(vector<double> lambda){} /* store a vector of discrete wavelengths into the file */
|
||||
//
|
||||
// vector< complex<double> > permittivity(){} /* read a vector of complex valued relative permittivities from the file */
|
||||
// int permittivity( vector< complex<double> > epsilonr){} /* store a vector of complex valued relative permittivities into the file */
|
||||
//
|
||||
// vector< complex<double> > permeability(){} /* read a vector of complex valued relative permittivities from the file */
|
||||
// int permeability( vector< complex<double> > mur){} /* store a vector of complex valued relative permittivities into the file */
|
||||
//
|
||||
// vector< complex<double> > conductivity(){} /* read a vector of complex valued relative permittivities from the file */
|
||||
// int conductivity( vector< complex<double> sigma>){} /* store a vector of complex valued relative permittivities into the file */
|
||||
//
|
||||
// /** \brief Materials */
|
||||
// bool existsDebyeMaterial(){} /* are the Debye material model paramters */
|
||||
// bool existsLorentz(){} /* are there Lorentz material model parameters */
|
||||
// bool existsDrudeMaterial(){} /* are there Drude material model parameters */
|
||||
//
|
||||
// /* Debye dielectric material model parameters, cf. Taflove et al. pp. 354 */
|
||||
// std<double> weightsDebye(){} /* retrieve vector of Debye material model weights */
|
||||
// int weightsDebye(vector<double> weightsdebye){} /* store vector of Debye material model weights */
|
||||
//
|
||||
// std<double> relaxationFrequencyDebye(){} /* retrieve vector of Debye material model relaxation frequencies */
|
||||
// int relaxationFrequencyDebye(vector<double> relaxfreq){} /* retrieve vector of Debye material model relaxation frequencies */
|
||||
//
|
||||
// double epsilonStaticDebye(){} /* retrieve static limit of relative permittivitiye */
|
||||
// int epsilonStaticDebye(double epsilonstaticr){} /* store static limit of relative permittivitiye */
|
||||
//
|
||||
// double epsilonInfinityDebye(){} /* retrieve infinite limit of relative permittivity */
|
||||
// int epsilonInfinityDebye(double epsiloninftyr){} /* store infinite limit of relative permittivity */
|
||||
//
|
||||
// /* Lorentz dielectric material model parameters, cf. Taflove et al. pp. 354 */
|
||||
// std<double> weightsLorentz(){} /* retrieve vector of Debye material model weights */
|
||||
// int weightsLorentz(vector<double> weightsdebye){} /* store vector of Debye material model weights */
|
||||
//
|
||||
// std<double> poleFrequencyLorentz(){} /* retrieve vector of Lorentz material model relaxation frequencies */
|
||||
// int poleFrequencyDebye(vector<double> polefreq){} /* retrieve vector of Lorentz material model relaxation frequencies */
|
||||
//
|
||||
// std<double> dampingCoefficientLorentz(){} /* retrieve vector of Lorentz material model damping coefficients */
|
||||
// int dampingCoefficientLorentz(vector<double> dampingcoeff){} /* retrieve vector of Lorentz material model damping coefficients */
|
||||
//
|
||||
// double epsilonStaticLorentz(){} /* retrieve static limit of relative permittivitiye */
|
||||
// int epsilonStaticLorentz(double epsilonstaticr){} /* store static limit of relative permittivitiye */
|
||||
//
|
||||
// double epsilonInfinityLorentz(){} /* retrieve infinite limit of relative permittivity */
|
||||
// int epsilonInfinityLorentz(double epsiloninftyr){} /* store infinite limit of relative permittivity */
|
||||
//
|
||||
// /* Drude dielectric material model parameters, cf. Taflove et al. pp. 354 */
|
||||
// std<double> weightsDrude(){} /* retrieve vector of Drude material model weights */
|
||||
// int weightsDrude(vector<double> weightsdebye){} /* store vector of Drude material model weights */
|
||||
//
|
||||
// std<double> poleFrequencyDrude(){} /* retrieve vector of Drude material model pole frequencies */
|
||||
// int poleFrequencyDrude(vector<double> relaxfreq){} /* retrieve vector of Drude material model pole frequencies */
|
||||
//
|
||||
// std<double> inversePoleRelaxationTimeDrude(){} /* retrieve vector of Lorentz material model inverse pole relaxation time */
|
||||
// int inversePoleRelaxationTimeDrude(vector<double> inversepolerelaxtime){} /* retrieve vector of Lorentz material model inverse pole relaxation time */
|
||||
//
|
||||
// double epsilonStaticDrude(){} /* retrieve static limit of relative permittivitiye */
|
||||
// int epsilonStaticDrude(double epsilonstaticr){} /* store static limit of relative permittivitiye */
|
||||
//
|
||||
// double epsilonInfinityDrude(){} /* retrieve infinite limit of relative permittivity */
|
||||
// int epsilonInfinityDRude(double epsiloninftyr){} /* store infinite limit of relative permittivity */
|
||||
//________________________________________________________________
|
||||
// protected:
|
||||
//
|
||||
|
||||
private:
|
||||
//-----------------------------------------------------------------------//
|
||||
// Private data structure. //
|
||||
//-----------------------------------------------------------------------//
|
||||
// Store the filename of the H5Fed here.
|
||||
string fileName_;
|
||||
// Store the file access rights of the H5Fed here.
|
||||
string fileAccess_;
|
||||
|
||||
// Hdf5 error variable stores the success of an Hdf5 action.
|
||||
herr_t hdf5Status_;
|
||||
// Hdf5 file identifier for file access. If a file access fails, the
|
||||
// identifyer is negetive.
|
||||
hid_t hdf5FileIdent_;
|
||||
|
||||
// If the elements we want to write to the h5fed file are not consecutive
|
||||
// and with gaps numbered, this API shoud be able to map this to an gapfree
|
||||
// and consecutive index set.
|
||||
// To activate this function we have the following variable.
|
||||
bool doIndexMapping_;
|
||||
// The first entry in indexMap_ is the old index of a coordinate, the
|
||||
// second is the new index usend in the h5fed file.
|
||||
std::map<unsigned int, unsigned int> indexMap_;
|
||||
// The first entry in positionMap_ is the new index usend in the h5fed
|
||||
// file, the second is the old postion in the coordinate vector.
|
||||
std::map<unsigned int, unsigned int> positionMap_;
|
||||
|
||||
//-----------------------------------------------------------------------//
|
||||
// Private helper functions. //
|
||||
//-----------------------------------------------------------------------//
|
||||
// This function converts a number to a string.
|
||||
template<typename type>
|
||||
inline std::string stringify(type value)
|
||||
{
|
||||
std::ostringstream oStream;
|
||||
try
|
||||
{
|
||||
oStream << value;
|
||||
}
|
||||
catch(exception& error)
|
||||
{
|
||||
rError("Cannot convert this variable to a string.");
|
||||
rError("Error: %d",error.what());
|
||||
exit(ERRORCODE);
|
||||
}
|
||||
return oStream.str();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
} // End of namespace H5Fed
|
||||
|
||||
|
||||
#endif // HAVE_HDF5
|
||||
#endif //H5FED_HH_
|
||||
@@ -0,0 +1,50 @@
|
||||
#ifndef H5FEDCONST_HH_
|
||||
#define H5FEDCONST_HH_
|
||||
|
||||
#include<string>
|
||||
using namespace std;
|
||||
|
||||
//! Hdf5 specific file access:
|
||||
// "r" for read only access.
|
||||
// "w" for read and write access.
|
||||
// "c" create a new a new file with if it does not exist already.
|
||||
// "cf" create a new file, overwrite it if it exists already.
|
||||
const string FILE_READ("r");
|
||||
const string FILE_READ_WRITE("w");
|
||||
const string FILE_CREATE("c");
|
||||
const string FILE_CREATE_FORCE("cf");
|
||||
|
||||
// Define the group names of the H5Fed starndard groups.
|
||||
const string H5FED_G_ROOT ("/HDF5_FINITE_ELEMENT_DATA");
|
||||
const string H5FED_G_COORD (H5FED_G_ROOT+"/COORD");
|
||||
const string H5FED_G_VOLUME_MESH (H5FED_G_ROOT+"/VOLUME_MESH");
|
||||
const string H5FED_G_BOUNDARY_MESH (H5FED_G_ROOT+"/BOUNDARY_MESH");
|
||||
const string H5FED_G_MATERIAL (H5FED_G_ROOT+"/MATERIAL");
|
||||
const string H5FED_G_ELECTROMAGNETIC (H5FED_G_MATERIAL+"/ELECTROMAGNETIC");
|
||||
const string H5FED_G_DISCRETE (H5FED_G_ELECTROMAGNETIC+"/DISCRETE");
|
||||
const string H5FED_G_PHYSICAL (H5FED_G_ELECTROMAGNETIC+"/PHYSICAL");
|
||||
const string H5FED_G_DEBYE (H5FED_G_PHYSICAL+"/DEBYE");
|
||||
const string H5FED_G_LORENTZ (H5FED_G_PHYSICAL+"/LORENTZ");
|
||||
const string H5FED_G_DRUDE (H5FED_G_PHYSICAL+"/DRUDE");
|
||||
const string H5FED_G_DOF (H5FED_G_ROOT+"/DOF");
|
||||
const string H5FED_G_FIELD (H5FED_G_ROOT+"/FIELD");
|
||||
|
||||
// Define the dataset names of the H5Fed standard datasets.
|
||||
const string H5FED_D_COORD3D (H5FED_G_COORD+"/COORD3D");
|
||||
const string H5FED_D_TETMESH (H5FED_G_VOLUME_MESH+"/TETMESH_L");
|
||||
const string H5FED_D_HEXMESH (H5FED_G_VOLUME_MESH+"/HEXMESH_L");
|
||||
const string H5FED_D_PRISMATICMESH (H5FED_G_VOLUME_MESH+"/PRISMATICMESH_L");
|
||||
const string H5FED_D_PYRAMIDMESH (H5FED_G_VOLUME_MESH+"/PYRAMIDMESH_L");
|
||||
const string H5FED_D_TRIANGLEMESH (H5FED_G_VOLUME_MESH+"/TRIANGLEMESH_L");
|
||||
const string H5FED_D_QUADRANGLEMESH (H5FED_G_VOLUME_MESH+"/QUADRANGLEMESH_L");
|
||||
|
||||
// How much nodes have a geometric figure.
|
||||
const unsigned short int H5FED_TET_N_NODE = 4;
|
||||
const unsigned short int H5FED_HEX_N_NODE = 8;
|
||||
const unsigned short int H5FED_PRISMATIC_N_NODE = 6;
|
||||
const unsigned short int H5FED_PYRAMID_N_NODE = 5;
|
||||
const unsigned short int H5FED_TRIANGLE_N_NODE = 3;
|
||||
const unsigned short int H5FED_QUADRANGLE_N_NODE = 4;
|
||||
|
||||
|
||||
#endif /*H5FEDCONST_HH_*/
|
||||
@@ -0,0 +1,14 @@
|
||||
## Makefile.am -- process this file with automake to produce Makefile.in
|
||||
##
|
||||
## authors - benedikt oswald and patrick leidenberger
|
||||
## modified - 2006 aug 24, patrick leidenberger, creation
|
||||
#
|
||||
## objective - automake input file for the h5fed directory
|
||||
## project - gmsh2h5fed
|
||||
|
||||
noinst_LTLIBRARIES = libh5fed.la
|
||||
h5feddir = $(topleveldir)/libsrc/h5fed
|
||||
h5fed_HEADERS = h5fed.hh
|
||||
libh5fed_la_SOURCES = h5fed.cc \
|
||||
h5fed.hh
|
||||
AM_CPPFLAGS = @AM_CPPFLAGS@
|
||||
@@ -0,0 +1,11 @@
|
||||
## Makefile.am -- process this file with automake to produce Makefile.in
|
||||
##
|
||||
## authors - benedikt oswald and patrick leidenberger
|
||||
## modified - 2006 aug 21, patrick leidenberger, creation
|
||||
## modified - 2006 aug 24, pl, add h5fed path.
|
||||
#
|
||||
## objective - automake input file for the libsrc directory
|
||||
## project - gmsh2h5fed
|
||||
|
||||
SUBDIRS = gmsh h5fed
|
||||
AM_CPPFLAGS = @AM_CPPFLAGS@
|
||||
@@ -0,0 +1,143 @@
|
||||
// rights - copyright by benedikt oswald, 2002-2006, all rights reserved
|
||||
// project - phidias3d
|
||||
// file name - nonsciconst.h
|
||||
// file type - c++ include file
|
||||
// author - benedikt oswald
|
||||
// modified - 2004 may 21, creation, benedikt oswald
|
||||
// modified - 2004 jun 11, added font definitions, benedikt oswald
|
||||
// modified - 2006 jun 26, transferred to project phidias3d, benedikt oswald
|
||||
// modified - 2006 jun 28, correction of RIGHTANGLE_DEG from int to double,
|
||||
// patrick leidenberger
|
||||
// modified - 2006 jul 11, add vtk cell type constants,
|
||||
// patrick leidenberger
|
||||
// objective - define technical, non-scientific constants, e.g. plot paper
|
||||
// dimensions etc.
|
||||
|
||||
|
||||
/* include standard libraries */
|
||||
#include <cmath>
|
||||
#include <complex>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
|
||||
#ifndef _NONSCICONST_
|
||||
#define _NONSCICONST_
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace nonsciconst
|
||||
{
|
||||
|
||||
const double A4WIDTH = 210.0;
|
||||
const double A4HEIGHT = 297.0;
|
||||
|
||||
const double A5WIDHT = 105.0;
|
||||
const double A5HEIGHT = 148.5;
|
||||
|
||||
const unsigned int FRAMED = 1;
|
||||
const unsigned int NOTFRAMED = 0;
|
||||
const unsigned int BELOW = 1;
|
||||
const unsigned int ABOVE = 0;
|
||||
const unsigned int ATLEFT = 1;
|
||||
const unsigned int ATRIGHT = 0;
|
||||
const unsigned int FILLED = 1;
|
||||
const unsigned int NOTFILLED = 0;
|
||||
const unsigned int OUTERFACES = 1;
|
||||
const unsigned int INNERFACES = 0;
|
||||
|
||||
const double RIGHTANGLE_DEG = 90.0;
|
||||
|
||||
const unsigned int DRAW_GRID_NODES_FLAG = 1;
|
||||
const unsigned int DRAW_GRID_LINES_FLAG = 1;
|
||||
|
||||
const double MAXHUE = 0.7;
|
||||
const double MAXSAT = 1.0;
|
||||
const double MAXBRG = 1.0;
|
||||
|
||||
const unsigned int GRAY_COLORSPACE = 0;
|
||||
const unsigned int RGB_COLORSPACE = 2;
|
||||
const unsigned int HSB_COLORSPACE = 4;
|
||||
const unsigned int CMYK_COLORSPACE = 8;
|
||||
|
||||
const double HSB_H_BLUE = 0.7;
|
||||
const double HSB_H_RED = 1.0;
|
||||
const double HSB_H_BLACK = 0.1;
|
||||
|
||||
const unsigned int LEGEND_HORIZONTAL = 1;
|
||||
const unsigned int LEGEND_VERTICAL = 0;
|
||||
|
||||
const unsigned int NUMCHARPLTFLNM = 256;
|
||||
const unsigned int NUMCHARSTRINGPLOTPROD = 256;
|
||||
const unsigned int DSPLYSTRLE = 512;
|
||||
const unsigned int MAXFILENAMSTRLEN = 512;
|
||||
const unsigned int DSPSTRLEN = 256;
|
||||
|
||||
const double MINIMUM_DB_VAL = -60.0;
|
||||
|
||||
const string HELVETICA_OBLIQUE_FNT("Helvetica-Oblique");
|
||||
const string HELVETICA_FNT("Helvetica");
|
||||
const string TIMES_FNT("Times-Roman");
|
||||
const string ARIAL_FNT("Arial");
|
||||
const string SYMBOL_FNT("Symbol");
|
||||
|
||||
const double INCHINPT = 72.0; /* define an inch in points, a typographic unit */
|
||||
const double INCHINMM = 25.4; /* define an inch in millimeter */
|
||||
|
||||
const string ELECTRIC_FIELD_UNIT_STRING("[V/m]");
|
||||
const string ELECTRIC_FIELD_UNIT_STRING_DB("[norm. dB]");
|
||||
|
||||
const double TEXT_DOWN_DIR_DEG = 270.0;
|
||||
const double TEXT_RIGHT_DIR_DEG = 0.0;
|
||||
|
||||
const unsigned int COLRSPCDIM = 3;
|
||||
|
||||
const double PSGRAF3_SYMBOL_RADIUS_PCOORD=0.3;
|
||||
|
||||
const int PSGRAF3_SYMBOL_CIRCLE = 0;
|
||||
const int PSGRAF3_SYMBOL_SQUARE = 1;
|
||||
const int PSGRAF3_SYMBOL_RHOMBUS = 2;
|
||||
const int PSGRAF3_SYMBOL_TRIANGLE_TIPUP = 3;
|
||||
const int PSGRAF3_SYMBOL_TRIANGLE_TIPDOWN = 4;
|
||||
|
||||
const int OKCODE = 0;
|
||||
const int ERRORCODE = 1;
|
||||
const int ERROR_SINGULAR_MATRIX = 2;
|
||||
const int ERROR_PSGRAF3_NOT_AVAILABLE = 3;
|
||||
const int ERROR_NNZ_IS_ZERO = 100;
|
||||
|
||||
|
||||
const string VTK_LFF_EXTENSION(".vtk");
|
||||
const string HDF5_EXTENSION(".h5");
|
||||
|
||||
const string TAB_STRING("\t");
|
||||
const string SINGLE_SPACE(" ");
|
||||
|
||||
|
||||
const int DEFAULT_FLOAT_PRECISION=6;
|
||||
|
||||
// Define constants for vtk cell types.
|
||||
const unsigned int VTK_VERTEX = 1;
|
||||
const unsigned int VTK_POLY_VERTEX = 2;
|
||||
const unsigned int VTK_LINE = 3;
|
||||
const unsigned int VTK_POLY_LINE = 4;
|
||||
const unsigned int VTK_TRIANGLE = 5;
|
||||
const unsigned int VTK_TRIANGEL_STRIP = 6;
|
||||
const unsigned int VTK_POLYGON = 7;
|
||||
const unsigned int VTK_PIXEL = 8;
|
||||
const unsigned int VTK_QUAD = 9;
|
||||
const unsigned int VTK_TETRA = 10;
|
||||
const unsigned int VTK_VOXEL = 11;
|
||||
const unsigned int VTK_HEXAHEDRON = 12;
|
||||
const unsigned int VTK_WEDGE = 13;
|
||||
const unsigned int VTK_PYRAMID = 14;
|
||||
const unsigned int VTK_QUADRATIC_EDGE = 21;
|
||||
const unsigned int VTK_QUADRATIC_TRIANGLE = 22;
|
||||
const unsigned int VTK_QUADRATIC_QUAD = 23;
|
||||
const unsigned int VTK_QUADRATIC_TETRA = 24;
|
||||
const unsigned int VTK_QUATRATIC_HEXAHEDRON = 25;
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
// rights - copyright by benedikt oswald, 2002-2006, all rights reserved
|
||||
// project - phidias3d
|
||||
// file name - physicomath.h
|
||||
// file type - c++ include file
|
||||
// author - benedikt oswald
|
||||
// modified - 2003 jan 30, creation -
|
||||
// modified - 2006 jun 26, transferred to project phidias3d, benedikt oswald
|
||||
// objective - physical and mathematical quantities, constansts etc.
|
||||
|
||||
#include <cmath>
|
||||
#include <complex>
|
||||
|
||||
#ifndef _PHYSICO_MATH_
|
||||
#define _PHYSICO_MATH_
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace physicomath
|
||||
{
|
||||
const double ZERO = 0;
|
||||
const int INT_ZERO = 0;
|
||||
const unsigned int UNSIGNED_INT_ZERO = 0;
|
||||
const double DOUBLE_ZERO = 0.0;
|
||||
const int INT_ONE = 1;
|
||||
const unsigned int UNSIGNED_INT_ONE = 1;
|
||||
const int INT_TWO = 2;
|
||||
const double DOUBLE_ONE = 1.0;
|
||||
const double DOUBLE_TWO = 2.0;
|
||||
|
||||
#ifndef IMAGINARY_UNIT_
|
||||
#define IMAGINARY_UNIT_
|
||||
const complex<double> IU(0.0,1.0);
|
||||
#endif
|
||||
|
||||
const double PI = 3.1415926535;
|
||||
const double EPSILON_ZERO = 8.85418782e-12;
|
||||
|
||||
const double MU_ZERO = 4.0 * PI * 1.0e-7;
|
||||
|
||||
const double SPEED_OF_LIGHT = (1.0/(sqrt(EPSILON_ZERO*MU_ZERO)));
|
||||
|
||||
const double Z0 = sqrt(MU_ZERO/EPSILON_ZERO);
|
||||
|
||||
const double TERAHERTZ = 1.0e12;
|
||||
const double GIGAHERTZ = 1.0e9;
|
||||
const double MEGAHERTZ = 1.0e6;
|
||||
const double KILOHERTZ = 1.0e3;
|
||||
|
||||
const double SECOND = 1.0e0;
|
||||
const double MILLISECOND = 1.0e-3;
|
||||
const double MICROSECOND = 1.0e-6;
|
||||
const double NANOSECOND = 1.0e-9;
|
||||
const double PICOSECOND = 1.0e-12;
|
||||
const double FEMTOSECOND = 1.0e-15;
|
||||
|
||||
|
||||
const double L_BAND_CENTER_FREQUENCY=1.414e9;
|
||||
|
||||
const double DOUBLE_REL_ZERO_LIMIT=1.0e-100;
|
||||
|
||||
|
||||
const double METER = 1.0; /* define a meter, the standard */
|
||||
const double DECIMETER = 0.1; /* define a tenth of a meter */
|
||||
const double CENTIMETER = 1.0e-2; /* define a centimeter */
|
||||
const double MICROMETER = 1.0e-6; /* define a micrometer */
|
||||
const double NANOMETER = 1.0e-9; /* define a nanomenter */
|
||||
const double ANGSTROM = 1.0e-10; /* define an angstrom */
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
## Makefile.am -- process this file with automake to produce Makefile.in
|
||||
##
|
||||
## authors - patrick leidenberger
|
||||
## modified - 2006 aug 21, patrick leidenberger, creation
|
||||
## objective - top level automake file for H5Fed
|
||||
## project - H5Fed
|
||||
|
||||
SUBDIRS = libsrc applications
|
||||
|
||||
AM_CPPFLAGS = @AM_CPPFLAGS@
|
||||
@@ -2,7 +2,6 @@
|
||||
# Top level Makefile.am
|
||||
|
||||
SUBDIRS = \
|
||||
doc \
|
||||
src \
|
||||
test \
|
||||
tools
|
||||
|
||||
@@ -354,31 +354,6 @@ run:
|
||||
./H5PartTest
|
||||
|
||||
|
||||
(6) Cray XT3 @ CSCS gele
|
||||
|
||||
1) modules/3.1.6 9) PrgEnv-pgi/1.4.26 17) xt-lustre-ss/1.4.26
|
||||
2) MySQL/4.0.26 10) xt-pbs/5.3.4 18) Base-opts/1.4.26
|
||||
3) acml/3.0 11) xt-service/1.4.26 19) subversion/1.3.2
|
||||
4) pgi/6.1.4 12) xt-libc/1.4.26 20) zlib/1.2.3
|
||||
5) totalview/7.2.0 13) xt-os/1.4.26 21) szip/2.0
|
||||
6) xt-libsci/1.4.26 14) xt-catamount/1.4.26 22) hdf5/1.6.5
|
||||
7) xt-mpt/1.4.26 15) xt-boot/1.4.26
|
||||
8) xt-pe/1.4.26 16) xt-crms/1.4.26
|
||||
|
||||
|
||||
CFLAGS="-I$H5HOME/include -DF77_SINGLE_UNDERSCORE" LDFLAGS="-L$H5HOME/lib -L$ZHOME/lib" ./configure --enable-parallel --enable-fortran
|
||||
|
||||
|
||||
(7) merlin00 / merlin3
|
||||
|
||||
Currently Loaded Modulefiles:
|
||||
1) hdf5/hdf5-1.6.5 2) root/root-5.10.00 3) mpi/mpich2-1.0.3-pgi-6.1 4) pgi/pgi_64-6.1
|
||||
|
||||
FC=mpif90 ./configure --enable-parallel --enable-fortran
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Every configure script must call AC_INIT before doing anything else.
|
||||
# AC_INIT (package, version, [bug-report], [tarname])
|
||||
AC_INIT([H5Part], [1.4.0], [h5part@lists.psi.ch], H5Part)
|
||||
AC_INIT([H5Part], [Ver.1.0], [vis@hpcrdm.lbl.gov])
|
||||
|
||||
|
||||
# Ensure that a recent enough version of Autoconf is being used.
|
||||
@@ -14,49 +14,11 @@ AC_INIT([H5Part], [1.4.0], [h5part@lists.psi.ch], H5Part)
|
||||
# The AC_CONFIG_HEADERS macro selects this kind of output.
|
||||
AC_CONFIG_HEADER(config.h)
|
||||
|
||||
###############################################################################
|
||||
################# --enable-xxx and --with-xxx Argument ########################
|
||||
###############################################################################
|
||||
|
||||
AC_ARG_ENABLE(
|
||||
[64],
|
||||
[AC_HELP_STRING([--enable-64],
|
||||
[Compile using 64-bit flags [default=no]])],
|
||||
[USE_64=$enableval])
|
||||
##################################################################################
|
||||
#################### A SIMPLE WORK AROUND TO USE ENV. VARS #######################
|
||||
##################################################################################
|
||||
|
||||
AC_ARG_ENABLE(
|
||||
[fortran],
|
||||
[AC_HELP_STRING([--enable-fortran],
|
||||
[Compile the Fortran interface [default=no]])],
|
||||
[USE_FORTRAN=$enableval])
|
||||
|
||||
AC_ARG_ENABLE(
|
||||
[parallel],
|
||||
[AC_HELP_STRING([--enable-parallel],
|
||||
[Compile the MPI/IO interface [default=no]])],
|
||||
[USE_PARALLEL=$enableval])
|
||||
|
||||
AC_ARG_ENABLE(
|
||||
[tools],
|
||||
[AC_HELP_STRING([--enable-tools],
|
||||
[Compile h5part tools [default=no]])],
|
||||
[USE_TOOLS=$enableval])
|
||||
|
||||
AC_ARG_WITH(
|
||||
[mpipath],
|
||||
[AC_HELP_STRING([--with-mpipath],
|
||||
[path to MPI installation [default=""]])],
|
||||
[MPIPATH=$withval], [MPIPATH=""])
|
||||
|
||||
AC_ARG_WITH(
|
||||
[hdf5path],
|
||||
[AC_HELP_STRING([--with-hdf5path],
|
||||
[path to HDF5 installation [default=""]])],
|
||||
[HDF5PATH=$withval], [HDF5PATH=""])
|
||||
|
||||
###############################################################################
|
||||
################# A SIMPLE WORK AROUND TO USE ENV. VARS #######################
|
||||
###############################################################################
|
||||
|
||||
SAVE_CC=$CC
|
||||
SAVE_CXX=$CXX
|
||||
@@ -67,15 +29,16 @@ SAVE_MPIFC=$MPIFC
|
||||
SAVE_MPILIB=$MPILIB
|
||||
SAVE_MPIINC=$MPIINC
|
||||
SAVE_CFLAGS=$CFLAGS
|
||||
CFLAGS=''
|
||||
SAVE_FFLAGS=$FFLAGS
|
||||
SAVE_MPIROOT=$MPIROOT
|
||||
SAVE_HDF5ROOT=$HDF5ROOT
|
||||
SAVE_PHDF5ROOT=$PHDF5ROOT
|
||||
SAVE_LDFLAGS=$LDFLAGS
|
||||
|
||||
###############################################################################
|
||||
############### PATH SERACH FUNCTION - to be used later... ####################
|
||||
###############################################################################
|
||||
|
||||
##################################################################################
|
||||
################## PATH SERACH FUNCTION - to be used later... ####################
|
||||
##################################################################################
|
||||
# /*@@
|
||||
# @routine CCTK_Search
|
||||
# @date Wed Jul 21 11:16:35 1999
|
||||
@@ -95,18 +58,18 @@ PATH_Search()
|
||||
fi
|
||||
for h5part_place in $2
|
||||
do
|
||||
echo -n "looking in $h5part_place ... $ac_c" #1>&6
|
||||
echo -n "Looking in $h5part_place ... $ac_c" #1>&6
|
||||
if test -r "$h5part_basedir$h5part_place/$3" ; then
|
||||
echo "$ac_t"" found" #1>&6
|
||||
echo "$ac_t"" Found" #1>&6
|
||||
eval $1="$h5part_place"
|
||||
break
|
||||
fi
|
||||
if test -d "$h5part_basedir$h5part_place/$3" ; then
|
||||
echo "$ac_t"" found" #1>&6
|
||||
echo "$ac_t"" Found" #1>&6
|
||||
eval $1="$h5part_place"
|
||||
break
|
||||
fi
|
||||
echo "$ac_t"" no" #1>&6
|
||||
echo "$ac_t"" No" #1>&6
|
||||
done
|
||||
|
||||
return
|
||||
@@ -114,17 +77,23 @@ PATH_Search()
|
||||
|
||||
|
||||
|
||||
###############################################################################
|
||||
############# MISC SETTINGS INCLUDING C & C++ COMPILER SETTING ################
|
||||
###############################################################################
|
||||
# Compute the canonical host-system type variable, host, and its three
|
||||
# individual parts host_cpu, host_vendor, and host_os.
|
||||
##################################################################################
|
||||
################ MISC SETTINGS INCLUDING C & C++ COMPILER SETTING ################
|
||||
##################################################################################
|
||||
# Compute the canonical host-system type variable, host, and its three individual
|
||||
# parts host_cpu, host_vendor, and host_os.
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
|
||||
uname=`uname -s`
|
||||
if test $uname = "AIX"; then
|
||||
# Notify the user that configure is checking for a particular feature.
|
||||
# This macro prints a message that starts with `checking ' and ends with `...' and no newline.
|
||||
# It must be (?) followed by a call to AC_MSG_RESULT to print the result of the check and the newline.
|
||||
AC_MSG_CHECKING([if system is AIX])
|
||||
|
||||
# AC_MSG_RESULT (result-description)
|
||||
# Notify the user of the results of a check
|
||||
AC_MSG_RESULT([OK])
|
||||
|
||||
# If on AIX, define _ALL_SOURCE. Allows the use of some BSD functions.
|
||||
@@ -154,13 +123,12 @@ fi
|
||||
|
||||
|
||||
# Determine a C compiler to use.
|
||||
# If CC is not already set in the environment, check for gcc and cc, then
|
||||
# for other C compilers.
|
||||
# If CC is not already set in the environment, check for gcc and cc, then for other C compilers.
|
||||
# Set output variable CC to the name of the compiler found.
|
||||
# Look for mpicc first, then icc, mpcc_r
|
||||
AC_PROG_CC(pathcc icc cc_r gcc cc)
|
||||
|
||||
# AC_PROG_CC doesn't pick up cc_r in Bassi. The following AC_PATH_PROGS
|
||||
# is the fix.
|
||||
# AC_PROG_CC doesn't pick up cc_r in Bassi. The following AC_PATH_PROGS is the fix.
|
||||
AC_PATH_PROGS([BAS_CC], [cc_r], [], [$PATH])
|
||||
|
||||
# if BAS_CC not empty
|
||||
@@ -175,14 +143,13 @@ fi
|
||||
# Check if the environment variable CXX or CCC (in that order) is set;
|
||||
# if so, then set output variable CXX to its value.
|
||||
# Otherwise, if the macro is invoked without an argument,
|
||||
# then search for a C++ compiler under the likely names (first g++ and c++
|
||||
# then other names).
|
||||
# then search for a C++ compiler under the likely names (first g++ and c++ then other names).
|
||||
# If none of those checks succeed, then as a last resort set CXX to g++.
|
||||
AC_PROG_CXX(pathCC icc cc_r g++ gcc cc)
|
||||
|
||||
|
||||
# Set output variable INSTALL to the path of a BSD-compatible install program,
|
||||
# if one is found in the current PATH.
|
||||
# Set output variable INSTALL to the path of a BSD-compatible install program, if one is
|
||||
# found in the current PATH.
|
||||
# Otherwise, set INSTALL to `dir/install-sh -c`
|
||||
AC_PROG_INSTALL
|
||||
|
||||
@@ -208,72 +175,93 @@ AC_DEFINE_UNQUOTED(MY_UNAME, "$uname", "")
|
||||
|
||||
|
||||
|
||||
###############################################################################
|
||||
######################## CONFIGURE LINE OPTIONS ###############################
|
||||
###############################################################################
|
||||
##################################################################################
|
||||
########################### CONFIGURE LINE OPTIONS ###############################
|
||||
##################################################################################
|
||||
|
||||
###################### 64-bit compilation enabled #############################
|
||||
######################### 64-bit compilation enabled #############################
|
||||
AC_MSG_CHECKING([if 64-bit compilation is enabled])
|
||||
|
||||
# AC_ARG_ENABLE (feature, help-string, [action-if-given], [action-if-not-given])
|
||||
# If the user gave configure the option `--enable-feature' or `--disable-feature',
|
||||
# run shell commands action-if-given.
|
||||
# You should format your help-string with the macro AC_HELP_STRING.
|
||||
AC_ARG_ENABLE([64],
|
||||
[AC_HELP_STRING([--enable-64],[Compile using 64-bit flags [default=no]])],
|
||||
[USE_64=$enableval])
|
||||
|
||||
|
||||
# If --enable-64 is set in the configure line
|
||||
if test "X$USE_64" = "Xyes"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
if test $uname = "AIX"; then
|
||||
CFLAGS="$CFLAGS -q64"
|
||||
FFLAGS="$FFLAGS -q64"
|
||||
fi
|
||||
echo "YES, 64-BIT ENABLED"
|
||||
if test $uname = "AIX"; then
|
||||
CFLAGS="$CFLAGS -q64"
|
||||
FFLAGS="$FFLAGS -q64"
|
||||
fi
|
||||
|
||||
if test $uname = "IRIX64"; then
|
||||
CFLAGS="$CFLAGS -64"
|
||||
FFLAGS="$FFLAGS -64 -fPIC -fno-second-underscore"
|
||||
fi
|
||||
if test $uname = "IRIX64"; then
|
||||
CFLAGS="$CFLAGS -64"
|
||||
FFLAGS="$FFLAGS -64 -fPIC -fno-second-underscore"
|
||||
fi
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
echo "NO, 64-BIT NOT ENABLED"
|
||||
fi
|
||||
|
||||
|
||||
############################ fortran enabled ##################################
|
||||
############################### fortran enabled ##################################
|
||||
AC_MSG_CHECKING([if fortran interface enabled])
|
||||
AC_MSG_RESULT([])
|
||||
AC_ARG_ENABLE([fortran],
|
||||
[AC_HELP_STRING([--enable-fortran], [Compile the Fortran interface [default=no]])],
|
||||
[USE_FORTRAN=$enableval])
|
||||
|
||||
|
||||
if test "X$USE_FORTRAN" = "Xyes"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
echo "YES, FORTRAN ENABLED"
|
||||
|
||||
AC_PROG_FC(ifort xlf_r pathf90 g95 g90 ftn gfortran)
|
||||
if test -z "$FC" ; then
|
||||
AC_MSG_ERROR([Cannot find a fortran compiler!!!])
|
||||
exit 1
|
||||
fi
|
||||
# Start looking for ifort first
|
||||
AC_PROG_FC(ifort xlf_r pathf90 g95 g90 ftn)
|
||||
|
||||
if test ! $uname = "AIX"; then
|
||||
FFLAGS="${FFLAGS} -fPIC -fno-second-underscore"
|
||||
fi
|
||||
if test -n "$FC" ; then
|
||||
if test "X$FC" = "Xg95"; then
|
||||
FFLAGS="${FFLAGS} -fno-second-underscore"
|
||||
fi
|
||||
AC_MSG_CHECKING([Test Number of FC Underscores])
|
||||
AC_MSG_RESULT([OK])
|
||||
`cd src && rm -f TestUnderscore.o TestUnderscoreC.o TestUnderscore`
|
||||
`cd src && ${FC} ${FFLAGS} -c TestUnderscore.f`
|
||||
`cd src && ${CC} ${CFLAGS} -c TestUnderscoreC.c`
|
||||
`cd src && ${FC} ${FFLAGS} -o TestUnderscore TestUnderscore.o TestUnderscoreC.o -lc`
|
||||
|
||||
AC_MSG_CHECKING([symbol convention in object files])
|
||||
`cd src && rm -f TestUnderscore.o TestUnderscoreC.o TestUnderscore`
|
||||
`cd src && ${FC} ${FFLAGS} -c TestUnderscore.f`
|
||||
`cd src && ${CC} ${CFLAGS} -c TestUnderscoreC.c`
|
||||
`cd src && ${FC} ${FFLAGS} -o TestUnderscore TestUnderscore.o TestUnderscoreC.o -lc`
|
||||
|
||||
if test -f src/TestUnderscore ; then
|
||||
UNDERSCORE_H=Underscore.h
|
||||
`cd src && ./TestUnderscore > Underscore.h`
|
||||
AC_MSG_RESULT([ok])
|
||||
else
|
||||
AC_MSG_RESULT([nok])
|
||||
AC_MSG_ERROR([Cannot build fortran executables!!!])
|
||||
exit 1
|
||||
fi
|
||||
if test -f src/TestUnderscore ; then
|
||||
UNDERSCORE_H=Underscore.h
|
||||
`cd src && cat COPYRIGHT > Underscore.h`
|
||||
`cd src && ./TestUnderscore >> Underscore.h`
|
||||
echo "==== Underscore.h contains ============="
|
||||
cat src/Underscore.h
|
||||
echo "========================================"
|
||||
else
|
||||
AC_MSG_ERROR(could not build fortran executable)
|
||||
USE_FORTRAN = "no"
|
||||
fi
|
||||
else
|
||||
AC_MSG_ERROR(could not find a fortran compiler)
|
||||
USE_FORTRAN = "no"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
echo "NO, FORTRAN NOT ENABLED"
|
||||
fi
|
||||
|
||||
|
||||
######################## parallel interface enabled ###########################
|
||||
########################### parallel interface enabled ###########################
|
||||
AC_MSG_CHECKING([if parallel interface enabled])
|
||||
if test "X$USE_PARALLEL" = "Xyes"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
AC_ARG_ENABLE([parallel],
|
||||
[AC_HELP_STRING([--enable-parallel], [Compile the MPI/IO interface [default=no]])],
|
||||
[USE_PARALLEL=$enableval])
|
||||
|
||||
CFLAGS="${CFLAGS} -DPARALLEL_IO -DH5_HAVE_PARALLEL -DMPICH_IGNORE_CXX_SEEK"
|
||||
if test "X$USE_PARALLEL" = "Xyes"; then
|
||||
AC_MSG_RESULT([YES, PARALLEL ENABLED])
|
||||
|
||||
AC_MSG_CHECKING([if we can compile MPI code without setting flags])
|
||||
AC_TRY_LINK([#include "mpi.h"], [
|
||||
@@ -282,19 +270,24 @@ if test "X$USE_PARALLEL" = "Xyes"; then
|
||||
MPI_Comm_size( comm, &n ); ],
|
||||
[echo 'yes'; r='yes'], [echo "no"; r='no'] )
|
||||
|
||||
if test "X$r" = "Xno"; then
|
||||
if test "X$r" = "Xyes"; then
|
||||
MPICC=$CC
|
||||
set -x
|
||||
if test -z "$MPICXX"; then
|
||||
# we should add a test whether this C++ wrapper exists or not
|
||||
MPICXX=${MPICC%/*}/mpicxx
|
||||
fi
|
||||
set +x
|
||||
else
|
||||
AC_PATH_PROGS([MPICC], [mpicc mpcc_r], [], [$PATH])
|
||||
AC_PATH_PROGS([MPICXX], [mpicxx mpcc_r], [], [$PATH])
|
||||
if test -z "$MPICC" -o -z "$MPICXX"; then
|
||||
AC_MSG_CHECKING([for MPI root ])
|
||||
AC_MSG_RESULT([])
|
||||
if test -n "$MPIROOT"; then
|
||||
P=${MPIROOT}
|
||||
elif test -n "$MPIHOME"; then
|
||||
P=${MPIHOME}
|
||||
elif test -n "$MPIPATH"; then
|
||||
P=${MPIPATH}
|
||||
else
|
||||
AC_ARG_ENABLE([mpipath],
|
||||
[AC_HELP_STRING([--enable-mpipath], [path to MPI installation [default=""]])],
|
||||
[MPIROOT=$enableval], [MPIROOT=""])
|
||||
if test -z "$MPIROOT"; then
|
||||
AC_MSG_CHECKING([for MPI root ])
|
||||
echo
|
||||
P=''
|
||||
P="$P /usr"
|
||||
P="$P /usr/local"
|
||||
@@ -303,23 +296,25 @@ if test "X$USE_PARALLEL" = "Xyes"; then
|
||||
P="$P /usr/local/mpich2"
|
||||
P="$P /usr/local/mpich"
|
||||
P="$P /opt/xt-mpt/default/mpich2-64/P2"
|
||||
PATH_Search MPIROOT "$P" include/mpi.h
|
||||
fi
|
||||
PATH_Search MPIROOT "$P" include/mpi.h
|
||||
if test ! -n "$MPIROOT"; then
|
||||
AC_MSG_ERROR([Cannot determine MPI root!!!])
|
||||
AC_MSG_RESULT([Cannot determine MPIROOT])
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -e "${MPIROOT}/bin/mpicc"; then
|
||||
MPICC=${MPIROOT}/bin/mpicc
|
||||
fi
|
||||
|
||||
if test -e "${MPIROOT}/bin/mpicxx"; then
|
||||
MPICXX=${MPIROOT}/bin/mpicxx
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -z "$MPICC" -o -z "$MPICXX"; then
|
||||
if test ! -n "$MPICC"; then
|
||||
AC_MSG_CHECKING([No MPICC detected. Setting MPICC to CC.])
|
||||
MPICC=$CC
|
||||
echo "MPICC = $MPICC"
|
||||
fi
|
||||
|
||||
# if MPICXX empty
|
||||
if test ! -n "$MPICXX"; then
|
||||
MPICXX=$CXX
|
||||
AC_MSG_CHECKING([No MPICXX detected. Setting MPICXX = CXX = $MPICXX ])
|
||||
echo
|
||||
fi
|
||||
|
||||
MPIINC="${MPIINC} -I${MPIROOT}/include"
|
||||
FFLAGS="${FFLAGS} -I${MPIROOT}/include"
|
||||
AC_MSG_CHECKING([for name of MPI lib ])
|
||||
@@ -336,31 +331,14 @@ if test "X$USE_PARALLEL" = "Xyes"; then
|
||||
exit 1
|
||||
fi
|
||||
AC_MSG_RESULT([${MPILIB}])
|
||||
fi
|
||||
|
||||
if test -n "$MPICC"; then
|
||||
CC=${MPICC}
|
||||
fi
|
||||
|
||||
if test -n "$MPICXX"; then
|
||||
CXX=${MPICXX}
|
||||
fi
|
||||
fi
|
||||
|
||||
MTARGET="libpH5Part.a"
|
||||
TTARGET="H5PartTestP H5PartAndreasTest Bench"
|
||||
TTARGET="${TTARGET} H5BlockTestAttributes"
|
||||
TTARGET="${TTARGET} H5BlockParTestScalarField"
|
||||
|
||||
# parallel + fortran
|
||||
if test "X$USE_FORTRAN" = "Xyes"; then
|
||||
echo "PARALLEL ENABLED WITH FORTRAN"
|
||||
|
||||
AC_PATH_PROGS([MPIFC], [mpxlf_r mpif90], [], [$PATH])
|
||||
|
||||
if test -z "${MPIFC}" ; then
|
||||
if test -e "${MPIROOT}/bin/mpif90"; then
|
||||
MPIFC=${MPIROOT}/bin/mpif90
|
||||
fi
|
||||
fi
|
||||
|
||||
# if MPIFC empty
|
||||
if test ! -n "$MPIFC"; then
|
||||
@@ -368,86 +346,100 @@ if test "X$USE_PARALLEL" = "Xyes"; then
|
||||
MPIFC=$FC
|
||||
echo "MPIFC = $MPIFC ..."
|
||||
fi
|
||||
|
||||
if test -n "$MPIFC"; then
|
||||
FC=${MPIFC}
|
||||
fi
|
||||
|
||||
MTARGET="${MTARGET} libpH5PartF.a"
|
||||
TTARGET="${TTARGET} H5testFpar"
|
||||
TTARGET="${TTARGET} H5BlockParTestScalarFieldF"
|
||||
MTARGET="libpH5Part.a libpH5PartF.a"
|
||||
TTARGET="H5PartTestP H5PartAndreasTest H5testFpar Bench"
|
||||
else
|
||||
echo "PARALLEL ENABLED WITHOUT FORTRAN"
|
||||
|
||||
MTARGET="libpH5Part.a"
|
||||
TTARGET="H5PartTestP H5PartAndreasTest Bench"
|
||||
fi
|
||||
|
||||
else # --enable-parallel=no
|
||||
AC_MSG_RESULT([no])
|
||||
|
||||
MTARGET="libH5Part.a"
|
||||
TTARGET="H5PartTest H5test"
|
||||
TTARGET="${TTARGET} H5BlockTestAttributes"
|
||||
else
|
||||
echo "NO, PARALLEL NOT ENABLED"
|
||||
|
||||
if test "X$USE_FORTRAN" = "Xyes"; then
|
||||
MTARGET="${MTARGET} libH5PartF.a"
|
||||
TTARGET="${TTARGET} H5testF"
|
||||
TTARGET="${TTARGET} H5BlockTestAttributesF"
|
||||
echo "PARALLEL NOT ENABLED WITH FORTRAN ENABLED"
|
||||
|
||||
MTARGET="libH5Part.a libH5PartF.a"
|
||||
TTARGET="H5PartTest H5testF H5test"
|
||||
else
|
||||
echo "BOTH PARALLEL & FORTRAN NOT ENABLED"
|
||||
|
||||
MTARGET="libH5Part.a"
|
||||
TTARGET="H5PartTest H5test"
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([wheter tools are enabled])
|
||||
AC_MSG_CHECKING([for h5pTools file: ])
|
||||
AC_MSG_RESULT([OK])
|
||||
AC_ARG_ENABLE([tools],
|
||||
[AC_HELP_STRING([--enable-tools], [Compile h5part tools [default=no]])],
|
||||
[USE_TOOLS=$enableval])
|
||||
|
||||
|
||||
if test "X$USE_TOOLS" = "Xyes"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
BUILD_TOOLS="h5pAttrib h5pToGNUplot # homdynToH5p"
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
BUILD_TOOLS="h5pAttrib h5pToGNUplot"
|
||||
fi
|
||||
|
||||
###############################################################################
|
||||
######################### PATH CHECKING & SETTING #############################
|
||||
###############################################################################
|
||||
##################################################################################
|
||||
############################ PATH CHECKING & SETTING #############################
|
||||
##################################################################################
|
||||
|
||||
AC_MSG_CHECKING([for HDF5 root ])
|
||||
AC_MSG_RESULT([])
|
||||
if test -n "${HDF5ROOT}"; then
|
||||
P=${HDF5ROOT}
|
||||
elif test -n "${HDF5HOME}" ; then
|
||||
P=${HDF5HOME}
|
||||
elif test -n "${HDF5PATH}" ; then
|
||||
P=${HDF5PATH}
|
||||
else
|
||||
P=''
|
||||
P="$P /usr"
|
||||
P="$P /usr/local"
|
||||
P="$P /usr/local/hdf5"
|
||||
P="$P /usr/local/packages/hdf5"
|
||||
P="$P /apps/hdf5"
|
||||
AC_ARG_ENABLE([hdf5path],
|
||||
[AC_HELP_STRING([--enable-hdf5path], [path to HDF5 installation [default=""]])],
|
||||
[XROOT=$enableval], [XROOT=""])
|
||||
|
||||
if test "X$USE_PARALLEL" = "Xyes"; then
|
||||
if test "X$USE_PARALLEL" = "Xyes"; then
|
||||
PHDF5ROOT=$XROOT
|
||||
if test -z "$PHDF5ROOT"; then
|
||||
AC_MSG_CHECKING([for Parallel HDF5 root ])
|
||||
AC_MSG_RESULT([])
|
||||
P=''
|
||||
P="$P /usr"
|
||||
P="$P /usr/local"
|
||||
P="$P /usr/local/phdf5"
|
||||
P="$P /usr/local/hdf5"
|
||||
P="$P /usr/local/packages/hdf5"
|
||||
P="$P /usr/local/hdf5/hdf5_par"
|
||||
P="$P /apps/hdf5"
|
||||
|
||||
if test "X$USE_64" = "Xyes"; then
|
||||
P="$P /usr/common/usg/hdf5/64/default/parallel"
|
||||
else
|
||||
P="$P /usr/common/usg/hdf5/32/default/parallel"
|
||||
fi
|
||||
else
|
||||
PATH_Search PHDF5ROOT "$P" include/hdf5.h
|
||||
XROOT=$HDF5ROOT
|
||||
fi
|
||||
else
|
||||
HDF5ROOT=$XROOT
|
||||
if test -z "$HDF5ROOT"; then
|
||||
AC_MSG_CHECKING([for HDF5 library location ])
|
||||
AC_MSG_RESULT([])
|
||||
P=''
|
||||
P="$P /usr"
|
||||
P="$P /usr/local"
|
||||
P="$P /usr/local/hdf5"
|
||||
P="$P /usr/local/packages/hdf5"
|
||||
P="$P /usr/local/hdf5/hdf5_serial"
|
||||
P="$P /apps/hdf5"
|
||||
if test "X$USE_64" = "Xyes"; then
|
||||
P="$P /usr/common/usg/hdf5/64/default/serial"
|
||||
else
|
||||
P="$P /usr/common/usg/hdf5/32/default/serial"
|
||||
fi
|
||||
PATH_Search HDF5ROOT "$P" include/hdf5.h
|
||||
XROOT=$HDF5ROOT
|
||||
fi
|
||||
fi
|
||||
PATH_Search HDF5ROOT "$P" include/hdf5.h
|
||||
if test -z "$HDF5ROOT"; then
|
||||
AC_MSG_ERROR([Cannot determine HDF5 root!!!])
|
||||
exit 1
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([if we need to link to libsz ])
|
||||
if test -n "$HDF5ROOT"; then
|
||||
if test -f $HDF5ROOT/lib/libsz.a; then
|
||||
if test -n "$XROOT"; then
|
||||
if test -f $XROOT/lib/libsz.a; then
|
||||
AC_MSG_RESULT([yes])
|
||||
SZLIB="-L$HDF5ROOT/lib/ -lsz"
|
||||
SZLIB="-L$XROOT/lib/ -lsz"
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
SZLIB=""
|
||||
@@ -462,15 +454,23 @@ if test -n "$ZLIBROOT"; then
|
||||
fi
|
||||
|
||||
|
||||
###############################################################################
|
||||
#################### MISC SETTINGS - path, flags, etc #########################
|
||||
###############################################################################
|
||||
##################################################################################
|
||||
####################### MISC SETTINGS - path, flags, etc #########################
|
||||
##################################################################################
|
||||
|
||||
# if not AIX
|
||||
if test ! $uname = "AIX"; then
|
||||
# Additional flags
|
||||
echo "SETTING ADDITIONAL FLAGS"
|
||||
ADDFLAGS="-fPIC -fno-second-underscore"
|
||||
fi
|
||||
|
||||
|
||||
H5P_LIB_LOC=`pwd`/src
|
||||
|
||||
###############################################################################
|
||||
################# A SIMPLE WORK AROUND TO USE ENV. VARS #######################
|
||||
###############################################################################
|
||||
##################################################################################
|
||||
#################### A SIMPLE WORK AROUND TO USE ENV. VARS #######################
|
||||
##################################################################################
|
||||
|
||||
#if there was an external input for the variable...
|
||||
if test -n "$SAVE_CC"; then
|
||||
@@ -506,7 +506,7 @@ MPIINC=$SAVE_MPIINC
|
||||
fi
|
||||
|
||||
if test -n "$SAVE_CFLAGS"; then
|
||||
CFLAGS="$SAVE_CFLAGS ${CFLAGS}"
|
||||
CFLAGS=$SAVE_CFLAGS
|
||||
fi
|
||||
|
||||
if test -n "$SAVE_FFLAGS"; then
|
||||
@@ -521,6 +521,10 @@ if test -n "$SAVE_HDF5ROOT"; then
|
||||
HDF5ROOT=$SAVE_HDF5ROOT
|
||||
fi
|
||||
|
||||
if test -n "$SAVE_PHDF5ROOT"; then
|
||||
PHDF5ROOT=$SAVE_PHDF5ROOT
|
||||
fi
|
||||
|
||||
if test -n "$SAVE_LDFLAGS"; then
|
||||
LDFLAGS=$SAVE_LDFLAGS
|
||||
fi
|
||||
@@ -528,16 +532,47 @@ fi
|
||||
if test -n "$MPICXX"; then
|
||||
TOOLS_CXX=$MPICXX
|
||||
TOOLS_H5PART_LIB="-lpH5Part"
|
||||
TOOLS_HDFLIB="-L$HDF5ROOT/lib -lhdf5"
|
||||
TOOLS_HDFLIB="-L$PHDF5ROOT/lib -lhdf5"
|
||||
else
|
||||
TOOLS_CXX=$CXX
|
||||
TOOLS_H5PART_LIB="-lH5Part"
|
||||
TOOLS_HDFLIB="-L$HDF5ROOT/lib -lhdf5"
|
||||
fi
|
||||
|
||||
###############################################################################
|
||||
############## EXPORTING VARIABLES & CREATING OUTPUT FILES ####################
|
||||
###############################################################################
|
||||
##################################################################################
|
||||
############################# PRINTING SUMMARY ###################################
|
||||
##################################################################################
|
||||
echo "+++++++++++++++++++++++++++++++"
|
||||
echo "+++++++++ SUMMARY for `(hostname || uname -n) 2>/dev/null | sed 1q` +++++++++"
|
||||
echo "CC = $CC"
|
||||
echo "CXX = $CXX"
|
||||
echo "FC = $FC"
|
||||
echo "MPICC = $MPICC"
|
||||
echo "MPICXX = $MPICXX"
|
||||
echo "MPIFC = $MPIFC"
|
||||
echo "CFLAGS = $CFLAGS"
|
||||
echo "FFLAGS = $FFLAGS"
|
||||
echo "MPILIB = $MPILIB"
|
||||
echo "MPIINC = $MPIINC"
|
||||
echo "MPIROOT = $MPIROOT"
|
||||
echo "HDF5ROOT = $HDF5ROOT"
|
||||
echo "PHDF5ROOT = $PHDF5ROOT"
|
||||
echo "LDFLAGS = $LDFLAGS"
|
||||
echo "host_os = $host_os"
|
||||
echo "host_cpu = $host_cpu"
|
||||
echo "host_vendor = $host_vendor"
|
||||
echo "Will Be Building Libraries ... : $MTARGET"
|
||||
echo "Will Be Building Test Programs ... : $TTARGET"
|
||||
echo "TOOLS_CXX = $TOOLS_CXX"
|
||||
echo "TOOLS_H5PART_LIB = $TOOLS_H5PART_LIB"
|
||||
echo "TOOLS_HDFLIB = $TOOLS_HDFLIB"
|
||||
echo "BUILD_TOOLS = $BUILD_TOOLS"
|
||||
echo "+++++++++++++++++++++++++++++++"
|
||||
|
||||
|
||||
##################################################################################
|
||||
################# EXPORTING VARIABLES & CREATING OUTPUT FILES ####################
|
||||
##################################################################################
|
||||
# AC_SUBST (variable, [value])
|
||||
# Create an output variable from a shell variable.
|
||||
# Make AC_OUTPUT substitute the variable variable into output files (typically one or more `Makefile's).
|
||||
@@ -547,6 +582,7 @@ fi
|
||||
# If value is given, in addition assign it to variable.
|
||||
AC_SUBST(MPIROOT)
|
||||
AC_SUBST(HDF5ROOT)
|
||||
AC_SUBST(PHDF5ROOT)
|
||||
AC_SUBST(MPIINC)
|
||||
AC_SUBST(MPILIB)
|
||||
AC_SUBST(MPICC)
|
||||
@@ -557,6 +593,7 @@ AC_SUBST(TTARGET)
|
||||
AC_SUBST(SZLIB)
|
||||
AC_SUBST(CFLAGS)
|
||||
AC_SUBST(FFLAGS)
|
||||
AC_SUBST(ADDFLAGS)
|
||||
AC_SUBST(STDCXX)
|
||||
AC_SUBST(H5P_LIB_LOC)
|
||||
AC_SUBST(UNDERSCORE_H)
|
||||
@@ -570,38 +607,10 @@ AC_SUBST(TOOLS_HDFLIB)
|
||||
# substituting the output variable values.
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
doc/Makefile
|
||||
src/Makefile
|
||||
test/Makefile
|
||||
tools/Makefile
|
||||
])
|
||||
|
||||
AC_OUTPUT
|
||||
|
||||
###############################################################################
|
||||
########################## PRINTING SUMMARY ###################################
|
||||
###############################################################################
|
||||
echo
|
||||
echo
|
||||
echo "Summary for `(hostname || uname -n) 2>/dev/null | sed 1q`:"
|
||||
echo
|
||||
echo "Host OS: $host_os"
|
||||
echo "Host CPU: $host_cpu"
|
||||
echo "Host vendor: $host_vendor"
|
||||
echo "Build libraries: $MTARGET"
|
||||
echo "Build test programs: $TTARGET"
|
||||
echo "Build tools: $BUILD_TOOLS"
|
||||
echo "CC = $CC"
|
||||
echo "CXX = $CXX"
|
||||
echo "FC = $FC"
|
||||
echo "MPICC = $MPICC"
|
||||
echo "MPICXX = $MPICXX"
|
||||
echo "MPIFC = $MPIFC"
|
||||
echo "CFLAGS = $CFLAGS"
|
||||
echo "FFLAGS = $FFLAGS"
|
||||
echo "MPILIB = $MPILIB"
|
||||
echo "MPIINC = $MPIINC"
|
||||
echo "MPIROOT = $MPIROOT"
|
||||
echo "HDF5ROOT = $HDF5ROOT"
|
||||
echo "LDFLAGS = $LDFLAGS"
|
||||
echo
|
||||
AC_OUTPUT
|
||||
|
||||
@@ -0,0 +1,294 @@
|
||||
#FIG 3.2
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
1200 2
|
||||
0 32 #c6b797
|
||||
0 33 #eff8ff
|
||||
0 34 #dccba6
|
||||
0 35 #404040
|
||||
0 36 #808080
|
||||
0 37 #c0c0c0
|
||||
0 38 #e0e0e0
|
||||
0 39 #8e8f8e
|
||||
0 40 #aaaaaa
|
||||
0 41 #555555
|
||||
0 42 #bebebe
|
||||
0 43 #515151
|
||||
0 44 #e7e3e7
|
||||
0 45 #000049
|
||||
0 46 #797979
|
||||
0 47 #303430
|
||||
0 48 #414141
|
||||
0 49 #c7b696
|
||||
0 50 #8e8e8e
|
||||
0 51 #414541
|
||||
0 52 #8e8e8e
|
||||
0 53 #000079
|
||||
0 54 #ff8200
|
||||
0 55 #007d00
|
||||
0 56 #0000be
|
||||
# Desktop computer
|
||||
6 375 2400 2025 4050
|
||||
6 1575 3825 2025 4050
|
||||
2 3 0 1 -1 7 2 0 20 0.000 0 0 -1 0 0 8
|
||||
1615 3916 1719 3874 1908 3874 1950 3853 1972 3853 1846 3937
|
||||
1615 3937 1615 3916
|
||||
2 3 0 1 -1 7 2 0 20 0.000 0 0 -1 0 0 6
|
||||
1888 3853 1846 3874 1908 3874 1950 3853 1908 3853 1888 3853
|
||||
2 3 0 1 -1 7 2 0 20 0.000 0 0 -1 0 0 5
|
||||
1846 3874 1888 3853 1846 3853 1803 3874 1846 3874
|
||||
2 3 0 1 -1 7 2 0 20 0.000 0 0 -1 0 0 5
|
||||
1803 3874 1740 3874 1803 3853 1824 3853 1803 3874
|
||||
2 3 0 1 -1 7 2 0 20 0.000 0 0 -1 0 0 6
|
||||
1846 3958 1866 3916 1972 3853 1992 3895 1846 3979 1846 3958
|
||||
2 3 0 1 -1 7 2 0 20 0.000 0 0 -1 0 0 5
|
||||
1615 3937 1866 3937 1846 3958 1615 3958 1615 3937
|
||||
2 3 0 1 -1 7 2 0 20 0.000 0 0 -1 0 0 9
|
||||
1615 3958 1594 4000 1719 4000 1846 4000 1866 4000 1992 3916
|
||||
1992 3895 1846 3958 1615 3958
|
||||
-6
|
||||
6 600 2400 1950 3675
|
||||
2 3 0 1 -1 7 2 0 15 0.000 0 0 -1 0 0 6
|
||||
669 2530 648 3307 1594 3307 1615 2468 1594 2468 669 2530
|
||||
2 3 0 1 -1 7 0 0 10 0.000 0 0 -1 0 0 5
|
||||
1615 2468 1594 3307 1719 3307 1719 2509 1615 2468
|
||||
2 3 0 1 -1 7 0 0 15 0.000 0 0 -1 0 0 5
|
||||
1762 2677 1908 2719 1908 3139 1762 3203 1762 2677
|
||||
2 3 0 1 -1 7 2 0 15 0.000 0 0 -1 0 0 6
|
||||
732 3349 732 3412 1594 3454 1594 3371 753 3349 732 3349
|
||||
2 3 0 1 -1 7 1 0 15 0.000 0 0 -1 0 0 5
|
||||
1594 3371 1846 3280 1846 3348 1594 3454 1594 3371
|
||||
2 3 0 1 -1 7 2 0 15 0.000 0 0 -1 0 0 5
|
||||
732 3433 732 3559 1594 3601 1594 3454 732 3433
|
||||
2 3 0 1 -1 0 2 0 20 0.000 0 0 -1 0 0 5
|
||||
1594 3454 732 3412 753 3433 1572 3454 1594 3454
|
||||
2 3 0 1 -1 7 2 0 8 0.000 0 0 -1 0 0 5
|
||||
1594 3454 1594 3601 1635 3580 1635 3433 1594 3454
|
||||
2 3 0 1 -1 7 2 0 8 0.000 0 0 -1 0 0 5
|
||||
1719 3538 1846 3475 1846 3349 1719 3391 1719 3538
|
||||
2 3 0 1 -1 7 2 0 10 0.000 0 0 -1 0 0 5
|
||||
1635 3496 1719 3454 1719 3391 1635 3433 1635 3496
|
||||
2 3 0 1 -1 7 2 0 10 0.000 0 0 -1 0 0 5
|
||||
1635 3580 1719 3538 1719 3475 1635 3517 1635 3580
|
||||
2 1 0 2 -1 7 2 0 8 0.000 0 0 -1 0 0 2
|
||||
1635 3496 1719 3454
|
||||
2 1 0 2 -1 7 2 0 8 0.000 0 0 -1 0 0 2
|
||||
1635 3517 1719 3475
|
||||
2 3 0 1 -1 7 3 0 10 0.000 0 0 -1 0 0 7
|
||||
732 3559 732 3601 816 3601 963 3559 963 3538 816 3559
|
||||
732 3559
|
||||
2 3 0 1 -1 7 3 0 10 0.000 1 0 -1 0 0 5
|
||||
1490 3596 1490 3641 1594 3643 1594 3601 1490 3596
|
||||
2 3 0 1 -1 7 3 0 10 0.000 1 0 -1 0 0 5
|
||||
1594 3643 1635 3601 1635 3580 1594 3601 1594 3643
|
||||
2 3 0 1 -1 7 3 0 10 0.000 0 0 -1 0 0 5
|
||||
1846 3475 1846 3496 1803 3517 1803 3496 1846 3475
|
||||
2 3 0 1 -1 7 3 0 10 0.000 0 0 -1 0 0 4
|
||||
1803 3517 1740 3517 1803 3496 1803 3517
|
||||
2 3 0 1 -1 7 4 0 15 0.000 1 0 -1 0 0 6
|
||||
879 3307 732 3349 1594 3371 1846 3279 1762 3265 879 3307
|
||||
2 3 0 1 -1 7 0 0 10 0.000 1 0 -1 0 0 5
|
||||
1719 2509 1719 3307 1762 3265 1762 2552 1719 2509
|
||||
3 1 0 1 -1 7 1 0 20 0.000 0 0 0 11
|
||||
774 2656 816 2614 1488 2572 1510 2593 1530 2636 1530 3139
|
||||
1510 3181 1467 3203 837 3203 795 3181 774 3160
|
||||
1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
|
||||
1.000 1.000 1.000
|
||||
-6
|
||||
6 375 3675 1650 4050
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 8
|
||||
1207 3935 1205 3897 1229 3888 1265 3890 1264 3922 1244 3937
|
||||
1212 3937 1207 3935
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 8
|
||||
1264 3939 1261 3900 1285 3892 1320 3893 1319 3925 1300 3940
|
||||
1268 3940 1264 3939
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 8
|
||||
1318 3950 1315 3912 1339 3904 1374 3905 1374 3937 1355 3953
|
||||
1322 3953 1318 3950
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 8
|
||||
1151 3935 1150 3897 1173 3888 1209 3890 1207 3922 1188 3937
|
||||
1157 3937 1151 3935
|
||||
2 3 0 1 -1 7 1 0 20 0.000 0 0 -1 0 0 8
|
||||
1169 3900 1166 3861 1190 3853 1226 3854 1224 3886 1205 3901
|
||||
1173 3901 1169 3900
|
||||
2 3 0 1 -1 7 1 0 20 0.000 0 0 -1 0 0 8
|
||||
1225 3904 1223 3865 1247 3857 1282 3858 1281 3891 1262 3906
|
||||
1230 3906 1225 3904
|
||||
2 3 0 1 -1 7 1 0 20 0.000 0 0 -1 0 0 8
|
||||
1281 3908 1279 3869 1303 3860 1338 3862 1337 3893 1318 3909
|
||||
1286 3909 1281 3908
|
||||
2 3 0 1 -1 7 1 0 20 0.000 0 0 -1 0 0 8
|
||||
1344 3909 1342 3870 1366 3862 1401 3863 1399 3895 1381 3911
|
||||
1349 3911 1344 3909
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
1214 3854 1214 3835 1233 3822 1272 3825 1272 3831 1260 3839
|
||||
1258 3856 1211 3854 1214 3854
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
1258 3855 1258 3836 1277 3823 1315 3826 1315 3831 1304 3839
|
||||
1302 3857 1255 3855 1258 3855
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
1300 3862 1300 3843 1319 3830 1359 3833 1359 3838 1346 3846
|
||||
1344 3863 1297 3862 1300 3862
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
1344 3863 1344 3845 1363 3831 1402 3835 1402 3839 1390 3848
|
||||
1389 3865 1341 3863 1344 3863
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
1387 3869 1387 3850 1406 3836 1444 3839 1444 3845 1436 3871
|
||||
1417 3882 1383 3869 1387 3869
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
708 3798 708 3779 727 3766 766 3769 766 3774 755 3783
|
||||
752 3800 705 3798 708 3798
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
747 3803 747 3784 766 3771 805 3775 805 3780 793 3788
|
||||
791 3805 744 3803 747 3803
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
794 3805 794 3787 813 3773 852 3777 852 3781 840 3790
|
||||
839 3807 791 3805 794 3805
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
832 3810 832 3792 850 3778 889 3781 889 3787 878 3795
|
||||
876 3812 828 3810 832 3810
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
876 3812 876 3793 894 3780 934 3784 934 3788 921 3797
|
||||
919 3814 872 3812 876 3812
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
919 3816 919 3797 938 3784 977 3787 977 3792 965 3800
|
||||
964 3817 916 3816 919 3816
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
962 3816 962 3797 981 3784 1019 3787 1019 3792 1008 3800
|
||||
1006 3817 959 3816 962 3816
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
1001 3819 1001 3800 1019 3787 1058 3790 1058 3795 1047 3803
|
||||
1045 3820 997 3819 1001 3819
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
1049 3819 1049 3800 1067 3787 1106 3790 1106 3795 1094 3803
|
||||
1092 3820 1045 3819 1049 3819
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
661 3822 661 3803 679 3790 718 3793 718 3799 706 3807
|
||||
704 3824 658 3822 661 3822
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
704 3831 704 3812 724 3799 762 3802 762 3807 750 3816
|
||||
748 3832 702 3831 704 3831
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
748 3834 748 3816 768 3802 806 3805 806 3810 794 3819
|
||||
793 3835 746 3834 748 3834
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
789 3838 789 3819 808 3805 847 3808 847 3814 835 3822
|
||||
833 3839 786 3838 789 3838
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
832 3840 832 3822 850 3808 889 3812 889 3817 878 3825
|
||||
876 3842 828 3840 832 3840
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
874 3842 874 3824 893 3810 932 3814 932 3819 919 3827
|
||||
918 3844 871 3842 874 3842
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
916 3846 916 3827 934 3814 974 3817 974 3822 962 3831
|
||||
960 3847 913 3846 916 3846
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
961 3846 961 3828 980 3814 1018 3817 1018 3823 1007 3831
|
||||
1005 3847 957 3846 961 3846
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
1005 3849 1005 3831 1023 3817 1062 3821 1062 3826 1050 3834
|
||||
1049 3851 1002 3849 1005 3849
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
1049 3851 1049 3832 1067 3819 1107 3823 1107 3828 1095 3836
|
||||
1093 3853 1045 3851 1049 3851
|
||||
2 3 0 1 -1 7 1 0 20 0.000 0 0 -1 0 0 8
|
||||
656 3866 655 3827 678 3819 714 3820 713 3853 693 3868
|
||||
662 3868 656 3866
|
||||
2 3 0 1 -1 7 1 0 20 0.000 0 0 -1 0 0 8
|
||||
700 3869 698 3831 722 3822 757 3824 755 3856 737 3871
|
||||
704 3871 700 3869
|
||||
2 3 0 1 -1 7 1 0 20 0.000 0 0 -1 0 0 8
|
||||
744 3876 741 3838 766 3829 801 3831 799 3862 781 3878
|
||||
748 3878 744 3876
|
||||
2 3 0 1 -1 7 1 0 20 0.000 0 0 -1 0 0 8
|
||||
792 3882 790 3842 814 3834 849 3835 848 3868 829 3883
|
||||
797 3883 792 3882
|
||||
2 3 0 1 -1 7 1 0 20 0.000 0 0 -1 0 0 8
|
||||
832 3884 830 3846 854 3837 889 3839 887 3870 869 3886
|
||||
836 3886 832 3884
|
||||
2 3 0 1 -1 7 1 0 20 0.000 0 0 -1 0 0 8
|
||||
880 3890 879 3851 902 3842 938 3844 936 3876 918 3892
|
||||
886 3892 880 3890
|
||||
2 3 0 1 -1 7 1 0 20 0.000 0 0 -1 0 0 8
|
||||
932 3893 930 3854 954 3846 989 3847 988 3879 969 3895
|
||||
936 3895 932 3893
|
||||
2 3 0 1 -1 7 1 0 20 0.000 0 0 -1 0 0 8
|
||||
982 3895 981 3856 1004 3847 1040 3849 1038 3882 1019 3897
|
||||
988 3897 982 3895
|
||||
2 3 0 1 -1 7 1 0 20 0.000 0 0 -1 0 0 8
|
||||
1025 3898 1023 3860 1047 3851 1082 3853 1080 3885 1062 3900
|
||||
1029 3900 1025 3898
|
||||
2 3 0 1 -1 7 1 0 20 0.000 0 0 -1 0 0 8
|
||||
618 3861 616 3822 640 3814 675 3816 674 3847 655 3862
|
||||
623 3862 618 3861
|
||||
2 3 0 1 -1 7 1 0 20 0.000 0 0 -1 0 0 8
|
||||
572 3888 571 3849 594 3840 630 3842 629 3875 609 3890
|
||||
578 3890 572 3888
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
609 3888 609 3869 629 3856 667 3860 667 3864 655 3873
|
||||
654 3890 607 3888 609 3888
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 7
|
||||
654 3893 984 3934 988 3898 664 3866 652 3882 652 3888
|
||||
654 3893
|
||||
2 3 0 1 -1 7 0 0 20 0.000 0 0 -1 0 0 9
|
||||
986 3931 986 3913 1004 3900 1043 3902 1043 3908 1032 3916
|
||||
1029 3933 982 3931 986 3931
|
||||
2 3 0 1 -1 7 5 0 15 0.000 0 0 -1 0 0 9
|
||||
429 3871 683 3743 1551 3816 1576 3831 1573 3840 1426 3990
|
||||
427 3883 427 3869 429 3871
|
||||
2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 3
|
||||
423 3910 1434 4014 1575 3875
|
||||
2 3 0 0 -1 7 5 0 10 0.000 0 0 -1 0 0 8
|
||||
429 3885 429 3928 1430 4050 1580 3895 1576 3831 1423 3990
|
||||
425 3882 429 3885
|
||||
-6
|
||||
-6
|
||||
6 4050 3000 7500 3750
|
||||
2 1 0 1 0 0 0 0 -1 0.000 0 0 -1 0 0 4
|
||||
7500 3000 5430 3000 6120 3690 4050 3690
|
||||
-6
|
||||
# TB Data
|
||||
6 8025 6000 9000 7425
|
||||
5 1 0 1 -1 -1 0 0 -1 0.000 0 1 0 0 8490.000 5700.000 8040 6300 8490 6450 8940 6300
|
||||
5 1 0 1 -1 -1 0 0 -1 0.000 0 1 0 0 8490.000 6600.000 8040 7200 8490 7350 8940 7200
|
||||
1 2 0 1 -1 -1 0 0 -1 0.000 1 0.0000 8490 6150 450 150 8040 6000 8940 6300
|
||||
2 1 0 1 -1 -1 0 0 -1 0.000 0 0 0 0 0 2
|
||||
8940 6225 8940 7200
|
||||
2 1 0 1 -1 -1 0 0 -1 0.000 0 0 0 0 0 2
|
||||
8040 6225 8040 7200
|
||||
4 1 -1 0 0 2 12 0.0000 6 135 270 8490 6675 TB\001
|
||||
4 1 -1 0 0 2 12 0.0000 6 135 405 8490 7275 Data\001
|
||||
-6
|
||||
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 1 2
|
||||
0 0 1.00 60.00 120.00
|
||||
0 0 1.00 60.00 120.00
|
||||
2025 3075 2475 3075
|
||||
2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5
|
||||
3750 4650 3750 2100 2550 2100 2550 4650 3750 4650
|
||||
2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5
|
||||
9075 4650 9075 2100 7875 2100 7875 4650 9075 4650
|
||||
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 1 2
|
||||
0 0 3.00 60.00 120.00
|
||||
8400 4800 8400 6000
|
||||
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 1 2
|
||||
0 0 3.00 60.00 120.00
|
||||
8250 4800 8250 6000
|
||||
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 1 2
|
||||
0 0 3.00 60.00 120.00
|
||||
8100 4800 8100 6000
|
||||
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 1 2
|
||||
0 0 3.00 60.00 120.00
|
||||
8850 4800 8850 6000
|
||||
2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
12000 4500 12000 3975 8175 3975 8175 4500 12000 4500
|
||||
4 0 0 50 0 2 15 0.0000 4 30 360 8475 5550 ......\001
|
||||
4 0 0 50 0 0 20 0.0000 4 195 570 2625 3375 VisIt\001
|
||||
4 0 0 50 0 0 20 0.0000 4 195 570 7950 3375 VisIt\001
|
||||
4 0 0 50 -1 2 16 0.0000 4 225 1410 9375 4275 H5xxx plugin\001
|
||||
4 0 0 50 0 0 20 0.0000 4 255 1650 6450 5550 n-way parallel\001
|
||||
@@ -0,0 +1,262 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Put your title here!!</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
||||
<meta name="keywords" content="scientific visualization">
|
||||
<meta name="sitemap" content="put a brief descriptive phrase here that will show up in the site map:foo">
|
||||
|
||||
|
||||
<div id="maincenter">
|
||||
|
||||
|
||||
<head>
|
||||
<title>Building H5Part</title>
|
||||
</head>
|
||||
|
||||
<body bgcolor="#F0F0F0">
|
||||
<font face="arial,helvetica" size="+2" color="#555588"><h2>Building H5Part</h2></font>
|
||||
<UL>
|
||||
<LI><a href="#Quickstart">Quickstart guide for the impatient.</a>
|
||||
<LI><a href="#Details">Details of the Configuration Script</a>
|
||||
<!-- <LI><a href="UsingC++.html">Using the C++ interface</a> -->
|
||||
<LI><a href="#ConfigOptions">Important Configure Options</a>
|
||||
<LI><a href="#EnvVariables">Important Environment Variables</a>
|
||||
</UL>
|
||||
|
||||
<hr>
|
||||
<a name="Quickstart">
|
||||
<h2>Quickstart <i>for the impatient</i></h2>
|
||||
</a>
|
||||
|
||||
<OL>
|
||||
|
||||
<LI><b>Configure</b>:<br>
|
||||
For the serial implementation
|
||||
<pre>
|
||||
./configure
|
||||
</pre>
|
||||
For the parallel implementation configure with
|
||||
<pre>
|
||||
./configure --enable-parallel
|
||||
</pre>
|
||||
If you also want to build fortran bindings, add the
|
||||
<code>--enable-fortran</code> flag to the configure line.
|
||||
</LI><p>
|
||||
|
||||
<LI><b>Make the Library</b>:<br>
|
||||
Type <code>make</code> to build the library. The libraries are
|
||||
named accordingly.
|
||||
<UL>
|
||||
<LI>libH5Part.a: Serial C/C++ Library.</LI>
|
||||
<LI>libpH5Part.a: Parallel C/C++ library.</LI>
|
||||
<LI>libH5PartF.a: Serial F77/F90 library.</LI>
|
||||
<LI>libpH5PartF.a: Parallel F77/F90 library.</LI>
|
||||
</UL>
|
||||
</LI><p>
|
||||
|
||||
<LI><b>Make Regression Tests and Examples</b>:<br>
|
||||
Just type <code>make tests</code> to build regression tests
|
||||
and/or example programs for H5Part. These tests are
|
||||
<UL>
|
||||
<LI>H5PartF: Fortran example (only build if --enable-fortran
|
||||
is specified).</LI>
|
||||
<LI>H5PartFpar: Parallel Fortran example (only built if both
|
||||
--enable-fortran and --enable-parallel are specified).</LI>
|
||||
<LI>H5PartTest: Serial C example. This test writes a sample
|
||||
datafile and then reopens it for reading. It demonstrates
|
||||
the most basic reading/writing capabilities.</LI>
|
||||
<LI>H5PartTestP: Parallel C example (only built if
|
||||
--enable-parallel is specified). This program only works
|
||||
as an MPI/parallel program.</LI>
|
||||
<LI>Bench: This program will only be built if
|
||||
--enable-parallel is specified. It compares the
|
||||
performance of raw binary
|
||||
I/O (one file per processor), raw binary MPI-IO based
|
||||
parallel I/O to a single file, and the parallel H5Part/HDF5 to
|
||||
a single file. Generally, H5Part should be very close to the
|
||||
MPI-IO implementation in terms of performance, but slower
|
||||
than one-file-per-processor. If HDF5 is slower the
|
||||
MPI-IO, it would indicate that some performance tuning
|
||||
will be required for your platform (contact us, and we will
|
||||
see what we can do!).</LI>
|
||||
</UL>
|
||||
</LI><p>
|
||||
<LI><b>Building Your Own Programs</b>:<br>
|
||||
There are many different subtleties to linking on various
|
||||
computer platforms, but typically one does the following.
|
||||
<UL>
|
||||
<LI>C/C++ Serial:
|
||||
<br><code>#include
|
||||
< H5Part.h > </code> into your
|
||||
source file.
|
||||
<br><code>$CC -I<i>path_to_H5Part.h</i>
|
||||
-I<i>path_to_hdf5.h</i> -o outfile
|
||||
MyFile.cc -L<i>path_to_libH5Part.a</i> -lH5Part
|
||||
-L<i>path_to_libhdf5</i> -lhdf5 -lz <i>-lsz</i></code>
|
||||
</LI>
|
||||
<LI>C/C++ Parallel:
|
||||
<br><code>#include
|
||||
< H5Part.h > </code> into your
|
||||
source file.
|
||||
<br><code>$MPICC -I<i>path_to_H5Part.h</i>
|
||||
-I<i>path_to_hdf5.h</i> -DPARALLEL_IO
|
||||
-DH5_HAVE_PARALLEL -o outfile
|
||||
MyFile.cc -L<i>path_to_libH5Part.a</i> -lH5Part
|
||||
-L<i>path_to_libhdf5</i> -lhdf5 -lz <i>-lsz</i></code>
|
||||
</LI>
|
||||
|
||||
<LI>Fortran Serial:
|
||||
<br><code>include
|
||||
'H5Part.inc'</code> into your
|
||||
source file.
|
||||
<br><code>$FC -I<i>path_to_H5Part.h</i>
|
||||
-I<i>path_to_hdf5.h</i> -o outfile
|
||||
MyFile.cc -L<i>path_to_libH5PartF.a</i> -lH5PartF
|
||||
-L<i>path_to_libhdf5</i> -lhdf5 -lz <i>-lsz</i> -lc</code>
|
||||
</LI>
|
||||
<LI>Fortran Parallel:
|
||||
<br><code>include
|
||||
'H5Part.inc'</code> into your
|
||||
source file.
|
||||
<br><code>$MPIF90 -I<i>path_to_H5Part.h</i>
|
||||
-o outfile
|
||||
MyFile.cc -L<i>path_to_libpH5PartF.a</i> -lpH5PartF
|
||||
-L<i>path_to_libhdf5</i> -lhdf5 -lz <i>-lsz</i> -lc</code>
|
||||
</LI><p>
|
||||
</UL>
|
||||
|
||||
</OL>
|
||||
|
||||
<hr>
|
||||
|
||||
<a name="Details">
|
||||
<h1>Details for H5Part Configure and Build</h1>
|
||||
</a>
|
||||
|
||||
|
||||
<a name="ConfigOptions">
|
||||
<h2>Configure Options</h2>
|
||||
</a>
|
||||
H5Part uses GNU Autoconf to generate a Makefile from the makefile
|
||||
template called <code>Makefile.in</code>.
|
||||
The configure script pays attention to the following
|
||||
configure options;<p>
|
||||
|
||||
<UL>
|
||||
<LI><b>--prefix=PREFIX</b> Install files in PREFIX</LI>
|
||||
<LI><b>--enable-fortran</b> By default H5part will make no attempt to
|
||||
build Fortran bindings. If you add the
|
||||
<code>--enable-fortran</code> flag to the ./configure line, it
|
||||
will create a small test program to determine how to generate
|
||||
the fortran bindings and then create a library that includes
|
||||
those bindings. You may need to set the fortran compiler by
|
||||
setting the <code>FC</code> environment variable in your shell.</LI>
|
||||
<LI><b>--enable-parallel</b> The version of HDF5 that you build for
|
||||
Parallel I/O differs from the library you would build for
|
||||
serial I/O. Consequently, the H5Part libraries must be built
|
||||
specifically for the kind of I/O you have in mind (parallel or
|
||||
serial). The configure script will attempt to find an
|
||||
<code>mpicc</code> if it is available. If no
|
||||
<code>mpicc</code> is available it will use the regular
|
||||
C-compiler and will try to locate the location of the MPI
|
||||
include files and libraries. You can assist the configure
|
||||
program in its search by setting the <code>MPIROOT</code>
|
||||
environment variable.</LI>
|
||||
<LI><b>--enable-tools</b> Builds the currently available tools
|
||||
<br>
|
||||
<b>h5pAttrib</b>, an inspection tool that prints the number of timesteps in a file
|
||||
the file attributes, the step attributes, the dataset names and their values.
|
||||
<br>
|
||||
<b>h5pToGNUplot</b>, a converter to two column ASCII format to load in GNUplot.
|
||||
</LI>
|
||||
<LI><b>--enable-python</b><font color=red> Under construction</font> Option to build python bindings. It has not been tested.
|
||||
</LI>
|
||||
<LI><b>--help</b> Prints configure options.
|
||||
</LI>
|
||||
</UL>
|
||||
<p>
|
||||
|
||||
<a name="MakeOptions">
|
||||
<h2>Make Options</h2>
|
||||
</a>
|
||||
|
||||
<UL>
|
||||
<LI>make</LI>builds the libraries and test programs
|
||||
<LI>make install</LI>builds and installs
|
||||
<LI>make clean</LI>removes extraneous object files
|
||||
<LI>make distclean</LI>returns configuration to unconfigured state
|
||||
</UL>
|
||||
|
||||
<a name="EnvVariables">
|
||||
<h2>Environment Variables for Configure</h2>
|
||||
</a>
|
||||
The
|
||||
configuration script is of limited intelligence. Sometimes, you
|
||||
have to define the following environment variables in order to
|
||||
help it on its way. You will often only need to tell it where to
|
||||
find the HDF5 libraries (<code>H5ROOT</code> for serial or
|
||||
<code>PHDF5ROOT</code> for parallel builds). All of these
|
||||
environment variables can also be overidden in the Makefile that
|
||||
is generated by the autoconfigure script.
|
||||
The configure script pays attention to the following
|
||||
environment variables;
|
||||
<p>
|
||||
|
||||
<UL>
|
||||
<LI><b>CC</b>: Use the <code>CC</code> environment variable to tell the
|
||||
configure script where to find the C compiler. You can
|
||||
also directly modify this variable in the
|
||||
<code>Makefile</code> that is generated by the autoconfigure</LI>
|
||||
<LI><b>CXX</b>: Use the <code>CXX</code> environment variable to tell the
|
||||
configure script where to find the C++ compiler. You can
|
||||
also directly modify this variable in the
|
||||
<code>Makefile</code> that is generated by the autoconfigure</LI>
|
||||
<LI><b>FC</b>: Use the <code>FC</code> environment variable to tell the
|
||||
configure script where to find the fortran compiler. You can
|
||||
also directly modify this variable in the
|
||||
<code>Makefile</code> that is generated by the autoconfigure</LI>
|
||||
<LI><b>MPICC</b>: If you are building for parallel C I/O, then it is
|
||||
useful to tell the configure script where to find the
|
||||
<code>mpicc</code> script. Normally, <code>mpicc</code> is
|
||||
merely a wrapper script for a build using a regular C-compiler.
|
||||
If no <code>mpicc</code> is available, then the
|
||||
<code>configure</code> script will attempt to locate the mpi
|
||||
header files and libraries. In that case, it may be useful to
|
||||
define the <code>MPI_HOME</code> environment variable.</LI>
|
||||
<LI><b>MPICXX</b>If you are building for parallel C++</LI>
|
||||
<LI><b>MPIFC</b>: If you are building for parallel Fortran I/O, then it is
|
||||
useful to tell the configure script where to find the parallel fortran compiler.
|
||||
<LI><b>MPIROOT</b>: Set this environment variable to help the
|
||||
configure script to locate the MPI libraries that should be
|
||||
used to build the parallel version of the libraries. This
|
||||
variable will be ignored if configured only to build the
|
||||
serial implementation of the library.</LI>
|
||||
<LI><b>HDF5ROOT</b>: Find the path to your serial HDF5 installation. If you
|
||||
are building the serial version of H5part, then you should set
|
||||
the <code>PHDF5ROOT</code> environment variable.</LI>
|
||||
</UL><p>
|
||||
|
||||
<h3>Common compiler environemt variables for NERSC platforms</h3>
|
||||
<UL>
|
||||
<LI><b>DaVinci</b>: Linux ia64 </LI>
|
||||
CC=icc CXX=icc F90=ifort MPICC=icc MPIFC=ifort MPILIB=-L/usr/lib/ -lmpi MPIINC=-I/usr/include
|
||||
<LI><b>Bassi</b>: AIX</LI>
|
||||
CC=cc_r CXX=cc_r FC=xlf_r MPICC=mpcc_r MPICXX=mpcc_r MPIFC=mpxlf_r
|
||||
<LI><b>Jacquard</b>: Linux x86_64</LI>
|
||||
CC=pathcc CXX=pathCC FC=pathf90 MPICC=mpicc MPICXX=mpicxx MPIFC=mpif90
|
||||
<LI><b>Starsky.lbl.gov:</b> (Darwin) PowerPC</LI>
|
||||
CC=gcc CXX=g++ FC=g95
|
||||
</UL>
|
||||
<br>
|
||||
NOTE: You might need to set the MPI library path (MPILIB) and MPI includes (MPIIINC) if they are in non standard places. For example: <br>
|
||||
MPILIB=-L/usr/lpp/ppe.poe/lib -lmpi_r MPIINC=-I/usr/lpp/ppe.poe/include/thread
|
||||
<h3>How to set the variables for configure:</h3>
|
||||
It is very simple just call env with the variables together with configure. Notice the quotes in MPILIB.
|
||||
<pre>
|
||||
% env CC=icc CXX=icc F90=ifort MPICC=icc MPILIB=-L/usr/lib/ -lmpi MPIINC=-I/usr/include ./configure (configure options follow here)
|
||||
</pre>
|
||||
In the worst case, you can edit the <code>src/Makefile.am</code> and <code>test/Makefile.am</code> as
|
||||
needed to perform the proper build.
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Put your title here!!</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
||||
<meta name="keywords" content="scientific visualization">
|
||||
<meta name="sitemap" content="put a brief descriptive phrase here that will show up in the site map:foo">
|
||||
|
||||
<!--#include virtual="/include/topIncludes.html"-->
|
||||
|
||||
<div id="maincenter">
|
||||
|
||||
|
||||
<head>
|
||||
<title>Building HDF5</title>
|
||||
</head>
|
||||
|
||||
<body bgcolor="#F0F0F0">
|
||||
<font face="arial,helvetica" size="+2" color="#555588"><h2>Building H5Part</h2></font>
|
||||
<UL>
|
||||
<LI><a href="#ConfigOptions">Configure Options</a>
|
||||
<LI><a href="#EnvVariables">Important Environment Variables</a>
|
||||
</UL>
|
||||
|
||||
<hr>
|
||||
<a name="ConfigOptions">
|
||||
<h2>Configure options</h2></a>
|
||||
</a>
|
||||
To set the installation path configure with
|
||||
<pre>
|
||||
./configure --prefix=your hdf5 installation full path, e.g.--prefix=/usr/local/hdf5
|
||||
</pre>
|
||||
For the serial implementation configure with
|
||||
<pre>
|
||||
./configure
|
||||
</pre>
|
||||
For the parallel implementation configure with
|
||||
<pre>
|
||||
./configure --enable-parallel
|
||||
</pre>
|
||||
To enable shared objects configure with
|
||||
<pre>
|
||||
./configure --enable-shared
|
||||
</pre>
|
||||
<a name="EnvVariables">
|
||||
<h2>Environment Variables</h2></a>
|
||||
</a>
|
||||
To add HDF5 to your PATH and LD_LIBRARY_PATH edit your
|
||||
.tcshr, or .cshrc depending on the shell you are using and add
|
||||
<pre>
|
||||
setenv HDF5 "your hdf5 installation full path"
|
||||
setenv PATH ${PATH}:${HDF5}/bin
|
||||
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${HDF5}/lib
|
||||
</pre>
|
||||
if you are using bash, add to your .bashrc
|
||||
<pre>
|
||||
export HDF5="your hdf5 installation full path"
|
||||
export PATH=$PATH:${HDF5}/bin
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${HDF5}/lib
|
||||
</pre>
|
||||
|
||||
Open a new terminal or do a
|
||||
source .tcshr (.cshrc, .bashrc) in the one that you are using.
|
||||
|
||||
You can <a href="http://vis.lbl.gov/Research/AcceleratorSAPP/Downloading.html">continue <a/>downloading and installing H5Part.
|
||||
</div>
|
||||
|
||||
<!--#include virtual="/include/dateFooter.html"-->
|
||||
@@ -0,0 +1,48 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Put your title here!!</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
||||
<meta name="keywords" content="scientific visualization">
|
||||
<meta name="sitemap" content="put a brief descriptive phrase here that will show up in the site map:foo">
|
||||
|
||||
<!--#include virtual="/include/topIncludes.html"-->
|
||||
|
||||
<div id="maincenter">
|
||||
<head>
|
||||
<title>Downloading H5Part</title>
|
||||
</head>
|
||||
|
||||
<body bgcolor="#F0F0F0">
|
||||
<font face="arial,helvetica" size="+2" color="#555588"><h2>Downloading H5Part</h2></font>
|
||||
<UL>
|
||||
<LI><a href="#svnano">Subversion access.</a>
|
||||
</UL>
|
||||
<hr>
|
||||
<a name="svnano">
|
||||
<h2>Subversion access</h2>
|
||||
</a>
|
||||
|
||||
<LI><b>Anonymous via. Savannah</b>:<br>
|
||||
Use svn from <a href="http://subversion.tigris.org"> tigris </a>
|
||||
<pre>
|
||||
svn checkout svn+ssh://svn@savannah.psi.ch/afs/psi.ch/project/amas/svn/root/amas/H5Part/ .
|
||||
</pre>
|
||||
Password is svn.
|
||||
<LI><b>Using AFS</b>:<br>
|
||||
You need AFS (openAFS) and must have an AFS-Account at PSI which in consequence gives you
|
||||
the needed access right.
|
||||
</LI><p>
|
||||
<pre>
|
||||
svn checkout file:///afs/psi.ch/project/amas/svn/root/amas/H5Part/ .
|
||||
</pre>
|
||||
In case of trouble please contact the person mentioned at the bottom of this page.
|
||||
<hr>
|
||||
<address><a href="mailto:andreas.adelmann@psi.ch">Andreas Adelmann</a></address>
|
||||
<!-- Created: March 7 12:52:52 PST 2005 -->
|
||||
<!-- hhmts start -->
|
||||
Last modified: Mon Jan 9 22:18:55 CET 2006
|
||||
<!-- hhmts end -->
|
||||
</div>
|
||||
|
||||
<!--#include virtual="/include/dateFooter.html"-->
|
||||
@@ -4,8 +4,8 @@
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
PROJECT_NAME = H5Part
|
||||
PROJECT_NUMBER = 1.3.3
|
||||
OUTPUT_DIRECTORY = ./ReferencePages
|
||||
PROJECT_NUMBER = V1.0
|
||||
OUTPUT_DIRECTORY = ./doxydoc
|
||||
CREATE_SUBDIRS = NO
|
||||
OUTPUT_LANGUAGE = English
|
||||
USE_WINDOWS_ENCODING = NO
|
||||
@@ -43,10 +43,10 @@ SUBGROUPING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
EXTRACT_ALL = NO
|
||||
EXTRACT_ALL = YES
|
||||
EXTRACT_PRIVATE = NO
|
||||
EXTRACT_STATIC = NO
|
||||
EXTRACT_LOCAL_CLASSES = NO
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
EXTRACT_LOCAL_METHODS = NO
|
||||
HIDE_UNDOC_MEMBERS = YES
|
||||
HIDE_UNDOC_CLASSES = YES
|
||||
@@ -55,7 +55,7 @@ HIDE_IN_BODY_DOCS = NO
|
||||
INTERNAL_DOCS = NO
|
||||
CASE_SENSE_NAMES = YES
|
||||
HIDE_SCOPE_NAMES = NO
|
||||
SHOW_INCLUDE_FILES = NO
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
INLINE_INFO = YES
|
||||
SORT_MEMBER_DOCS = YES
|
||||
SORT_BRIEF_DOCS = NO
|
||||
@@ -66,7 +66,7 @@ GENERATE_BUGLIST = YES
|
||||
GENERATE_DEPRECATEDLIST= YES
|
||||
ENABLED_SECTIONS =
|
||||
MAX_INITIALIZER_LINES = 30
|
||||
SHOW_USED_FILES = NO
|
||||
SHOW_USED_FILES = YES
|
||||
SHOW_DIRECTORIES = YES
|
||||
FILE_VERSION_FILTER =
|
||||
#---------------------------------------------------------------------------
|
||||
@@ -82,11 +82,27 @@ WARN_LOGFILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
INPUT += ../src/H5Part.c
|
||||
INPUT += ../src/H5Block.c
|
||||
FILE_PATTERNS =
|
||||
INPUT = ../src
|
||||
FILE_PATTERNS = *.c \
|
||||
*.cc \
|
||||
*.cxx \
|
||||
*.cpp \
|
||||
*.c++ \
|
||||
*.h \
|
||||
*.hh \
|
||||
*.C \
|
||||
*.CC \
|
||||
*.C++ \
|
||||
*.H \
|
||||
*.HH
|
||||
RECURSIVE = YES
|
||||
EXCLUDE =
|
||||
EXCLUDE = ../src/H5PartF.c \
|
||||
../src/H5Part.cc \
|
||||
../src/H5Part.hh \
|
||||
../src/H5Part++.cc \
|
||||
../src/H5Part++.hh \
|
||||
../src/TestUnderscoreC.c \
|
||||
../src/Underscore.h
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_PATTERNS =
|
||||
EXAMPLE_PATH =
|
||||
@@ -99,13 +115,13 @@ FILTER_SOURCE_FILES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to source browsing
|
||||
#---------------------------------------------------------------------------
|
||||
SOURCE_BROWSER = NO
|
||||
SOURCE_BROWSER = YES
|
||||
INLINE_SOURCES = NO
|
||||
STRIP_CODE_COMMENTS = YES
|
||||
REFERENCED_BY_RELATION = NO
|
||||
REFERENCES_RELATION = NO
|
||||
REFERENCED_BY_RELATION = YES
|
||||
REFERENCES_RELATION = YES
|
||||
USE_HTAGS = NO
|
||||
VERBATIM_HEADERS = NO
|
||||
VERBATIM_HEADERS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
@@ -116,10 +132,10 @@ IGNORE_PREFIX =
|
||||
# configuration options related to the HTML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_HTML = YES
|
||||
HTML_OUTPUT = .
|
||||
HTML_OUTPUT = html
|
||||
HTML_FILE_EXTENSION = .html
|
||||
HTML_HEADER =
|
||||
HTML_FOOTER = doxyfooter
|
||||
HTML_FOOTER =
|
||||
HTML_STYLESHEET =
|
||||
HTML_ALIGN_MEMBERS = YES
|
||||
GENERATE_HTMLHELP = NO
|
||||
@@ -135,7 +151,7 @@ TREEVIEW_WIDTH = 250
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the LaTeX output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_LATEX = no
|
||||
GENERATE_LATEX = YES
|
||||
LATEX_OUTPUT = latex
|
||||
LATEX_CMD_NAME = latex
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
@@ -213,9 +229,9 @@ COLLABORATION_GRAPH = YES
|
||||
GROUP_GRAPHS = YES
|
||||
UML_LOOK = NO
|
||||
TEMPLATE_RELATIONS = NO
|
||||
INCLUDE_GRAPH = NO
|
||||
INCLUDED_BY_GRAPH = NO
|
||||
CALL_GRAPH = NO
|
||||
INCLUDE_GRAPH = YES
|
||||
INCLUDED_BY_GRAPH = YES
|
||||
CALL_GRAPH = YES
|
||||
GRAPHICAL_HIERARCHY = YES
|
||||
DIRECTORY_GRAPH = YES
|
||||
DOT_IMAGE_FORMAT = png
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Put your title here!!</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
||||
<meta name="keywords" content="scientific visualization">
|
||||
<meta name="sitemap" content="put a brief descriptive phrase here that will show up in the site map:foo">
|
||||
|
||||
|
||||
<div id="maincenter">
|
||||
|
||||
Under construction, will be here soon.
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Put your title here!!</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
||||
<meta name="keywords" content="scientific visualization">
|
||||
<meta name="sitemap" content="put a brief descriptive phrase here that will show up in the site map:foo">
|
||||
|
||||
|
||||
<div id="maincenter">
|
||||
|
||||
Under construction, will be here soon.
|
||||
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Put your title here!!</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
||||
<meta name="keywords" content="scientific visualization">
|
||||
<meta name="sitemap" content="put a brief descriptive phrase here that will show up in the site map:foo">
|
||||
|
||||
|
||||
<div id="maincenter">
|
||||
|
||||
Under construction, will be here soon.
|
||||
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Put your title here!!</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
||||
<meta name="keywords" content="scientific visualization">
|
||||
<meta name="sitemap" content="put a brief descriptive phrase here that will show up in the site map:foo">
|
||||
|
||||
<!--#include virtual="/include/topIncludes.html"-->
|
||||
|
||||
<div id="maincenter">
|
||||
|
||||
|
||||
<head>
|
||||
<title>H5Part Utility Tools</title>
|
||||
</head>
|
||||
|
||||
<body bgcolor="#F0F0F0">
|
||||
<font face="arial,helvetica" size="+2" color="#555588"><h2>H5Part Utility Tools</h2></font>
|
||||
<UL>
|
||||
<LI><a href="h5pAttrib">h5pAttrib</a>
|
||||
<LI><a href="h5pToGNUplot">h5pToGNUplot</a>
|
||||
</UL>
|
||||
|
||||
<hr>
|
||||
|
||||
<a name="h5pAttrib">
|
||||
<h2>h5pAttrib</h2>
|
||||
</a>
|
||||
|
||||
<b>h5pAttrib</b> is an inspection tool that prints to stdout the number of timesteps in a file
|
||||
the file attributes, the step attributes, the dataset names and their values. It's simpler to use than h5dump.
|
||||
Usage options are given by typing:
|
||||
<br><br>
|
||||
<PRE>
|
||||
% ./h5pAttrib -h
|
||||
usage: h5pAttrib [OPTIONS] file
|
||||
|
||||
OPTIONS
|
||||
-h, --help Print help page
|
||||
-n, --nstep Print number of steps
|
||||
-A, --fileA Print file attributes
|
||||
-a, --stepA Print step attributes & values for time step n
|
||||
-d, --dataset Print data sets names & values for time step n
|
||||
-H, --header Print shorter version without the values
|
||||
</PRE>
|
||||
|
||||
<h3>Examples</h3>
|
||||
<OL>
|
||||
<LI>
|
||||
Show file attribute names & values of sample.h5part
|
||||
</LI>
|
||||
h5pAttrib -A sample.h5part
|
||||
<LI>
|
||||
Show step attribute names for time step 5 of sample.h5part
|
||||
</LI>
|
||||
h5pAttrib -a 5 -H sample.h5part
|
||||
</OL>
|
||||
|
||||
<a name="h5pToGNUplot">
|
||||
<h2>h5pToGNUplot</h2>
|
||||
</a>
|
||||
|
||||
<b>h5pToGNUplot</b> is a converter from H5Part to two column ASCII text format for loading into GNUplot. Usage options are given by typing:
|
||||
<br><br>
|
||||
<PRE>
|
||||
% ./h5pToGNUplot -h
|
||||
|
||||
usage: h5pToGNUplot -t TIMESTEP -1 VARIABLE#1 -2 VARIABLE#2 -i INPUTFILE [OPTIONAL_FLAGS]
|
||||
|
||||
FLAGS
|
||||
-h, --help Print help page
|
||||
-1, --1var (REQUIRED) Takes first variable parameter
|
||||
-2, --2var (REQUIRED) Takes second variable parameter
|
||||
-i, --input (REQUIRED) Takes input file name
|
||||
-t, --timestep (REQUIRED) Sets the timestep (Value -1 will result in dumping values of all timesteps.)
|
||||
-o, --output (OPTIONAL) Takes output file name (without this flag, the program will print to stdout)
|
||||
-n, --number (OPTIONAL) Sets number of output points
|
||||
-s, --start (OPTIONAL) Sets the starting particle index
|
||||
</PRE>
|
||||
|
||||
<h3>Examples</h3>
|
||||
<OL>
|
||||
<LI>
|
||||
Create a GNU plot file output.txt from sample.h5part by ploting x vs px for timestep 54
|
||||
</LI>
|
||||
h5pToGNUplot -t 54 -1 x -2 px -i sample.h5part -o output.txt
|
||||
<LI>
|
||||
Create a GNU plot file output.txt from sample.h5part by ploting x vs px for timestep 54
|
||||
using 1200 points from particle index 76
|
||||
</LI>
|
||||
h5pToGNUplot -t 54 -1 x -2 px -i sample.h5part -o output.txt -s 76 -n 1200
|
||||
</OL>
|
||||
|
||||
</div>
|
||||
|
||||
<!--#include virtual="/include/dateFooter.html"-->
|
||||
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>H5Part: VisIt Plugins</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
||||
<meta name="keywords" content="scientific visualization">
|
||||
<meta name="sitemap" content="put a brief descriptive phrase here that will show up in the site map:foo">
|
||||
|
||||
|
||||
<div id="maincenter">
|
||||
<font face="arial,helvetica"><h1>H5Part: VisIt Plugins</h1></font>
|
||||
<font face="arial,helvetica" color="#555588"><h2>Introduction</h2></font>
|
||||
<P>
|
||||
<a href="http://www.llnl.gov/visit">VisIt</a> is an open source point-and-click 3D scientific visualization application that supports most of the common visualization techniques on structured and unstructured grids. One of its advantages is that it employs a distributed and parallel architecture in order to handle extremely large data sets interactively. VisIt's rendering and data processing capabilities are split into viewer and engine components that may be distributed across multiple machines. See this link for <a href="http://vis.lbl.gov/NERSC/Software/visit/">details</a> on how to run VisIt in NERSC.
|
||||
</P>
|
||||
<P>
|
||||
VisIt achieves extensibility through the use of dynamically loaded plugins. All of VisIt's plots, operators, and database readers are implemented as plugins and are loaded at run-time from the plugin directory. New plugins can be added simply by installing them in this directory. VisIt comes with a graphical plugin creation tool, which greatly simplifies the process of creating new plugins. The user describes the properties of the plugin and then the tool generates most of the code necessary to implement the plugin. For example, in the case of an operator, the plugin creation tool creates the code necessary for the graphical user interface attribute window; the C++, Python, and Java interfaces; and the code necessary to interface to VisIt. The only code you need to write is the C++ code that actually performs the operation.
|
||||
</P>
|
||||
<font face="arial,helvetica" color="#555588"><h2>H5Part in VisIt</h2></font>
|
||||
<font face="arial,helvetica" color="#555588"><h3>Database Reader Plugin</h3></font>
|
||||
<P>
|
||||
We wrote a Multiple Time Step Multiple Domain database reader to read H5Part data into VisIt. H5Part datasets should be named with the extension <font color=red>".h5part"</font> to be recognized by the reader since VisIt does not have a format selection mechanism at the time of reading. Figure 1 shows a Pseudocolor plot of a data set and Figure 2 shows a Scatter plot x-y (any combination of x, px, y, py, z, pz, id are possible).
|
||||
</P>
|
||||
<P>
|
||||
<TABLE>
|
||||
<TR>
|
||||
<TD>
|
||||
<a href="H5PartVisIt/cloud_visit.png"><img src="H5PartVisIt/cloud_visit.s.png" width=400 height=300></a>
|
||||
</TD
|
||||
></TR>
|
||||
<TR>
|
||||
<TD width=300>
|
||||
Figure 1. VisIt User interface showing an H5Part particle file rendered as spheres using the Pseudocolor plot.
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>
|
||||
<a href="H5PartVisIt/cloud_visit_2D.png"><img src="H5PartVisIt/cloud_visit_2D.s.png" width=300 height=300></a>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>
|
||||
Figure 2. A Scatter plot of the x-y projection of the particles.
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
</P>
|
||||
|
||||
<P>
|
||||
VisIt provides a Query interface, for single time steps and for time series. Figure 3 shows the query interace over time for the sum of the x position and the z position of the particoes.
|
||||
</P>
|
||||
<P>
|
||||
<TABLE>
|
||||
<TR>
|
||||
<TD>
|
||||
<a href="H5PartVisIt/visit_query1.png"><img src="H5PartVisIt/visit_query1.s.png" width=400 height=300></a>
|
||||
</TD
|
||||
></TR>
|
||||
<TR>
|
||||
<TD width=300>
|
||||
Figure 3. VisIt's Time Query Output.
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
</p>
|
||||
<font face="arial,helvetica" color="#555588"><h2>Operator Plugins</h2></font>
|
||||
<P>
|
||||
<font face="arial,helvetica" color="#555588"><h3>Particle Random Sampler</h3></font>
|
||||
|
||||
|
||||
</P>
|
||||
<P>
|
||||
<font face="arial,helvetica" color="#555588"><h3>Particle Binner</h3></font>
|
||||
</P>
|
||||
</div>
|
||||
|
After Width: | Height: | Size: 329 KiB |
|
After Width: | Height: | Size: 107 KiB |
|
After Width: | Height: | Size: 243 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 181 KiB |
|
After Width: | Height: | Size: 79 KiB |
@@ -1,170 +0,0 @@
|
||||
Proposal for a more general file format used by H5Part/H5Block
|
||||
|
||||
Authors: Achim Gsell
|
||||
Status: Draft
|
||||
|
||||
1. Introduction
|
||||
|
||||
H5X is the file format used by H5Part and H5Block. H5X is designed on
|
||||
top of HDF5: A H5X file is a very special HDF5 file.
|
||||
|
||||
+--------------------+
|
||||
| Application |
|
||||
+--------------------+
|
||||
| H5Part/H5Block API |
|
||||
+--------------------+
|
||||
| H5X API |
|
||||
+--------------------+
|
||||
| HDF5 API |
|
||||
+--------------------+
|
||||
| Filesystem of OS |
|
||||
+--------------------+
|
||||
|
||||
|
||||
2. H5X file format specification
|
||||
|
||||
2.1 The root group
|
||||
|
||||
2.1.1 File attributes
|
||||
|
||||
Attributes of the HDF5 root group are called "file attributes". There
|
||||
are no restrictions on file attribute names. Names with "__" as prefix and
|
||||
postfix are intended for internal use. Supported values for file attributes
|
||||
are scalars and arrays of 64bit integer and 64bit floating point number as
|
||||
well as string values. Arrays of strings are not supported.
|
||||
|
||||
2.1.1.1 Predefined file attributes
|
||||
|
||||
__stepname__ (optional)
|
||||
See below.
|
||||
|
||||
__stepnumwidth__ (optional)
|
||||
See below.
|
||||
|
||||
2.1.2 Members of the root group
|
||||
|
||||
Members of the root group are special formated HDF5 groups called
|
||||
"step groups". The name of a step group is "<name>#<number>".
|
||||
Whereby <name> is either defined by the optional file attribute
|
||||
__stepname__ or set to "Step" by default. <number> is an
|
||||
unsigned integer less than 2^63.
|
||||
|
||||
/
|
||||
+- Step#0
|
||||
+- Step#1
|
||||
...
|
||||
+- Step#n
|
||||
+- StepProperties [NEW]
|
||||
+- Mesh [NEW]
|
||||
|
||||
The optional file attribute __stepnumwidth__ defines the minimum width
|
||||
of <number> in the name of the step group. The number is padded with
|
||||
'0'. The minimum width defaults to zero, so that no paddings occurs.
|
||||
Example: With __stepnumwidth__ := 5 the name of the step group with
|
||||
number 42 is "Step#00042", with __stepnumwidth__ := 0 the name is
|
||||
"Step#42".
|
||||
|
||||
Step groups may be unsorted in the HDF5 file und needn't be number
|
||||
consecutively.
|
||||
|
||||
2.1.3 Other members of the root group
|
||||
|
||||
Other sub-groups of the root group are allowed, but the group names are restricted
|
||||
to names not matching "Step#.*".
|
||||
|
||||
2.2 Format of a step group
|
||||
|
||||
2.2.1 Step attributes
|
||||
|
||||
Step attributes are HDF5 attributes asigned to a step group. There
|
||||
are no restrictions on step attribute names. As with file attributes names
|
||||
enclosed in "__" are intended for internal use. Supported values are the same
|
||||
as for file attributes:
|
||||
* 64bit integer value
|
||||
* arrays of 64bit integer values
|
||||
* 64bit floating point number
|
||||
* array of 64bit floating point number
|
||||
* strings
|
||||
Note that array of strings are not supported!
|
||||
|
||||
2.2.2 Predefined step attributes
|
||||
|
||||
No predefined step attributes exists.
|
||||
|
||||
|
||||
2.2.3 Members of a step group
|
||||
|
||||
Members of a step group are HDF5 datasets and optional one HDF5 group
|
||||
with the name "Block". HDF5 datasets in a step group are called "step
|
||||
datasets". The optional block group is called "block data".
|
||||
|
||||
Mesh?!
|
||||
|
||||
2.2.4 Step datasets
|
||||
|
||||
Step datasets are arrays of rank 1. The dataset size must be the same
|
||||
for all datasets inside a step. The size of the dataset may vary
|
||||
from step to step. Array values are 64bit integer or 64bit floating
|
||||
point numbers. No limitations (other than given by HDF5) are given on
|
||||
step dataset names.
|
||||
|
||||
|
||||
2.2.5 Block Data
|
||||
|
||||
The block data group is a container for an arbitrary number of field
|
||||
data. A field is a data structure to store arrays of rank m with
|
||||
n-dimensional vector values. Fields are represented within HDF5
|
||||
groups. The HDF5 group name is the unique identifier for a field in
|
||||
the current step.
|
||||
|
||||
2.2.5.1 m-rank fields with n-dimensional-vector values
|
||||
|
||||
Values are stored per dimension in separate datasets. Thus we have n
|
||||
datasets for a field with n-dimensional vector values. Each dataset
|
||||
corresponse to one dimension. The datasets are numbered from '0' to
|
||||
'n-1'. Arrays are stored in column major order (Fortran indexing
|
||||
scheme).
|
||||
|
||||
/ # HDF5 root group
|
||||
...
|
||||
+- Step#<i> # HDF5 group
|
||||
|
|
||||
+- Block # HDF5 group
|
||||
|
|
||||
+- <field name> # HDF5 group
|
||||
|
|
||||
+- 0 # HDF5 dataset, first dim of vector
|
||||
+- 1 # HDF5 dataset, second dim of vector
|
||||
...
|
||||
+- n-1 # HDF5 dataset, last dim of vector
|
||||
...
|
||||
|
||||
2.2.5.2 m-rank fields with scalar values
|
||||
|
||||
Fields with scalar values are stored as special case of fields with
|
||||
n-dimensional vector values with n := 1.
|
||||
|
||||
/ # HDF5 root group
|
||||
...
|
||||
+- Step#<i> # HDF5 group
|
||||
|
|
||||
+- Block # HDF5 group
|
||||
|
|
||||
+- <field name> # HDF5 group
|
||||
|
|
||||
+- 0 # HDF5 dataset, scalar value
|
||||
...
|
||||
|
||||
|
||||
2.3 Step properties [NEW]
|
||||
|
||||
Why? Much faster than step attributes if you need to access consecutive values
|
||||
|
||||
Group of root group with name "StepProperties"
|
||||
|
||||
Members are datasets
|
||||
|
||||
Supported values are the same as for step attributes
|
||||
|
||||
Mapping of value to step via object index of step group
|
||||
|
||||
@@ -0,0 +1,417 @@
|
||||
<html><head><title>H5Part Tools How-to</title>
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr"></head>
|
||||
<body bgcolor="#ffffff" text="#000000">
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="987">
|
||||
<tbody><tr>
|
||||
<td height="6050" width="27"></td>
|
||||
<td colspan="3" valign="top">
|
||||
<div id="body">
|
||||
<div id="mainleft"><font face="Arial, Helvetica, sans-serif"><a name="TOP"></a>
|
||||
</font></div>
|
||||
<div id="maincenter"> <font face="arial,helvetica">
|
||||
<h1 align="center"><font face="Arial, Helvetica, sans-serif"><b><font color="#666699">H5Part
|
||||
Tools How-to</font></b></font></h1>
|
||||
</font><font color="#555588" face="arial,helvetica">
|
||||
<h2><font color="#666699" face="Arial, Helvetica, sans-serif">Table
|
||||
of Contents</font></h2>
|
||||
</font>
|
||||
<p><font face="Arial, Helvetica, sans-serif"><b><a href="#Quick%20Guide">
|
||||
[1] Quick Guide</a></b> </font></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif" size="+1"><b><font color="#999999">---
|
||||
For h5pAttrib</font></b></font><font face="Arial, Helvetica, sans-serif"><br>
|
||||
<b><br>
|
||||
<a href="#timesteps">[2] To see number of timesteps in a h5part file</a><br>
|
||||
<br>
|
||||
<a href="#file%20attributes">[3] To see file attributes in a h5part
|
||||
file</a><br>
|
||||
<br>
|
||||
<a href="#step%20attributes"> [4] To see step attributes in a h5part
|
||||
file</a><br>
|
||||
<br>
|
||||
<a href="#dataset">[5] To see dataset in a h5part file</a><br>
|
||||
<br>
|
||||
<a href="#flags">[6] Providing more than one flag at once for h5pAttrib</a></b></font></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif" size="+1"><b><font color="#999999">---
|
||||
For h5pToGNUplot</font></b></font><font face="Arial, Helvetica, sans-serif"><br>
|
||||
<br>
|
||||
<b><a href="#parameters">[7] What parameters to provide</a><br>
|
||||
<br>
|
||||
<a href="#input%20file">[8] How to create an input file to GNUplot</a></b></font></p>
|
||||
<p> </p>
|
||||
<p align="center"><font face="Arial, Helvetica, sans-serif"><a href="#TOP"><back
|
||||
to top></a></font></p>
|
||||
<p> </p>
|
||||
<h2><font color="#555588" face="Arial, Helvetica, sans-serif"><a name="Quick Guide">[1]
|
||||
Quick Guide</a></font></h2>
|
||||
<p><font face="Arial, Helvetica, sans-serif">Executing the program with
|
||||
-h option will display a concise help page.</font></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif"><b><font face="Courier New, Courier, mono" size="+1">$></font></b><font face="Courier New, Courier, mono">./h5pAttrib
|
||||
-h</font></font></p>
|
||||
<p><font face="Courier New, Courier, mono">usage: h5pAttrib [OPTIONS]
|
||||
file</font></p>
|
||||
<p><font face="Courier New, Courier, mono"> OPTIONS<br>
|
||||
-h, --help Print help page<br>
|
||||
-n, --nstep Print number of steps<br>
|
||||
-A, --fileA Print file attributes<br>
|
||||
-a n, --stepA n Print step attributes & values for time step n<br>
|
||||
-d n, --dataset n Print data sets names & values for time step
|
||||
n<br>
|
||||
-H, --header Print shorter version without the values</font></p>
|
||||
<p><font face="Courier New, Courier, mono"> Examples:</font></p>
|
||||
<p><font face="Courier New, Courier, mono"> 1) Show file attribute names
|
||||
& values of sample.h5part</font></p>
|
||||
<p><font face="Courier New, Courier, mono"> h5pAttrib -A sample.h5part<br>
|
||||
OR<br>
|
||||
h5pAttrib --fileA sample.h5part</font></p>
|
||||
<p><font face="Courier New, Courier, mono"> 2) Show step attribute names
|
||||
for time step 5 of sample.h5part</font></p>
|
||||
<p><font face="Courier New, Courier, mono"> h5pAttrib -a 5 -H sample.h5part<br>
|
||||
OR<br>
|
||||
h5pAttrib --stepA 5 -H sample.h5part</font></p>
|
||||
<p><font face="Courier New, Courier, mono"><br>
|
||||
<b><font size="+1">$></font></b> ./h5pToGNUplot -h</font></p>
|
||||
<p><font face="Courier New, Courier, mono">usage: h5pToGNUplot -t TIMESTEP
|
||||
-1 VARIABLE#1 -2 VARIABLE#2 -i INPUTFILE [OPTIONAL_FLAGS]</font></p>
|
||||
<p><font face="Courier New, Courier, mono"> FLAGS<br>
|
||||
-h, --help Print help page</font><br>
|
||||
<font face="Courier New, Courier, mono">-1 par, --1var par (REQUIRED)
|
||||
Takes first variable parameter to "par"<br>
|
||||
-2 par, --2var par (REQUIRED) Takes second variable parameter to "par"<br>
|
||||
-i file, --input file (REQUIRED) Takes input file name to "file"<br>
|
||||
</font><font face="Courier New, Courier, mono">-t step, --timestep
|
||||
step (REQUIRED) Sets the timestep to "step" (Value -1 will
|
||||
result in dumping values of all timesteps.)<br>
|
||||
-o file, --output file (OPTIONAL) Takes output file name to "file"
|
||||
(without this flag, the program will print to stdout)<br>
|
||||
-n num, --number num (OPTIONAL) Sets number of output points to "num"<br>
|
||||
-s idx, --start idx (OPTIONAL) Sets the starting particle index to
|
||||
"idx"</font></p>
|
||||
<p><font face="Courier New, Courier, mono"><br>
|
||||
Examples:</font></p>
|
||||
<p><font face="Courier New, Courier, mono"> 1) Create GNU plot file
|
||||
output.txt from sample.h5part by ploting x vs px for timestep 54</font></p>
|
||||
<p><font face="Courier New, Courier, mono"> h5pToGNUplot -t 54 -1 x
|
||||
-2 px -i sample.h5part -o output.txt</font></p>
|
||||
<p><font face="Courier New, Courier, mono"> 2) Create GNU plot file
|
||||
output.txt from sample.h5part by ploting x vs px for timestep 54<br>
|
||||
using 1200 points from particle index 76</font></p>
|
||||
<p><font face="Courier New, Courier, mono"> h5pToGNUplot -t 54 -1 x
|
||||
-2 px -i sample.h5part -o output.txt -s 76 -n 1200</font></p>
|
||||
<p> </p>
|
||||
<p align="center"><font face="Arial, Helvetica, sans-serif"><a href="#TOP"><back
|
||||
to top></a></font></p>
|
||||
<p> </p>
|
||||
<p><font face="Arial, Helvetica, sans-serif" size="+1"><b><font color="#999999">---
|
||||
For h5pAttrib</font></b></font></p>
|
||||
<p> </p>
|
||||
<h2><font color="#555588" face="Arial, Helvetica, sans-serif"><a name="timesteps">[2]
|
||||
To see number of timesteps in a h5part file</a></font></h2>
|
||||
<p>Executing the program h5pAttrib with -n flag will display the number
|
||||
of timesteps in the file.</p>
|
||||
<p><font face="Arial, Helvetica, sans-serif"><b>EXAMPLE>></b></font></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif" size="+1"><b><font face="Courier New, Courier, mono">$></font></b></font><font face="Courier New, Courier, mono">
|
||||
./h5pAttrib -n sample.h5part</font></p>
|
||||
<p><font face="Courier New, Courier, mono">++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Printing number of timesteps
|
||||
for: sample.h5part ...</font></p>
|
||||
<p><font face="Courier New, Courier, mono">There are total 252 number
|
||||
of timesteps.<br>
|
||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</font></p>
|
||||
<p><font face="Courier New, Courier, mono">done</font><font face="Arial, Helvetica, sans-serif"><br>
|
||||
</font></p>
|
||||
<p> </p>
|
||||
<p align="center"><font face="Arial, Helvetica, sans-serif"><a href="#TOP"><back
|
||||
to top></a></font></p>
|
||||
<h2><font color="#666699" face="Arial, Helvetica, sans-serif"><br>
|
||||
<font color="#555588"><a name="file attributes">[3] To see file attributes
|
||||
in a h5part file</a></font></font></h2>
|
||||
<p>File attribute contains information about the file. (file description
|
||||
etc...) Executing the program h5pAttrib with -A flag will display
|
||||
the file attributes in the file.</p>
|
||||
<p><font face="Arial, Helvetica, sans-serif"><b>EXAMPLE>></b></font></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif" size="+1"><b><font face="Courier New, Courier, mono">$></font></b></font><font face="Courier New, Courier, mono">
|
||||
./h5pAttrib -A sample.h5part</font></p>
|
||||
<p><font face="Courier New, Courier, mono">++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Printing file attributes
|
||||
for: sample.h5part ...</font></p>
|
||||
<p><font face="Courier New, Courier, mono">The number of file attributes
|
||||
for file sample.h5part is 0 ...<br>
|
||||
There are no file attributes.<br>
|
||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</font></p>
|
||||
<p><font face="Courier New, Courier, mono">done</font></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif"><br>
|
||||
<i>NOTE: -H option will omit the list of values of file attributes.</i></font></p>
|
||||
<p> </p>
|
||||
<p align="center"><font face="Arial, Helvetica, sans-serif"><a href="#TOP"><back
|
||||
to top></a></font></p>
|
||||
<p align="center"> </p>
|
||||
<h2><font color="#555588" face="Arial, Helvetica, sans-serif"><a name="step attributes">[4]
|
||||
To see step attributes in a h5part file</a></font></h2>
|
||||
<p>Step attribute contains information that belongs to a specific step.
|
||||
(step name, timestep number, etc...) Executing the program h5pAttrib
|
||||
with -a flag will display the step attributes in the file.<br>
|
||||
Note that the timestep index should follow -a flag.</p>
|
||||
<p><font face="Arial, Helvetica, sans-serif"><b>EXAMPLE>></b></font></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif"><b><font face="Courier New, Courier, mono" size="+1">$></font></b><font face="Courier New, Courier, mono">
|
||||
./h5pAttrib -a 2 sample.h5part</font></font></p>
|
||||
<p><font face="Courier New, Courier, mono">++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Printing step attributes
|
||||
for: sample.h5part ...</font></p>
|
||||
<p><font face="Courier New, Courier, mono">The number of step attributes
|
||||
for timestep #2 is 10 ...</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Attribute #0 = Step<br>
|
||||
There are 1 elements in the attribute<br>
|
||||
Attribute Type is H5T_NATIVE_INT64<br>
|
||||
Printing 1 element value(s):<br>
|
||||
COUNT[0]: 2</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Attribute #1 = Spos<br>
|
||||
There are 1 elements in the attribute<br>
|
||||
Attribute Type is H5T_NATIVE_DOUBLE<br>
|
||||
Printing 1 element value(s):<br>
|
||||
COUNT[0]: 0.143580</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Attribute #2 = structLen<br>
|
||||
There are 1 elements in the attribute<br>
|
||||
Attribute Type is H5T_NATIVE_DOUBLE<br>
|
||||
Printing 1 element value(s):<br>
|
||||
COUNT[0]: 2.393000</font></p>
|
||||
<p><font face="Courier New, Courier, mono">.<br>
|
||||
.<br>
|
||||
.</font></p>
|
||||
<p><font face="Courier New, Courier, mono"><br>
|
||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</font></p>
|
||||
<p><font face="Courier New, Courier, mono">done</font></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif"><br>
|
||||
<i>NOTE: -H option will omit the list of values of step attributes.</i></font></p>
|
||||
<p> </p>
|
||||
<p align="center"><font face="Arial, Helvetica, sans-serif"><a href="#TOP"><back
|
||||
to top></a></font></p>
|
||||
<h2><font color="#555588" face="Arial, Helvetica, sans-serif"><br>
|
||||
<a name="dataset">[5] To see dataset in a h5part file</a></font></h2>
|
||||
<p>Executing the program h5pAttrib with -d flag will display the datasets
|
||||
information in the file. (dataset name, type, number of elements,
|
||||
etc...) Executing the program h5pAttrib with -d flag will display
|
||||
the datasets information in the file.<br>
|
||||
Note that the timestep index should follow -d flag.</p>
|
||||
<p><font face="Arial, Helvetica, sans-serif"><b>EXAMPLE>></b></font></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif" size="+1"><b><font face="Courier New, Courier, mono">$></font></b></font><font face="Courier New, Courier, mono">
|
||||
./h5pAttrib -d 2 -H sample.h5part</font></p>
|
||||
<p><font face="Courier New, Courier, mono">++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Printing names of datasets
|
||||
for: sample.h5part ...</font></p>
|
||||
<p><font face="Courier New, Courier, mono">The number of datasets for
|
||||
timestep #2 is 7 ...</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Dataset Name #0 = id<br>
|
||||
Dataset Type is H5T_NATIVE_INT64<br>
|
||||
Number of elements: 67587</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Dataset Name #1 = px<br>
|
||||
Dataset Type is H5T_NATIVE_DOUBLE<br>
|
||||
Number of elements: 67587</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Dataset Name #2 = py<br>
|
||||
Dataset Type is H5T_NATIVE_DOUBLE<br>
|
||||
Number of elements: 67587</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Dataset Name #3 = pz<br>
|
||||
Dataset Type is H5T_NATIVE_DOUBLE<br>
|
||||
Number of elements: 67587</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Dataset Name #4 = x<br>
|
||||
Dataset Type is H5T_NATIVE_DOUBLE<br>
|
||||
Number of elements: 67587</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Dataset Name #5 = y<br>
|
||||
Dataset Type is H5T_NATIVE_DOUBLE<br>
|
||||
Number of elements: 67587</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Dataset Name #6 = z<br>
|
||||
Dataset Type is H5T_NATIVE_DOUBLE<br>
|
||||
Number of elements: 67587</font></p>
|
||||
<p><font face="Courier New, Courier, mono">++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</font></p>
|
||||
<p><font face="Courier New, Courier, mono">done</font></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif"><br>
|
||||
<i>NOTE: -H option will omit the list of values of datasets.</i></font></p>
|
||||
<p> </p>
|
||||
<p align="center"><font face="Arial, Helvetica, sans-serif"><a href="#TOP"><back
|
||||
to top></a></font></p>
|
||||
<p> </p>
|
||||
<h2><font color="#555588" face="Arial, Helvetica, sans-serif"><a name="flags">[6]
|
||||
Providing more than one flag at once</a></font></h2>
|
||||
<p><font face="Arial, Helvetica, sans-serif">When more than one flags
|
||||
are provided, one result after another will be displayed.</font></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif"><b>EXAMPLE>></b></font></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif" size="+1"><b><font face="Courier New, Courier, mono">$></font></b></font><font face="Courier New, Courier, mono">
|
||||
./h5pAttrib -H -a 1 -d 1 sample.h5part</font></p>
|
||||
<p><font face="Courier New, Courier, mono">++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Printing step attributes
|
||||
for: sample.h5part ...</font></p>
|
||||
<p><font face="Courier New, Courier, mono">The number of step attributes
|
||||
for timestep #1 is 10 ...</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Attribute #0 = Step<br>
|
||||
Attribute #1 = Spos<br>
|
||||
Attribute #2 = structLen<br>
|
||||
Attribute #3 = org<br>
|
||||
Attribute #4 = maxX<br>
|
||||
Attribute #5 = minX<br>
|
||||
Attribute #6 = maxP<br>
|
||||
Attribute #7 = minP<br>
|
||||
Attribute #8 = centroid<br>
|
||||
Attribute #9 = nloc<br>
|
||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</font></p>
|
||||
<p><font face="Courier New, Courier, mono"><br>
|
||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Printing names of datasets
|
||||
for: sample.h5part ...</font></p>
|
||||
<p><font face="Courier New, Courier, mono">The number of datasets for
|
||||
timestep #1 is 7 ...</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Dataset Name #0 = id<br>
|
||||
Dataset Type is H5T_NATIVE_INT64<br>
|
||||
Number of elements: 60214</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Dataset Name #1 = px<br>
|
||||
Dataset Type is H5T_NATIVE_DOUBLE<br>
|
||||
Number of elements: 60214</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Dataset Name #2 = py<br>
|
||||
Dataset Type is H5T_NATIVE_DOUBLE<br>
|
||||
Number of elements: 60214</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Dataset Name #3 = pz<br>
|
||||
Dataset Type is H5T_NATIVE_DOUBLE<br>
|
||||
Number of elements: 60214</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Dataset Name #4 = x<br>
|
||||
Dataset Type is H5T_NATIVE_DOUBLE<br>
|
||||
Number of elements: 60214</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Dataset Name #5 = y<br>
|
||||
Dataset Type is H5T_NATIVE_DOUBLE<br>
|
||||
Number of elements: 60214</font></p>
|
||||
<p><font face="Courier New, Courier, mono">Dataset Name #6 = z<br>
|
||||
Dataset Type is H5T_NATIVE_DOUBLE<br>
|
||||
Number of elements: 60214</font></p>
|
||||
<p><font face="Courier New, Courier, mono">++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</font></p>
|
||||
<p><font face="Courier New, Courier, mono">done</font></p>
|
||||
<p> </p>
|
||||
<div align="center"><font face="Arial, Helvetica, sans-serif"><a href="#TOP"><back
|
||||
to top></a></font></div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="80"></td>
|
||||
<td colspan="3" valign="top">
|
||||
<h2><font face="Arial, Helvetica, sans-serif" size="+1"><b><font color="#999999">---
|
||||
For h5pToGNUplot</font></b></font></h2>
|
||||
<h2><font color="#555588" face="Arial, Helvetica, sans-serif"><a name="parameters">[7]
|
||||
What parameters to provide</a></font></h2>
|
||||
<p><font face="Arial, Helvetica, sans-serif">When you execute the program
|
||||
with -h option, it displays what flags are necessary and what flags are
|
||||
optional.</font></p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="200"></td>
|
||||
<td valign="top" width="137">
|
||||
<p align="left"><b><font face="Arial, Helvetica, sans-serif">Short Version</font></b></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif">-h<br>
|
||||
-1<br>
|
||||
-2<br>
|
||||
-i<br>
|
||||
-t<br>
|
||||
-o<br>
|
||||
-n<br>
|
||||
-s </font></p>
|
||||
</td>
|
||||
<td valign="top" width="144">
|
||||
<p align="left"><b><font face="Arial, Helvetica, sans-serif">Long Version</font></b></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif">--help<br>
|
||||
--1var<br>
|
||||
--2var<br>
|
||||
--input<br>
|
||||
--timestep<br>
|
||||
--output<br>
|
||||
--number<br>
|
||||
--start </font></p>
|
||||
</td>
|
||||
<td valign="top" width="679">
|
||||
<p align="left"><b><font face="Arial, Helvetica, sans-serif">Meanings</font></b></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif">Print help page<br>
|
||||
(REQUIRED) Takes first variable parameter<br>
|
||||
(REQUIRED) Takes second variable parameter<br>
|
||||
(REQUIRED) Takes input file name<br>
|
||||
(REQUIRED) Sets the timestep (Value -1 will result in dumping values of
|
||||
all timesteps.)<br>
|
||||
(OPTIONAL) Takes output file name (without this flag, the program will
|
||||
print to stdout)<br>
|
||||
(OPTIONAL) Sets number of output points<br>
|
||||
(OPTIONAL) Sets the starting particle index</font> </p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="1786"></td>
|
||||
<td colspan="3" valign="top">
|
||||
<p> </p>
|
||||
<p align="center"><font face="Arial, Helvetica, sans-serif"><a href="#TOP"><back
|
||||
to top></a></font></p>
|
||||
<h2><font color="#555588" face="Arial, Helvetica, sans-serif"><br>
|
||||
<a name="input file">[8] How to create an input file to GNUplot</a></font></h2>
|
||||
<p><font face="Arial, Helvetica, sans-serif"><b>EXAMPLE>></b><br>
|
||||
<i>Create input file to GNUplot that plots x vs. y.</i></font></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif"><b><font face="Courier New, Courier, mono" size="+1">$></font></b><font face="Courier New, Courier, mono">
|
||||
./h5pToGNUplot -1 x -2 y -t 1 -i sample.h5part -o output.txt<br>
|
||||
<b><font size="+1">$></font></b> cat output.txt<br>
|
||||
-0.390779 -0.254793<br>
|
||||
-0.396527 -0.252781<br>
|
||||
-0.375362 -0.285137<br>
|
||||
-0.396527 -0.252781<br>
|
||||
-0.379917 -0.283147<br>
|
||||
-0.390779 -0.254793<br>
|
||||
-0.387536 -0.287346<br>
|
||||
-0.371787 -0.319797<br>
|
||||
-0.379917 -0.283147<br>
|
||||
-0.378967 -0.326058<br>
|
||||
-0.378976 -0.326078<br>
|
||||
-0.387536 -0.287346<br>
|
||||
-0.378957 -0.326069<br>
|
||||
-0.379917 -0.283147<br>
|
||||
-0.388762 -0.265390<br>
|
||||
-0.371787 -0.319797<br>
|
||||
-0.390779 -0.254793<br>
|
||||
-0.376825 -0.266804<br>
|
||||
-0.379917 -0.283147<br>
|
||||
-0.375362 -0.285137<br>
|
||||
...</font></font></p>
|
||||
<p><font face="Courier New, Courier, mono"><i>Then run GNUplot...</i></font></p>
|
||||
<p><font face="Courier New, Courier, mono"><b><font size="+1">$></font></b>
|
||||
gnuplot</font></p>
|
||||
<p><font face="Courier New, Courier, mono"> G N U P L O T<br>
|
||||
Version 4.0 patchlevel 0<br>
|
||||
last modified Thu Apr 15 14:44:22 CEST 2004<br>
|
||||
System: Linux 2.6.11.4-21.11-smp</font></p>
|
||||
<p><font face="Courier New, Courier, mono"> Copyright (C) 1986 - 1993, 1998,
|
||||
2004<br>
|
||||
Thomas Williams, Colin Kelley and many others</font></p>
|
||||
<p><font face="Courier New, Courier, mono"> This is gnuplot version 4.0.
|
||||
Please refer to the documentation<br>
|
||||
for command syntax changes. The old syntax will be accepted<br>
|
||||
throughout the 4.0 series, but all save files use the new syntax.</font></p>
|
||||
<p><font face="Courier New, Courier, mono"> Type `help` to access the on-line
|
||||
reference manual.<br>
|
||||
The gnuplot FAQ is available from<br>
|
||||
http://www.gnuplot.info/faq/</font></p>
|
||||
<p><font face="Courier New, Courier, mono"> Send comments and requests for
|
||||
help to<br>
|
||||
<gnuplot-info@lists.sourceforge.net><br>
|
||||
Send bugs, suggestions and mods to<br>
|
||||
<gnuplot-bugs@lists.sourceforge.net></font></p>
|
||||
<p><font face="Courier New, Courier, mono"><br>
|
||||
Terminal type set to 'x11'<br>
|
||||
<font size="+1"><b>gnuplot></b></font> plot "output.txt"</font></p>
|
||||
<p><font face="Arial, Helvetica, sans-serif"><i>This will open a GNUplot
|
||||
window that plots output.txt.</i></font></p>
|
||||
<p align="center"><img src="H5tools_files/snapshot1.jpg" height="541" width="672"><br>
|
||||
<font face="Arial, Helvetica, sans-serif"><Sample screen shot of GNUplot
|
||||
with input datafile generated by h5pToGNUplot></font></p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="44"></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
</body></html>
|
||||
|
After Width: | Height: | Size: 239 KiB |
@@ -0,0 +1,345 @@
|
||||
\documentclass[acus]{JAC2003}
|
||||
|
||||
%%
|
||||
%% Use \documentclass[boxit]{JAC2003}
|
||||
%% to draw a frame with the correct margins on the output.
|
||||
%%
|
||||
%% Use \documentclass[acus]{JAC2003}
|
||||
%% for US letter paper layout
|
||||
%%
|
||||
|
||||
\usepackage{graphicx}
|
||||
|
||||
%%
|
||||
%% VARIABLE HEIGHT FOR THE TITLE BOX (default 35mm)
|
||||
%%
|
||||
|
||||
\setlength{\titleblockheight}{40mm}
|
||||
|
||||
\begin{document}
|
||||
\title{H5Pie: A Portable High Performance Parallel Data Interface for Electromagnetics Simulations Including Particles\thanks{
|
||||
This work (LBNL-57607) was supported by the Director, Office of Science, Office of Advanced Scientific Computing Research, of the U.S. Department of Energy under Contract No. DE-AC03-76SF00098 and the DOE SciDAC project on ``Advanced Computing for 21st Century Accelerator Science and Technology.''.
|
||||
}}
|
||||
|
||||
\author{A. Adelmann, A. Gsell, B. Oswald, PSI, Villigen, Switzerland \\
|
||||
R.D. Ryne, LBNL/AFR, Berkeley, California, USA\\
|
||||
W. Bethel, J.M. Shalf, C. Siegerist, LBNL/NERSC, Berkeley, California, USA}
|
||||
|
||||
\maketitle
|
||||
\begin{abstract}
|
||||
The very largest parallel particle simulations, for problems
|
||||
involving six dimensional phase space,
|
||||
generate vast quantities of data. It is desirable to
|
||||
store such enormous datasets efficiently and also to share data
|
||||
effortlessly between data analysis tools
|
||||
such as VisIt or ParaView
|
||||
among other groups who are working on particle-based accelerator
|
||||
simulations. We define a very simple file schema built on top of HDF5~\cite{hdf5hp}
|
||||
(Hierarchical Data Format version 5) as well as an API that simplifies
|
||||
the reading/writing of the data to the HDF5 file format. HDF5 offers a
|
||||
self-describing machine-independent binary file format that supports
|
||||
scalable parallel I/O performance for MPI codes on computer systems
|
||||
ranging from laptops to supercomputers.
|
||||
|
||||
H5Pie is actually a composition of three parts. On a very abstract view we have,
|
||||
H5Part which handles the macro particles of a simulation. H5Mesh defines the (spatial) geometry of the
|
||||
computational domain and H5Fields represents scalar and vector filds. (H5Pie = H5{\bf P} art + H5F{\bf i}eld+ H5M{\bf e}sh)
|
||||
|
||||
|
||||
The sample H5Pie
|
||||
API will be available for C, C++, and Fortran codes.
|
||||
The common file format will enable groups that
|
||||
use completely different simulation implementations to transparently share
|
||||
datasets.
|
||||
\end{abstract}
|
||||
|
||||
\section{Motivation}
|
||||
The motivation for this undertaking is to create a file format that is
|
||||
suitable for large-scale parallel simulation codes.
|
||||
A suitable data format must have the following properties:
|
||||
it must be a machine-independent binary representation that is
|
||||
self-describing, easily extensible, language independent, efficient
|
||||
(both for serial and parallel), and produces files that are seamlessly sharable
|
||||
between different programs. In the following sections we describe
|
||||
the motivation for these features and how they can be accomplished
|
||||
using the proposed implementation.
|
||||
|
||||
\subsection{Machine Independence}
|
||||
Processor architectures use different binary representations
|
||||
for data. While the IEEE 754 standard has decreased the number of
|
||||
differing floating point number represenations, byte-order still remains
|
||||
a source of incompatibility. While it is trivial to byte-swap a file from
|
||||
a programming standpoint, it creates a number of long-term file management
|
||||
difficulties for groups that are sharing or maintaining a repository of simulation
|
||||
data. Given files that store data structures with differently sized elements,
|
||||
one must know the storage format precisely in order to apply byte-swapping
|
||||
properly.
|
||||
HDF5 does not suffer from these problems because the file format is completely
|
||||
self-describing and the internal binary structures are all machine independent.
|
||||
The HDF5 library is able to convert data that is stored in any native machine
|
||||
represenation in the data file into a native binary representation in memory
|
||||
as part of the reading process with little performance penalty.
|
||||
|
||||
\subsection{Language Independence}
|
||||
The three most common languages used for implementing applications
|
||||
in the arena of computational sciences are
|
||||
Fortran, C and C++. The file format and associated API must hide
|
||||
differences in the binary file-storage conventions of these languages
|
||||
as well as offering native API bindings for each of these
|
||||
programming languages.
|
||||
|
||||
For instance, Fortran unformatted binary files contain integer fields
|
||||
at the beginning and the end of each record that describe the length
|
||||
of the record. The size of these integer tags is usually 32-bits, but some
|
||||
fortran compiler implementations will use larger tags in order to represent
|
||||
larger record sizes. C and C++ binary files have no such convention for
|
||||
record-oriented storage. The language-dependent differences in
|
||||
binary storage layout conventions
|
||||
can cause difficulties for scientists who wish to share data files between
|
||||
Fortran and C/C++ implementations of a code, or with visualization tools
|
||||
that are primarily written in C/C++. The API bindings and underlying file format
|
||||
provided by the H5Part API and the underlying HDF5 file format are able to
|
||||
hide these differences in order to provide symmetric access via all languages.
|
||||
|
||||
\subsection{Self-Describing}
|
||||
The data is accessed by names, for example, one might ask for `the
|
||||
column of data called $p_x$' -- affording a layer of file-layout independence.
|
||||
In other words, self-describing data is
|
||||
not accessed by a position in a file but by name of the datasets. Various attributes
|
||||
of the data that may be necessary to using it are available. For
|
||||
example, one can ask ``what are the units of column $p_x$?'.
|
||||
|
||||
There are a number of examples of self-describing file formats. Examples include HDF earlier HDF implementations leading up to HDF version 5 and the Unidata NetCDF format. Another
|
||||
very popular approach is the Self Describing Data Sets (SDDS) \cite{SDDS} although it
|
||||
is only serial in nature. HDF5 is a complete rewrite of the HDF file format that supports
|
||||
parallel I/O and offers a much leaner, more flexible interface.
|
||||
Because it is self-describing, the entire contents of an HDF5 file can be
|
||||
browsed and even converted to ASCII text, including XML syntax text files,
|
||||
using the built-in 'h5ls' and 'h5dump'
|
||||
tools without specific knowledge of the internal file format.
|
||||
|
||||
\begin{figure}[htb]
|
||||
\begin{minipage}[b]{0.5\textwidth}
|
||||
%\includegraphics[scale=0.095]{./partview1.eps}
|
||||
%\includegraphics[scale=0.097]{./density70.eps}
|
||||
\end{minipage}
|
||||
\caption{color: A common self-describing file format allows different codes to share a common set of visualization and data analysis tools. PartView and AVS/Express, pictured above, are able to read and display contents of an H5Part/HDF5 file written on any machine in any language, regardless of how many processors are used.}
|
||||
\label{fig:vis}
|
||||
\end{figure}
|
||||
|
||||
The primary advantage of accessing data and its attributes is that one
|
||||
can then construct more flexible data manipulation tools that are capable
|
||||
of surviving the natural evolution of file formats. Data formats can be extended
|
||||
to include additional information without breaking older file readers.
|
||||
Self-describing data contains all the information
|
||||
that analysis tools need to manipulate various types of data
|
||||
correctly. Two examples of such tools using the proposed file format
|
||||
are shown in Figure ~\ref{fig:vis} As a result, data exchange between different simulations tools is
|
||||
much simpler, robust and better defined by using self-describing data sets.
|
||||
|
||||
\subsection{High Performance}
|
||||
The HDF5 file format allows data elements to be written to disk in the
|
||||
native binary representation. The file format stores a description of
|
||||
the native data representation of the machine that wrote the data so
|
||||
that it can be automatically translated to the native binary
|
||||
representation of the machine that reading the data (eg. if the byte
|
||||
order differs). In contrast to XDR, where the data always gets
|
||||
translated to/from an intermediate machine-neutral format, the HDF5
|
||||
data conversion only occurs if the stored data represenation is
|
||||
different from the native binary representation of the machine that is
|
||||
reading the file, so there is no performance penalty if the machines
|
||||
have the compatible binary data formats. [ada: need work] In general, HDF5 offers
|
||||
performance that is very close to what can be achieved by writing an
|
||||
ad-hoc machine-dependent binary for F77 unformatted data file.
|
||||
|
||||
\subsection{Parallel I/O}
|
||||
HDF5 also supports parallel I/O capabilities for MPI programs.
|
||||
The naive approach to writing data from a parallel program is to
|
||||
write one file per processor. While this is simple to implement and
|
||||
very efficient on most cluster filesystems, it leads to file management
|
||||
headaches when it comes the time to analyze the data. One must either
|
||||
recombine these separate files into a single file or create ponderous
|
||||
user-interfaces that allow a data analysis application to read from a
|
||||
directory full of files instead of just one file.
|
||||
|
||||
Parallel I/O methods, allow you to write data into a single file from all
|
||||
of the tasks of a parallel program. The performance is typically lower
|
||||
than that of writing one-file-per-processor, but it makes data management
|
||||
much simpler after the program has finished. No additional recombining
|
||||
steps are required to make the file accessible by vis-tools or for
|
||||
restarting a simulation using a different number of processors.
|
||||
|
||||
Parallel HDF5 uses MPI-I/O for its low-level implementation. The
|
||||
mechanics of using MPI-I/O are all hidden from the user by our
|
||||
H5Part file API (the code looks nearly identical to reading/writing the data
|
||||
from a serial program). While the performance is not as good as
|
||||
writing one-file-per-processor, we demonstrate that writing files
|
||||
with Parallel HDF5 is consistently faster than writing the data
|
||||
in raw/native binary using the MPI-I/O library. This efficiency is
|
||||
made possible through sophisticated HDF5 tuning directives that
|
||||
control data alignment and caching within the HDF5 layer.
|
||||
Therefore, we argue that it would be difficult to match
|
||||
HDF5 performance even using a home-grown binary file format.
|
||||
|
||||
\section{H5Mesh File Organization and API}
|
||||
|
||||
\section{H5Field File Organization and API}
|
||||
|
||||
\section{H5Part File Organization and API}
|
||||
The proposed file storage format uses HDF5 for the low-level file
|
||||
storage and a simple API to provide a high-level interface to that
|
||||
file format. A programmer can either use the H5Part API to access
|
||||
the data files or write directly to the file format using some simple
|
||||
conventions for organizing and naming the objects stored in the
|
||||
file.
|
||||
|
||||
The HDF5 format, its benefits, and its file organization is decribed
|
||||
at \cite{hdf5hp}. The file format was also adopted by the DOE
|
||||
ASCI-VIEWS effort, so the library has been tuned and adapted to read
|
||||
and write data efficiently on large-scale parallel computing
|
||||
systems. We adopted HDF5 for our file storage needs because it offers
|
||||
all that is needed as stipulated in the motivation section.
|
||||
|
||||
We describe now the H5Part conventions for storing
|
||||
objects in the HDF5 file as well as some examples of the API.
|
||||
\subsection{H5Part File Organization}
|
||||
In order to store Particle Data in the HDF5 file format, we have
|
||||
formalized the hierarchical arrangement of the datasets and naming
|
||||
conventions for the groups and associated datasets. The sample H5Part API formally
|
||||
encodes these conventions in order to provide a simple and uniform
|
||||
way to access these files from C, C++, and Fortran codes. The API makes
|
||||
it easier to write very portable data adaptors for visualization tools in order to
|
||||
expand the number of tools available to access the data. Even so,
|
||||
anyone can use the HDF5 $h5ls$ utility to examine the organization
|
||||
of the H5Part files and even write their own HDF5-based interface for reading and writing the
|
||||
file format. The standards offered by the sample API are completely independent of the
|
||||
standard for organizing data within the file.
|
||||
|
||||
The file format supports the storage of multiple timesteps of
|
||||
datasets that contain multiple fields. The fields correspond to different properties of
|
||||
the particles at that particular time step -- for instance,
|
||||
the 3-dimensional cartesian position of the particles
|
||||
$(X,Y,Z)$ as well as the 3-dimensional phase of each
|
||||
particle $(PX,PY,PZ)$. These two degrees of freedom
|
||||
are organized such that the timesteps are groups (time groups) that are added sequentially
|
||||
to the root group (``/''). The fields are datasets that are nested within the
|
||||
time groups. The convention for naming the time group is $Particles<integer>$ where $<integer>$ is a monotonically increasing counter for the number of timesteps stored in the file.
|
||||
|
||||
The fields contained within a given time group are simply named for the property of the particle they represent. For instance, the phase of the particle stored in a simulation variable called 'px' is simply named $``px''$. The field names are user-defined and
|
||||
can be understood automatically by the visualization
|
||||
tools that read the file. The only other convention is that each time group must contain the same set of fields -- the contents of the fields will change, but the set of names for these fields must remain the same for all timesteps.
|
||||
|
||||
The fields can be either integer or real data types. Initially, the file format supports double precision float and 64-bit integers in order to simplify the requirements for file readers, but HDF5 is capable of automatically down-converting to 32-bit data types upon request. The API will be extended accordingly to support these conversions.
|
||||
|
||||
Finally, the file, the individual timesteps, and the individual data arrays can contain {\em attributes} that provide additional information about the data. For instance, the datasets can be annotated with attributes containing {\em units} for a given data field, simulation parameters, or code revision information. The {\em attributes} are key-value pairs where the $key$ is a string that is associated with the file, group, or dataset, and the $value$ is either a string, a real value, or an integer associated with that key.
|
||||
|
||||
%Visualization and data analysis tools can take advantage of this additional information if they are programmed to recognize it, but less-sophisticated tools can safely ignore it without compromising their ability to read the file format.
|
||||
|
||||
% ada: to philosophic for a 3 page paper, although it is very important and of course right!
|
||||
%The ability to ignore such information is arguably one of the most powerful capabilities of the HDF5 file format. Whereas changes to headers or data layout in conventional, non-self-describing file formats can render an older reader interface useless, one can continuously add new descriptive information to the HDF5 file without having any detrimental effect on readers that were designed to work with older versions of the file format. This provides enormous benefits for the long term maintenance and evolution of the file format.
|
||||
|
||||
\section{GENERAL FORM IN PSEUDOCODE}
|
||||
In Figure \ref{fig:usage} we show the very simple API for writing
|
||||
data. The API for reading is almost symmetric. It is also worth to
|
||||
note that there are minimal differences whether one read/write serial
|
||||
or in parallel. The API consists of a small number of C, C++ and
|
||||
Fortran functions and will be described elsewhere.
|
||||
In the parallel case the original domain decomposition can be used or
|
||||
the data can be decomposed according to the new number of processor
|
||||
nodes available.
|
||||
The resulting HDF5 file will contains a simple directory structure that can be navigated using the generic 'h5ls' utility;
|
||||
\begin{figure}[h!] \label{fig:sbendVect}
|
||||
\newsavebox{\gogo}
|
||||
\setbox\gogo=\hbox{%
|
||||
\begin{minipage}{0.4\textwidth}
|
||||
\small
|
||||
\begin{tabbing}
|
||||
111111\=aaaa\=aaaa\=aaaa\=\kill
|
||||
\texttt{if(not parallel);}\\
|
||||
\quad\texttt{filehandle=OpenFile(filename,mode)} \\
|
||||
\texttt{else}\\
|
||||
\quad\texttt{filehandle=OpenFile(filename,mode,mpicomm)} \\
|
||||
\texttt{SetNumberOfParticles(filehandle);}\\
|
||||
\texttt{loop(step=1,NSteps);}\\
|
||||
\quad\texttt{SetStep(filehandle,step);}\\
|
||||
\quad\texttt{WriteData(filehandle,fieldname1,data1);}\\
|
||||
\centerline{\texttt{{\bf write more data}}}\\
|
||||
\quad\texttt{WriteData(filehandle,fieldname<n>,data<n>);}\\
|
||||
\texttt{CloseFile(filehandle);}
|
||||
\end{tabbing}
|
||||
\end{minipage}
|
||||
}
|
||||
\fbox{\usebox{\gogo}}
|
||||
\caption{Usage of H5Part in pseudo-code}
|
||||
\label{fig:usage}
|
||||
\end{figure}
|
||||
|
||||
% \begin{figure}[h!] \label{fig:sbendVect}
|
||||
% \newsavebox{\gugu}
|
||||
% \setbox\gugu=\hbox{%
|
||||
% \begin{minipage}{0.4\textwidth}
|
||||
% \small
|
||||
% \begin{tabbing}
|
||||
% 111111\=aaaa\=aaaa\=aaaa\=\kill
|
||||
%\texttt{/Particles1/fieldname1 } \\
|
||||
%\texttt{/Particles1/fieldname2} \\
|
||||
%\texttt{ . . . } \\
|
||||
%\texttt{/Particles1/fieldname<n> } \\
|
||||
%\texttt{/Particles2/fieldname1} \\
|
||||
%\texttt{ . . .}\\
|
||||
%\texttt{ /Particles<nsteps>/fieldname<n>}
|
||||
%\end{tabbing}
|
||||
%\end{minipage}
|
||||
%}
|
||||
%\fbox{\usebox{\gugu}}
|
||||
%\end{figure}
|
||||
\vspace{-5mm}
|
||||
\section{PERFORMANCE}
|
||||
% [ada] We also have data for 4 procs
|
||||
% [ada] name for one file per proc
|
||||
Preliminary performance estimations, looking at global (GD) and local data (LD)
|
||||
rates, suggests that our HDF5 writing has a very good performance even
|
||||
with respect to raw mpi, as shown in Table \ref{tab:perf}.
|
||||
\begin{table}[h!]
|
||||
\begin{flushleft} \footnotesize
|
||||
\begin{tabular}{|l|l|l|}
|
||||
\hline
|
||||
\bf Mode & \bf GD [MB/s] & \bf LD [MB/s]\\
|
||||
\hline
|
||||
mpi-io (one file) & 241 & 3.7 \\
|
||||
\hline
|
||||
one file per proc & 1288 & 20 \\
|
||||
\hline
|
||||
H5Part/pHDFf5 (one file) & 773 & 12 \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{flushleft}
|
||||
\caption{\label{tab:perf}{64 IBM SP-3 nodes writing $51e6$ particles (6D). }}
|
||||
%, each having 6 double-precision floating point fields for 64 timesteps over 3 trials.}}
|
||||
\end{table}
|
||||
\vspace{-4mm}
|
||||
\section{Conclusions and Future Work}
|
||||
The file format will be extended in the near future to integrate fast bitmap indexing
|
||||
technology~\cite{DEX} in order to provide accelerated queries of data
|
||||
stored in the file. With fastbit technolgy, a user can efficiently extract subsets of data
|
||||
using compound query expressions such
|
||||
as {\it $(velocity > 1e6)$ AND $(0.4 < phase < 1.0)$}.
|
||||
%Such a query-driven approach offers advantages over scalable technologies aimed at visualizing ever-larger datasets.
|
||||
|
||||
We are also constantly tuning the performance of the parallel data
|
||||
file format implementation. We will also be porting the H5Part reader
|
||||
to a wider variety of visualization tools.
|
||||
%in order to expand the arena
|
||||
%of tools available for analyzing the stored particle data.
|
||||
\begin{thebibliography}{9} % Use for 1-9 references
|
||||
\bibitem{FPAT082}
|
||||
A. Adelmann, R.D Ryne, C. Siegerist, J. Shalf, "From Visualization to Data Mining With Large Datasets," PAC, 2005.
|
||||
\bibitem{hdf5hp}
|
||||
HDF5 Home Page, http://hdf.ncsa.uiuc.edu/HDF5.
|
||||
\bibitem{SDDS}
|
||||
Definitions and libraries for SDDS implementation may be found at the link http://www.aps.anl.gov/asd/oag/oagPackages.shtml.
|
||||
\bibitem{DEX}
|
||||
K. Stockinger, J. Shalf, W. Bethel, K. Wu. "DEX: Increasing the Capability of Scientific Data Analysis Pipelines by Using Efficient Bitmap Indices to Accelerate Scientific Visualization." Scientific and Statistical Database Management Conference (SDDBM), 2005.
|
||||
\end{thebibliography}
|
||||
|
||||
\end{document}
|
||||
@@ -0,0 +1,217 @@
|
||||
%%
|
||||
%% This file has been developed as a common template for papers
|
||||
%% destined for electronic production using Adobe Acrobat
|
||||
%% software for Accelerator Conferences
|
||||
%%
|
||||
%% See the JACo Website for more information
|
||||
%%
|
||||
%% http://www.cern.ch/accelconf/
|
||||
%%
|
||||
|
||||
% Special thanks to John Jowett and Michel Goossens from CERN and
|
||||
% Martin Comyn at TRIUMF for their significant contributions to
|
||||
% this class file over the period 1996 to 2000.
|
||||
% John Poole
|
||||
% March 2000
|
||||
|
||||
|
||||
% JAC2001.cls is a modified version of JAC2000.cls to produce indented
|
||||
% first paragraphs after section, subsection and subsubsection headings.
|
||||
%
|
||||
% Martin Comyn April 2001
|
||||
|
||||
\def\fileversion{1.2}
|
||||
\def\filedate{2003/03/10}
|
||||
\def\docdate {2003/03/10}
|
||||
|
||||
\newlength{\dsep}
|
||||
\newlength{\dwid}
|
||||
\newlength{\dht}
|
||||
\NeedsTeXFormat{LaTeX2e}
|
||||
\ProvidesClass{JAC2003}[\filedate\space Version \fileversion]
|
||||
\DeclareOption{acus}
|
||||
{\setlength{\dwid}{6mm}%
|
||||
\setlength{\dht}{-18mm}
|
||||
\setlength{\paperheight}{11in}
|
||||
\setlength{\paperwidth}{8.5in}
|
||||
\typeout{Setup for US LETTER PAPER}}
|
||||
\DeclareOption{aca4}
|
||||
{\setlength{\dwid}{0mm}%
|
||||
\setlength{\dht}{0mm}}
|
||||
\DeclareOption{boxit}
|
||||
%%
|
||||
%% This option draws a box on the output text with the correct margins
|
||||
%%
|
||||
{\special{!userdict begin /bop-hook{
|
||||
gsave
|
||||
newpath
|
||||
58 55 moveto
|
||||
58 737 lineto
|
||||
539 737 lineto
|
||||
539 55 lineto
|
||||
closepath
|
||||
stroke
|
||||
grestore
|
||||
}def end}}
|
||||
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
|
||||
|
||||
\ExecuteOptions{aca4}
|
||||
\ProcessOptions
|
||||
|
||||
\LoadClass[10pt]{article}
|
||||
%%
|
||||
%% Using Times fonts produces a Uniform, compact document
|
||||
%% suitable for the Acrobat Software and printable anywhere.
|
||||
%%
|
||||
%% In a 'modern' TeX installation
|
||||
%% e.g TeXLive Version 3 or later (more information on the JACo Website)
|
||||
%% one can use the following command
|
||||
%%
|
||||
|
||||
\renewcommand{\rmdefault}{ptm}
|
||||
|
||||
%%
|
||||
%% Older installations may require
|
||||
%% \RequirePackage{times}
|
||||
%%
|
||||
\typeout{------------------------------------------------------------------------}
|
||||
\typeout{LaTeX2e Class file for Accelerator Conference publication for LaTeX2e users}
|
||||
\typeout{ }
|
||||
\typeout{Use the boxit option to draw a box on page showing the correct margins}
|
||||
\typeout{ }
|
||||
\typeout{Itemize, Enumerate and Description environments are compact versions}
|
||||
\typeout{------------------------------------------------------------------------}
|
||||
\typeout{ }
|
||||
|
||||
%
|
||||
% DIMENSION OF TEXT:
|
||||
|
||||
\setlength{\textheight}{241mm}
|
||||
\setlength{\textwidth}{170mm}
|
||||
\setlength{\topmargin}{23mm}
|
||||
\addtolength{\topmargin}{\dht}
|
||||
\setlength{\oddsidemargin}{20mm}
|
||||
\setlength{\evensidemargin}{20mm}
|
||||
\setlength{\columnsep}{5mm}
|
||||
|
||||
|
||||
\hoffset -25.4mm
|
||||
\voffset -25.4mm
|
||||
|
||||
\columnseprule 0pt % Width of rule between columns.
|
||||
|
||||
% Use Michel Goossens' dense lists
|
||||
% Prevent infinite loops
|
||||
|
||||
\let\Otemize =\itemize
|
||||
\let\Onumerate =\enumerate
|
||||
\let\Oescription =\description
|
||||
% Zero the vertical spacing parameters
|
||||
\def\Nospacing{\itemsep=0pt\topsep=0pt\partopsep=0pt\parskip=0pt\parsep=0pt}
|
||||
% Redefine the environments in terms of the original values
|
||||
\newenvironment{Itemize}{\Otemize\Nospacing}{\endlist}
|
||||
\newenvironment{Enumerate}{\Onumerate\Nospacing}{\endlist}
|
||||
\newenvironment{Description}{\Oescription\Nospacing}{\endlist}
|
||||
|
||||
\renewcommand{\topfraction}{.95}
|
||||
\renewcommand{\bottomfraction}{.95}
|
||||
\renewcommand{\textfraction}{0.1}
|
||||
\renewcommand{\floatpagefraction}{0.8}
|
||||
|
||||
\def\@oddhead{}\def\@evenhead{}
|
||||
\def\@oddfoot{}
|
||||
\def\@evenfoot{\@oddfoot}
|
||||
|
||||
%-----------------------------------------------------------------------
|
||||
% We acknowledge the borrowing of the clever part of
|
||||
% Steven Gildea's definition of \section
|
||||
% from geophysi.sty.
|
||||
%
|
||||
% \section is tricky because we want to both support \section* and have
|
||||
% the section title uppercased.
|
||||
|
||||
\def\section{\secdef\@sectionb\@sections}
|
||||
\def\@sectionb[#1]#2{\@sections{#2}}
|
||||
\def\@sections#1{\@startsection {section}{1}{\z@}
|
||||
{2.8ex plus 0.8ex minus .1ex}{1.5ex plus .2ex}
|
||||
{\large\bf\boldmath\centering}{\uppercase{#1}}}
|
||||
% Should there be any problem with this, we can revert to the following
|
||||
% but then the onus is on the user to type the argument of \section in
|
||||
% uppercase in the input file.
|
||||
%
|
||||
%\def\section{\@startsection {section}{1}{\z@}{2.8ex plus 0.8ex minus.1ex}
|
||||
% {1.5ex plus .2ex}{\large\bf\boldmath\centering}}
|
||||
|
||||
\def\subsection{\@startsection{subsection}{2}{\z@}{2.6ex plus .8ex minus
|
||||
.17ex}{1.2ex plus .17ex}{\large\it}}
|
||||
\def\subsubsection{\@startsection{subsubsection}{3}{\parindent}
|
||||
{2.5ex plus .7ex minus .17ex}{-1em}{\normalsize\bf}}
|
||||
\def\paragraph{\@startsection
|
||||
{paragraph}{4}{\z@}{2.5ex plus .7ex minus .17ex}{-1em}{\normalsize\it}}
|
||||
\def\subparagraph{\@startsection
|
||||
{subparagraph}{4}{\parindent}{2.25ex plus .7ex minus
|
||||
.17ex}{-1em}{\normalsize\bf}}
|
||||
|
||||
\setcounter{secnumdepth}{0}
|
||||
|
||||
% This definition of \maketitle taken from article.sty, and has been
|
||||
% somewhat modified.
|
||||
|
||||
\def\maketitle{\par
|
||||
\begingroup
|
||||
\def\thefootnote{\fnsymbol{footnote}}
|
||||
\def\@makefnmark{\hbox
|
||||
to 5pt{$^{\@thefnmark}$\hss}}
|
||||
\twocolumn[\@maketitle]
|
||||
\@thanks
|
||||
\endgroup
|
||||
\setcounter{footnote}{0}
|
||||
\let\maketitle\relax
|
||||
\let\@maketitle\relax
|
||||
\gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
|
||||
|
||||
\newlength{\titleblockheight} % so user can change it if need be
|
||||
\setlength{\titleblockheight}{3.5cm}
|
||||
|
||||
|
||||
\def\@maketitle{\vbox to \titleblockheight {\hsize\textwidth
|
||||
\linewidth\hsize \vskip 3pt \centering
|
||||
{\Large\bf \@title \par}
|
||||
\vskip 2em % Vertical space after title.
|
||||
{\large\begin{tabular}[t]{@{}c@{}}\@author \end{tabular}\par}
|
||||
\vfil}}
|
||||
|
||||
|
||||
% The \copyrightspace command is used to produce a blank space in the first
|
||||
% column where a copyright notice may go. It works by producing a
|
||||
% blank footnote of the appropriate size. Note that it should appear
|
||||
% after any \footnote commands that produce footnotes for the first
|
||||
% column. Adjusted to leave just 1cm.
|
||||
|
||||
\def\copyrightspace{\footnotetext[0]{\mbox{}\vrule height 1cm width 0pt}}
|
||||
|
||||
\def\abstract{\subsection*{Abstract}}
|
||||
\def\endabstract{\par}
|
||||
|
||||
% Redefine to use smaller fonts
|
||||
\def\thebibliography#1{\setlength{\itemsep}{0pt}\setlength{\parsep}{0pt}
|
||||
\section*{REFERENCES\@mkboth
|
||||
{REFERENCES}{REFERENCES}}\small\list
|
||||
{[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
|
||||
\advance\leftmargin\labelsep
|
||||
\usecounter{enumi}}
|
||||
\def\newblock{\hskip .11em plus .33em minus .07em}
|
||||
\sloppy\clubpenalty4000\widowpenalty4000
|
||||
\sfcode`\.=1000\relax}
|
||||
|
||||
\let\endthebibliography=\endlist
|
||||
|
||||
\twocolumn
|
||||
\sloppy
|
||||
\parindent 1em
|
||||
\leftmargini 2em
|
||||
\leftmargin\leftmargini
|
||||
\leftmarginv .5em
|
||||
\leftmarginvi .5em
|
||||
\flushbottom
|
||||
%-----------------------------------------------------------------------
|
||||
@@ -0,0 +1,14 @@
|
||||
#################################################
|
||||
##BEGIN OF makefile "makefile" - using the gnu-compiler g++
|
||||
##This file is used by the Make command.
|
||||
###################################################
|
||||
|
||||
FILE=H5xxx
|
||||
|
||||
all: $(FILE).tex
|
||||
latex $(FILE).tex
|
||||
#bibtex $(FILE)
|
||||
dvips -j0 $(FILE).dvi -o $(FILE).ps
|
||||
# dvips $(FILE).dvi -o $(FILE).ps -x 1200 -O 10mm,15mm
|
||||
clean:
|
||||
rm *~ *.bbl *.aux *.blg *.log *.dvi *.ps
|
||||
@@ -0,0 +1,54 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>H5Part, Logical Internal HDF5 File Layout</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
||||
<meta name="keywords" content="scientific visualization">
|
||||
<meta name="sitemap" content="put a brief descriptive phrase here that will show up in the site map:foo">
|
||||
|
||||
|
||||
<div id="maincenter">
|
||||
<font face="arial,helvetica"><h1>H5Part: Logical Internal HDF5 File Layout</h1></font>
|
||||
<P>
|
||||
HDF5 is extremely flexible in the sense that it allows the user to define a higher level data model to describe domain-specific data relationships. This flexibility however makes it necessary to develop an agreement on the logical layout of the data. The H5Part data model consists of Particle groups corresponding to the simulation time steps, each with seven datasets corresponding to x, px, y, py, z, pz, id for each particle. Attributes can be added to the file and to the datasets.
|
||||
</P>
|
||||
<center><img src="layout.png"></center>
|
||||
<PRE>
|
||||
HDF5 "parttest.h5" {
|
||||
GROUP "/" {
|
||||
GROUP "Particles#0" {
|
||||
DATASET "id" {
|
||||
DATATYPE H5T_STD_I64LE
|
||||
DATASPACE SIMPLE { ( 10 ) / ( 10 ) }
|
||||
}
|
||||
DATASET "px" {
|
||||
DATATYPE H5T_IEEE_F64LE
|
||||
DATASPACE SIMPLE { ( 10 ) / ( 10 ) }
|
||||
}
|
||||
DATASET "py" {
|
||||
DATATYPE H5T_IEEE_F64LE
|
||||
DATASPACE SIMPLE { ( 10 ) / ( 10 ) }
|
||||
}
|
||||
DATASET "pz" {
|
||||
DATATYPE H5T_IEEE_F64LE
|
||||
DATASPACE SIMPLE { ( 10 ) / ( 10 ) }
|
||||
}
|
||||
DATASET "x" {
|
||||
DATATYPE H5T_IEEE_F64LE
|
||||
DATASPACE SIMPLE { ( 10 ) / ( 10 ) }
|
||||
}
|
||||
DATASET "y" {
|
||||
DATATYPE H5T_IEEE_F64LE
|
||||
DATASPACE SIMPLE { ( 10 ) / ( 10 ) }
|
||||
}
|
||||
DATASET "z" {
|
||||
DATATYPE H5T_IEEE_F64LE
|
||||
DATASPACE SIMPLE { ( 10 ) / ( 10 ) }
|
||||
}
|
||||
}
|
||||
</PRE>
|
||||
<P>
|
||||
See <a href="http://www-vis.lbl.gov/Publications/2002/hdf5.pdf">hdf5.pdf</a> for an introduction on the use of HDF5.
|
||||
</P>
|
||||
</div>
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
EXTRA_DIST = \
|
||||
Doxyfile doxyfooter
|
||||
@@ -0,0 +1,146 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>H5Part: H5Part.h Source File</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.4 -->
|
||||
<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div>
|
||||
<h1>H5Part.h</h1><a href="H5Part_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef _H5Part_H_</span>
|
||||
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define _H5Part_H_</span>
|
||||
<a name="l00003"></a>00003 <span class="preprocessor"></span>
|
||||
<a name="l00004"></a>00004 <span class="preprocessor">#include <hdf5.h></span>
|
||||
<a name="l00005"></a>00005 <span class="preprocessor">#ifdef PARALLEL_IO</span>
|
||||
<a name="l00006"></a>00006 <span class="preprocessor"></span><span class="preprocessor">#include <mpi.h></span>
|
||||
<a name="l00007"></a>00007 <span class="preprocessor">#endif</span>
|
||||
<a name="l00008"></a>00008 <span class="preprocessor"></span>
|
||||
<a name="l00016"></a><a class="code" href="structH5PartFile.html">00016</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structH5PartFile.html">H5PartFile</a> {
|
||||
<a name="l00017"></a><a class="code" href="structH5PartFile.html#o0">00017</a> hid_t <a class="code" href="structH5PartFile.html#o0">file</a>;
|
||||
<a name="l00018"></a><a class="code" href="structH5PartFile.html#o1">00018</a> <span class="keywordtype">int</span> <a class="code" href="structH5PartFile.html#o1">timestep</a>;
|
||||
<a name="l00019"></a>00019
|
||||
<a name="l00020"></a><a class="code" href="structH5PartFile.html#o2">00020</a> hid_t <a class="code" href="structH5PartFile.html#o2">timegroup</a>;
|
||||
<a name="l00021"></a><a class="code" href="structH5PartFile.html#o3">00021</a> hid_t <a class="code" href="structH5PartFile.html#o3">properties</a>;
|
||||
<a name="l00022"></a><a class="code" href="structH5PartFile.html#o4">00022</a> hsize_t <a class="code" href="structH5PartFile.html#o4">nparticles</a>;
|
||||
<a name="l00023"></a><a class="code" href="structH5PartFile.html#o5">00023</a> hid_t <a class="code" href="structH5PartFile.html#o5">shape</a>;
|
||||
<a name="l00024"></a><a class="code" href="structH5PartFile.html#o6">00024</a> <span class="keywordtype">unsigned</span> <a class="code" href="structH5PartFile.html#o6">mode</a>;
|
||||
<a name="l00025"></a><a class="code" href="structH5PartFile.html#o7">00025</a> <span class="keywordtype">int</span> <a class="code" href="structH5PartFile.html#o7">maxstep</a>;
|
||||
<a name="l00026"></a><a class="code" href="structH5PartFile.html#o8">00026</a> hid_t <a class="code" href="structH5PartFile.html#o8">xfer_prop</a>,<a class="code" href="structH5PartFile.html#o9">create_prop</a>,<a class="code" href="structH5PartFile.html#o10">access_prop</a>;
|
||||
<a name="l00027"></a><a class="code" href="structH5PartFile.html#o12">00027</a> hid_t <a class="code" href="structH5PartFile.html#o11">diskshape</a>,<a class="code" href="structH5PartFile.html#o12">memshape</a>; <span class="comment">/* for parallel I/O (this is on-disk) H5S_ALL </span>
|
||||
<a name="l00028"></a>00028 <span class="comment"> if serial I/O */</span>
|
||||
<a name="l00029"></a><a class="code" href="structH5PartFile.html#o13">00029</a> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <a class="code" href="structH5PartFile.html#o13">viewstart</a>,<a class="code" href="structH5PartFile.html#o14">viewend</a>; <span class="comment">/* -1 if no view is available: A "view" looks at a subset of the data. */</span>
|
||||
<a name="l00030"></a>00030
|
||||
<a name="l00031"></a>00031 <span class="preprocessor">#ifdef PARALLEL_IO</span>
|
||||
<a name="l00032"></a>00032 <span class="preprocessor"></span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> *pnparticles; <span class="comment">/* the number of particles in each processor.</span>
|
||||
<a name="l00033"></a>00033 <span class="comment"> With respect to the "VIEW", these numbers</span>
|
||||
<a name="l00034"></a>00034 <span class="comment"> can be regarded as non-overlapping subsections</span>
|
||||
<a name="l00035"></a>00035 <span class="comment"> of the particle array stored in the file.</span>
|
||||
<a name="l00036"></a>00036 <span class="comment"> So they can be used to compute the offset of</span>
|
||||
<a name="l00037"></a>00037 <span class="comment"> the view for each processor */</span>
|
||||
<a name="l00038"></a>00038 MPI_Comm comm;
|
||||
<a name="l00039"></a>00039 <span class="keywordtype">int</span> nprocs,myproc;
|
||||
<a name="l00040"></a>00040 <span class="preprocessor">#endif</span>
|
||||
<a name="l00041"></a>00041 <span class="preprocessor"></span>}<a class="code" href="structH5PartFile.html">H5PartFile</a>;
|
||||
<a name="l00042"></a>00042
|
||||
<a name="l00043"></a><a class="code" href="H5Part_8h.html#a0">00043</a> <span class="preprocessor">#define H5PART_READ 0x01</span>
|
||||
<a name="l00044"></a><a class="code" href="H5Part_8h.html#a1">00044</a> <span class="preprocessor"></span><span class="preprocessor">#define H5PART_WRITE 0x02</span>
|
||||
<a name="l00045"></a>00045 <span class="preprocessor"></span>
|
||||
<a name="l00046"></a>00046 <span class="comment">/*========== File Opening/Closing ===============*/</span>
|
||||
<a name="l00047"></a>00047 <span class="preprocessor">#ifdef PARALLEL_IO</span>
|
||||
<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#include <mpi.h></span>
|
||||
<a name="l00049"></a>00049 <a class="code" href="structH5PartFile.html">H5PartFile</a> *<a class="code" href="H5Part_8c.html#a3">H5PartOpenFileParallel</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename,
|
||||
<a name="l00050"></a>00050 <span class="keywordtype">unsigned</span> flags,
|
||||
<a name="l00051"></a>00051 MPI_Comm communicator);
|
||||
<a name="l00052"></a>00052 <span class="preprocessor">#endif</span>
|
||||
<a name="l00053"></a><a class="code" href="H5Part_8h.html#a2">00053</a> <span class="preprocessor"></span><span class="preprocessor">#define H5PartOpenFileSerial(x,y) H5PartOpenFile(x,y)</span>
|
||||
<a name="l00054"></a>00054 <span class="preprocessor"></span>
|
||||
<a name="l00055"></a>00055 <a class="code" href="structH5PartFile.html">H5PartFile</a> *<a class="code" href="H5Part_8c.html#a4">H5PartOpenFile</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename, <span class="comment">/* name of datafile */</span>
|
||||
<a name="l00056"></a>00056 <span class="keywordtype">unsigned</span> flags); <span class="comment">/* H5PART_READ | H5PART_WRITE */</span>
|
||||
<a name="l00057"></a>00057 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a5">H5PartFileIsValid</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f);
|
||||
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="H5Part_8c.html#a6">H5PartCloseFile</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f);
|
||||
<a name="l00059"></a>00059
|
||||
<a name="l00060"></a>00060
|
||||
<a name="l00061"></a>00061 <span class="comment">/*============== File Writing Functions ==================== */</span>
|
||||
<a name="l00062"></a>00062 <span class="keywordtype">void</span> <a class="code" href="H5Part_8c.html#a7">H5PartSetNumParticles</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">long</span> <span class="keywordtype">long</span> nparticles);
|
||||
<a name="l00063"></a>00063 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a8">H5PartWriteDataFloat64</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">char</span> *name,<span class="keywordtype">double</span> *array);
|
||||
<a name="l00064"></a>00064 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a9">H5PartWriteDataInt64</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">char</span> *name,<span class="keywordtype">long</span> <span class="keywordtype">long</span> *array);
|
||||
<a name="l00065"></a>00065
|
||||
<a name="l00066"></a>00066 <span class="comment">/*================== File Reading Routines =================*/</span>
|
||||
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="H5Part_8c.html#a24">H5PartSetStep</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f, <span class="comment">/* file handle */</span>
|
||||
<a name="l00068"></a>00068 <span class="keywordtype">int</span> step); <span class="comment">/* current timestep to select (0 to n-1) */</span>
|
||||
<a name="l00069"></a>00069 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a27">H5PartGetNumSteps</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f);
|
||||
<a name="l00070"></a>00070 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a28">H5PartGetNumDatasets</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f);
|
||||
<a name="l00071"></a>00071 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a29">H5PartGetDatasetName</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">int</span> index,<span class="keywordtype">char</span> *name,<span class="keywordtype">int</span> maxlen);
|
||||
<a name="l00072"></a>00072 <span class="keywordtype">long</span> <span class="keywordtype">long</span> <a class="code" href="H5Part_8c.html#a33">H5PartGetNumParticles</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f);
|
||||
<a name="l00073"></a>00073 <span class="keywordtype">void</span> <a class="code" href="H5Part_8c.html#a34">H5PartSetView</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">long</span> <span class="keywordtype">long</span> start,<span class="keywordtype">long</span> <span class="keywordtype">long</span> end);
|
||||
<a name="l00074"></a><a class="code" href="H5Part_8h.html#a3">00074</a> <span class="preprocessor">#define H5PartResetView(f) H5PartSetView(f,-1,-1)</span>
|
||||
<a name="l00075"></a><a class="code" href="H5Part_8h.html#a4">00075</a> <span class="preprocessor"></span><span class="preprocessor">#define H5PartHasView(f) ((f->viewstart<0||f->viewend<0)?0:1)</span>
|
||||
<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a35">H5PartGetView</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">long</span> <span class="keywordtype">long</span> *start,<span class="keywordtype">long</span> <span class="keywordtype">long</span> *end);
|
||||
<a name="l00077"></a>00077 <span class="keywordtype">void</span> <a class="code" href="H5Part_8c.html#a36">H5PartSetCanonicalView</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f);
|
||||
<a name="l00078"></a>00078
|
||||
<a name="l00079"></a>00079 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a37">H5PartReadDataFloat64</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,
|
||||
<a name="l00080"></a>00080 <span class="keywordtype">char</span> *name, <span class="comment">/* name of the array to read</span>
|
||||
<a name="l00081"></a>00081 <span class="comment"> "x"=position in x direction (y,z)</span>
|
||||
<a name="l00082"></a>00082 <span class="comment"> "vx"=velocity in x directio (y,z)</span>
|
||||
<a name="l00083"></a>00083 <span class="comment"> "px"=position in x dir (y,z) */</span>
|
||||
<a name="l00084"></a>00084 <span class="keywordtype">double</span> *array); <span class="comment">/* array to read data into */</span>
|
||||
<a name="l00085"></a>00085 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a38">H5PartReadDataInt64</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,
|
||||
<a name="l00086"></a>00086 <span class="keywordtype">char</span> *name, <span class="comment">/* name of the array to read</span>
|
||||
<a name="l00087"></a>00087 <span class="comment"> "x"=position in x direction (y,z)</span>
|
||||
<a name="l00088"></a>00088 <span class="comment"> "vx"=velocity in x directio (y,z)</span>
|
||||
<a name="l00089"></a>00089 <span class="comment"> "px"=position in x dir (y,z) */</span>
|
||||
<a name="l00090"></a>00090 <span class="keywordtype">long</span> <span class="keywordtype">long</span> *array); <span class="comment">/* array to read data into */</span>
|
||||
<a name="l00091"></a>00091
|
||||
<a name="l00092"></a>00092 <span class="comment">/* the following is a back-door for extensions to the data writing */</span>
|
||||
<a name="l00093"></a>00093 <span class="preprocessor">#if 0</span>
|
||||
<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="keywordtype">int</span> H5PartReadData(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">char</span> *name,<span class="keywordtype">void</span> *array,hid_t type);
|
||||
<a name="l00095"></a>00095 <span class="keywordtype">int</span> H5PartWriteData(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">char</span> *name,<span class="keywordtype">void</span> *array,hid_t type);
|
||||
<a name="l00096"></a>00096 <span class="preprocessor">#endif</span>
|
||||
<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a39">H5PartReadParticleStep</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f, <span class="comment">/* filehandle */</span>
|
||||
<a name="l00098"></a>00098 <span class="keywordtype">int</span> step, <span class="comment">/* selects timestep to read from*/</span>
|
||||
<a name="l00099"></a>00099 <span class="keywordtype">double</span> *x,<span class="keywordtype">double</span> *y,<span class="keywordtype">double</span> *z, <span class="comment">/* particle positions */</span>
|
||||
<a name="l00100"></a>00100 <span class="keywordtype">double</span> *px,<span class="keywordtype">double</span> *py,<span class="keywordtype">double</span> *pz, <span class="comment">/* particle momenta */</span>
|
||||
<a name="l00101"></a>00101 <span class="keywordtype">long</span> <span class="keywordtype">long</span> *<span class="keywordtype">id</span>); <span class="comment">/* and phase */</span>
|
||||
<a name="l00102"></a>00102 <span class="comment">/**********==============Attributes Interface============***************/</span>
|
||||
<a name="l00103"></a>00103 <span class="comment">/* currently there is file attributes: Attributes bound to the file</span>
|
||||
<a name="l00104"></a>00104 <span class="comment"> and step attributes which are bound to the current timestep. You </span>
|
||||
<a name="l00105"></a>00105 <span class="comment"> must set the timestep explicitly before writing the attributes (just</span>
|
||||
<a name="l00106"></a>00106 <span class="comment"> as you must do when you write a new dataset. Currently there are no</span>
|
||||
<a name="l00107"></a>00107 <span class="comment"> attributes that are bound to a particular data array, but this could</span>
|
||||
<a name="l00108"></a>00108 <span class="comment"> easily be done if required.</span>
|
||||
<a name="l00109"></a>00109 <span class="comment">*/</span>
|
||||
<a name="l00110"></a>00110 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a12">H5PartWriteStepAttrib</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">char</span> *name,
|
||||
<a name="l00111"></a>00111 hid_t type,<span class="keywordtype">void</span> *attrib,<span class="keywordtype">int</span> nelem);
|
||||
<a name="l00112"></a>00112 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a14">H5PartWriteFileAttrib</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">char</span> *name,
|
||||
<a name="l00113"></a>00113 hid_t type,<span class="keywordtype">void</span> *attrib,<span class="keywordtype">int</span> nelem);
|
||||
<a name="l00114"></a>00114 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a13">H5PartWriteAttrib</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">char</span> *name,
|
||||
<a name="l00115"></a>00115 hid_t type,<span class="keywordtype">void</span> *attrib,<span class="keywordtype">int</span> nelem); <span class="comment">/* this should be deprecated */</span>
|
||||
<a name="l00116"></a>00116
|
||||
<a name="l00117"></a>00117 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a10">H5PartWriteFileAttribString</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">char</span> *name,
|
||||
<a name="l00118"></a>00118 <span class="keywordtype">char</span> *attrib);
|
||||
<a name="l00119"></a>00119 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a11">H5PartWriteStepAttribString</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">char</span> *name,
|
||||
<a name="l00120"></a>00120 <span class="keywordtype">char</span> *attrib);
|
||||
<a name="l00121"></a>00121 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a16">H5PartGetNumStepAttribs</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f); <span class="comment">/* for current filestep */</span>
|
||||
<a name="l00122"></a>00122 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a17">H5PartGetNumFileAttribs</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f);
|
||||
<a name="l00123"></a>00123 <span class="keywordtype">void</span> <a class="code" href="H5Part_8c.html#a19">H5PartGetStepAttribInfo</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">int</span> idx,
|
||||
<a name="l00124"></a>00124 <span class="keywordtype">char</span> *name,size_t maxnamelen,
|
||||
<a name="l00125"></a>00125 hid_t *type,<span class="keywordtype">int</span> *nelem);
|
||||
<a name="l00126"></a>00126 <span class="keywordtype">void</span> <a class="code" href="H5Part_8c.html#a20">H5PartGetFileAttribInfo</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">int</span> idx,
|
||||
<a name="l00127"></a>00127 <span class="keywordtype">char</span> *name,size_t maxnamelen,
|
||||
<a name="l00128"></a>00128 hid_t *type,<span class="keywordtype">int</span> *nelem);
|
||||
<a name="l00129"></a>00129 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a21">H5PartReadStepAttrib</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">char</span> *name,<span class="keywordtype">void</span> *data);
|
||||
<a name="l00130"></a>00130 <span class="keywordtype">void</span> <a class="code" href="H5Part_8c.html#a22">H5PartReadAttrib</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">char</span> *name,<span class="keywordtype">void</span> *data);
|
||||
<a name="l00131"></a>00131 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a23">H5PartReadFileAttrib</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">char</span> *name,<span class="keywordtype">void</span> *data);
|
||||
<a name="l00132"></a>00132
|
||||
<a name="l00133"></a>00133
|
||||
<a name="l00134"></a>00134 <span class="comment">/**************** File Stashing Interfaces *************************/</span>
|
||||
<a name="l00135"></a>00135 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a42">H5PartStashFile</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">char</span> *filename);
|
||||
<a name="l00136"></a>00136 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a43">H5PartUnstashFile</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f, <span class="keywordtype">char</span> *filename, <span class="keywordtype">char</span> *outputpath); <span class="comment">/* outputpath can be null for cwd */</span>
|
||||
<a name="l00137"></a>00137 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a44">H5PartGetNumStashFiles</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f);
|
||||
<a name="l00138"></a>00138 <span class="keywordtype">int</span> <a class="code" href="H5Part_8c.html#a45">H5PartFileGetStashFileName</a>(<a class="code" href="structH5PartFile.html">H5PartFile</a> *f,<span class="keywordtype">int</span> nameindex,<span class="keywordtype">char</span> *filename,<span class="keywordtype">int</span> maxnamelen);
|
||||
<a name="l00139"></a>00139
|
||||
<a name="l00140"></a>00140
|
||||
<a name="l00141"></a>00141 <span class="preprocessor">#endif</span>
|
||||
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jan 31 11:52:45 2006 for H5Part by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,16 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>H5Part: Class List</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.4 -->
|
||||
<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindexHL" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div>
|
||||
<h1>H5Part Class List</h1>Here are the classes, structs, unions and interfaces with brief descriptions:<table>
|
||||
<tr><td class="indexkey"><a class="el" href="structH5IO__getname__t.html">H5IO_getname_t</a></td><td class="indexvalue"></td></tr>
|
||||
<tr><td class="indexkey"><a class="el" href="structH5PartFile.html">H5PartFile</a></td><td class="indexvalue"></td></tr>
|
||||
</table>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Jan 31 11:52:45 2006 for H5Part by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,309 @@
|
||||
BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
|
||||
font-family: Geneva, Arial, Helvetica, sans-serif;
|
||||
}
|
||||
BODY,TD {
|
||||
font-size: 90%;
|
||||
}
|
||||
H1 {
|
||||
text-align: center;
|
||||
font-size: 160%;
|
||||
}
|
||||
H2 {
|
||||
font-size: 120%;
|
||||
}
|
||||
H3 {
|
||||
font-size: 100%;
|
||||
}
|
||||
CAPTION { font-weight: bold }
|
||||
DIV.qindex {
|
||||
width: 100%;
|
||||
background-color: #eeeeff;
|
||||
border: 1px solid #b0b0b0;
|
||||
text-align: center;
|
||||
margin: 2px;
|
||||
padding: 2px;
|
||||
line-height: 140%;
|
||||
}
|
||||
DIV.nav {
|
||||
width: 100%;
|
||||
background-color: #eeeeff;
|
||||
border: 1px solid #b0b0b0;
|
||||
text-align: center;
|
||||
margin: 2px;
|
||||
padding: 2px;
|
||||
line-height: 140%;
|
||||
}
|
||||
DIV.navtab {
|
||||
background-color: #eeeeff;
|
||||
border: 1px solid #b0b0b0;
|
||||
text-align: center;
|
||||
margin: 2px;
|
||||
margin-right: 15px;
|
||||
padding: 2px;
|
||||
}
|
||||
TD.navtab {
|
||||
font-size: 70%;
|
||||
}
|
||||
A.qindex {
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
color: #1A419D;
|
||||
}
|
||||
A.qindex:visited {
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
color: #1A419D
|
||||
}
|
||||
A.qindex:hover {
|
||||
text-decoration: none;
|
||||
background-color: #ddddff;
|
||||
}
|
||||
A.qindexHL {
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
background-color: #6666cc;
|
||||
color: #ffffff;
|
||||
border: 1px double #9295C2;
|
||||
}
|
||||
A.qindexHL:hover {
|
||||
text-decoration: none;
|
||||
background-color: #6666cc;
|
||||
color: #ffffff;
|
||||
}
|
||||
A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
|
||||
A.el { text-decoration: none; font-weight: bold }
|
||||
A.elRef { font-weight: bold }
|
||||
A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
|
||||
A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
|
||||
A.codeRef:link { font-weight: normal; color: #0000FF}
|
||||
A.codeRef:visited { font-weight: normal; color: #0000FF}
|
||||
A:hover { text-decoration: none; background-color: #f2f2ff }
|
||||
DL.el { margin-left: -1cm }
|
||||
.fragment {
|
||||
font-family: Fixed, monospace;
|
||||
font-size: 95%;
|
||||
}
|
||||
PRE.fragment {
|
||||
border: 1px solid #CCCCCC;
|
||||
background-color: #f5f5f5;
|
||||
margin-top: 4px;
|
||||
margin-bottom: 4px;
|
||||
margin-left: 2px;
|
||||
margin-right: 8px;
|
||||
padding-left: 6px;
|
||||
padding-right: 6px;
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
|
||||
TD.md { background-color: #F4F4FB; font-weight: bold; }
|
||||
TD.mdPrefix {
|
||||
background-color: #F4F4FB;
|
||||
color: #606060;
|
||||
font-size: 80%;
|
||||
}
|
||||
TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
|
||||
TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
|
||||
DIV.groupHeader {
|
||||
margin-left: 16px;
|
||||
margin-top: 12px;
|
||||
margin-bottom: 6px;
|
||||
font-weight: bold;
|
||||
}
|
||||
DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
|
||||
BODY {
|
||||
background: white;
|
||||
color: black;
|
||||
margin-right: 20px;
|
||||
margin-left: 20px;
|
||||
}
|
||||
TD.indexkey {
|
||||
background-color: #eeeeff;
|
||||
font-weight: bold;
|
||||
padding-right : 10px;
|
||||
padding-top : 2px;
|
||||
padding-left : 10px;
|
||||
padding-bottom : 2px;
|
||||
margin-left : 0px;
|
||||
margin-right : 0px;
|
||||
margin-top : 2px;
|
||||
margin-bottom : 2px;
|
||||
border: 1px solid #CCCCCC;
|
||||
}
|
||||
TD.indexvalue {
|
||||
background-color: #eeeeff;
|
||||
font-style: italic;
|
||||
padding-right : 10px;
|
||||
padding-top : 2px;
|
||||
padding-left : 10px;
|
||||
padding-bottom : 2px;
|
||||
margin-left : 0px;
|
||||
margin-right : 0px;
|
||||
margin-top : 2px;
|
||||
margin-bottom : 2px;
|
||||
border: 1px solid #CCCCCC;
|
||||
}
|
||||
TR.memlist {
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
P.formulaDsp { text-align: center; }
|
||||
IMG.formulaDsp { }
|
||||
IMG.formulaInl { vertical-align: middle; }
|
||||
SPAN.keyword { color: #008000 }
|
||||
SPAN.keywordtype { color: #604020 }
|
||||
SPAN.keywordflow { color: #e08000 }
|
||||
SPAN.comment { color: #800000 }
|
||||
SPAN.preprocessor { color: #806020 }
|
||||
SPAN.stringliteral { color: #002080 }
|
||||
SPAN.charliteral { color: #008080 }
|
||||
.mdTable {
|
||||
border: 1px solid #868686;
|
||||
background-color: #F4F4FB;
|
||||
}
|
||||
.mdRow {
|
||||
padding: 8px 10px;
|
||||
}
|
||||
.mdescLeft {
|
||||
padding: 0px 8px 4px 8px;
|
||||
font-size: 80%;
|
||||
font-style: italic;
|
||||
background-color: #FAFAFA;
|
||||
border-top: 1px none #E0E0E0;
|
||||
border-right: 1px none #E0E0E0;
|
||||
border-bottom: 1px none #E0E0E0;
|
||||
border-left: 1px none #E0E0E0;
|
||||
margin: 0px;
|
||||
}
|
||||
.mdescRight {
|
||||
padding: 0px 8px 4px 8px;
|
||||
font-size: 80%;
|
||||
font-style: italic;
|
||||
background-color: #FAFAFA;
|
||||
border-top: 1px none #E0E0E0;
|
||||
border-right: 1px none #E0E0E0;
|
||||
border-bottom: 1px none #E0E0E0;
|
||||
border-left: 1px none #E0E0E0;
|
||||
margin: 0px;
|
||||
}
|
||||
.memItemLeft {
|
||||
padding: 1px 0px 0px 8px;
|
||||
margin: 4px;
|
||||
border-top-width: 1px;
|
||||
border-right-width: 1px;
|
||||
border-bottom-width: 1px;
|
||||
border-left-width: 1px;
|
||||
border-top-color: #E0E0E0;
|
||||
border-right-color: #E0E0E0;
|
||||
border-bottom-color: #E0E0E0;
|
||||
border-left-color: #E0E0E0;
|
||||
border-top-style: solid;
|
||||
border-right-style: none;
|
||||
border-bottom-style: none;
|
||||
border-left-style: none;
|
||||
background-color: #FAFAFA;
|
||||
font-size: 80%;
|
||||
}
|
||||
.memItemRight {
|
||||
padding: 1px 8px 0px 8px;
|
||||
margin: 4px;
|
||||
border-top-width: 1px;
|
||||
border-right-width: 1px;
|
||||
border-bottom-width: 1px;
|
||||
border-left-width: 1px;
|
||||
border-top-color: #E0E0E0;
|
||||
border-right-color: #E0E0E0;
|
||||
border-bottom-color: #E0E0E0;
|
||||
border-left-color: #E0E0E0;
|
||||
border-top-style: solid;
|
||||
border-right-style: none;
|
||||
border-bottom-style: none;
|
||||
border-left-style: none;
|
||||
background-color: #FAFAFA;
|
||||
font-size: 80%;
|
||||
}
|
||||
.memTemplItemLeft {
|
||||
padding: 1px 0px 0px 8px;
|
||||
margin: 4px;
|
||||
border-top-width: 1px;
|
||||
border-right-width: 1px;
|
||||
border-bottom-width: 1px;
|
||||
border-left-width: 1px;
|
||||
border-top-color: #E0E0E0;
|
||||
border-right-color: #E0E0E0;
|
||||
border-bottom-color: #E0E0E0;
|
||||
border-left-color: #E0E0E0;
|
||||
border-top-style: none;
|
||||
border-right-style: none;
|
||||
border-bottom-style: none;
|
||||
border-left-style: none;
|
||||
background-color: #FAFAFA;
|
||||
font-size: 80%;
|
||||
}
|
||||
.memTemplItemRight {
|
||||
padding: 1px 8px 0px 8px;
|
||||
margin: 4px;
|
||||
border-top-width: 1px;
|
||||
border-right-width: 1px;
|
||||
border-bottom-width: 1px;
|
||||
border-left-width: 1px;
|
||||
border-top-color: #E0E0E0;
|
||||
border-right-color: #E0E0E0;
|
||||
border-bottom-color: #E0E0E0;
|
||||
border-left-color: #E0E0E0;
|
||||
border-top-style: none;
|
||||
border-right-style: none;
|
||||
border-bottom-style: none;
|
||||
border-left-style: none;
|
||||
background-color: #FAFAFA;
|
||||
font-size: 80%;
|
||||
}
|
||||
.memTemplParams {
|
||||
padding: 1px 0px 0px 8px;
|
||||
margin: 4px;
|
||||
border-top-width: 1px;
|
||||
border-right-width: 1px;
|
||||
border-bottom-width: 1px;
|
||||
border-left-width: 1px;
|
||||
border-top-color: #E0E0E0;
|
||||
border-right-color: #E0E0E0;
|
||||
border-bottom-color: #E0E0E0;
|
||||
border-left-color: #E0E0E0;
|
||||
border-top-style: solid;
|
||||
border-right-style: none;
|
||||
border-bottom-style: none;
|
||||
border-left-style: none;
|
||||
color: #606060;
|
||||
background-color: #FAFAFA;
|
||||
font-size: 80%;
|
||||
}
|
||||
.search { color: #003399;
|
||||
font-weight: bold;
|
||||
}
|
||||
FORM.search {
|
||||
margin-bottom: 0px;
|
||||
margin-top: 0px;
|
||||
}
|
||||
INPUT.search { font-size: 75%;
|
||||
color: #000080;
|
||||
font-weight: normal;
|
||||
background-color: #eeeeff;
|
||||
}
|
||||
TD.tiny { font-size: 75%;
|
||||
}
|
||||
a {
|
||||
color: #252E78;
|
||||
}
|
||||
a:visited {
|
||||
color: #3D2185;
|
||||
}
|
||||
.dirtab { padding: 4px;
|
||||
border-collapse: collapse;
|
||||
border: 1px solid #b0b0b0;
|
||||
}
|
||||
TH.dirtab { background: #eeeeff;
|
||||
font-weight: bold;
|
||||
}
|
||||
HR { height: 1px;
|
||||
border: none;
|
||||
border-top: 1px solid black;
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,17 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>H5Part: File Index</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.4 -->
|
||||
<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindexHL" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div>
|
||||
<h1>H5Part File List</h1>Here is a list of all files with brief descriptions:<table>
|
||||
<tr><td class="indexkey"><a class="el" href="H5Part_8c.html">H5Part.c</a></td><td class="indexvalue"></td></tr>
|
||||
<tr><td class="indexkey"><a class="el" href="H5Part_8h.html">H5Part.h</a> <a href="H5Part_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
|
||||
<tr><td class="indexkey"><a class="el" href="H5PartF_8c.html">H5PartF.c</a></td><td class="indexvalue"></td></tr>
|
||||
</table>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Jan 31 11:52:45 2006 for H5Part by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,35 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>H5Part: Class Members</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.4 -->
|
||||
<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindexHL" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div>
|
||||
<div class="qindex"><a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
|
||||
Here is a list of all class members with links to the classes they belong to:
|
||||
<p>
|
||||
<ul>
|
||||
<li>access_prop
|
||||
: <a class="el" href="structH5PartFile.html#o10">H5PartFile</a><li>count
|
||||
: <a class="el" href="structH5IO__getname__t.html#o1">H5IO_getname_t</a><li>create_prop
|
||||
: <a class="el" href="structH5PartFile.html#o9">H5PartFile</a><li>diskshape
|
||||
: <a class="el" href="structH5PartFile.html#o11">H5PartFile</a><li>file
|
||||
: <a class="el" href="structH5PartFile.html#o0">H5PartFile</a><li>index
|
||||
: <a class="el" href="structH5IO__getname__t.html#o0">H5IO_getname_t</a><li>maxstep
|
||||
: <a class="el" href="structH5PartFile.html#o7">H5PartFile</a><li>memshape
|
||||
: <a class="el" href="structH5PartFile.html#o12">H5PartFile</a><li>mode
|
||||
: <a class="el" href="structH5PartFile.html#o6">H5PartFile</a><li>name
|
||||
: <a class="el" href="structH5IO__getname__t.html#o2">H5IO_getname_t</a><li>nparticles
|
||||
: <a class="el" href="structH5PartFile.html#o4">H5PartFile</a><li>properties
|
||||
: <a class="el" href="structH5PartFile.html#o3">H5PartFile</a><li>shape
|
||||
: <a class="el" href="structH5PartFile.html#o5">H5PartFile</a><li>timegroup
|
||||
: <a class="el" href="structH5PartFile.html#o2">H5PartFile</a><li>timestep
|
||||
: <a class="el" href="structH5PartFile.html#o1">H5PartFile</a><li>viewend
|
||||
: <a class="el" href="structH5PartFile.html#o14">H5PartFile</a><li>viewstart
|
||||
: <a class="el" href="structH5PartFile.html#o13">H5PartFile</a><li>xfer_prop
|
||||
: <a class="el" href="structH5PartFile.html#o8">H5PartFile</a></ul>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Jan 31 11:52:45 2006 for H5Part by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,35 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>H5Part: Class Members - Variables</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.4 -->
|
||||
<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindexHL" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div>
|
||||
<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_vars.html">Variables</a></div>
|
||||
|
||||
<p>
|
||||
<ul>
|
||||
<li>access_prop
|
||||
: <a class="el" href="structH5PartFile.html#o10">H5PartFile</a><li>count
|
||||
: <a class="el" href="structH5IO__getname__t.html#o1">H5IO_getname_t</a><li>create_prop
|
||||
: <a class="el" href="structH5PartFile.html#o9">H5PartFile</a><li>diskshape
|
||||
: <a class="el" href="structH5PartFile.html#o11">H5PartFile</a><li>file
|
||||
: <a class="el" href="structH5PartFile.html#o0">H5PartFile</a><li>index
|
||||
: <a class="el" href="structH5IO__getname__t.html#o0">H5IO_getname_t</a><li>maxstep
|
||||
: <a class="el" href="structH5PartFile.html#o7">H5PartFile</a><li>memshape
|
||||
: <a class="el" href="structH5PartFile.html#o12">H5PartFile</a><li>mode
|
||||
: <a class="el" href="structH5PartFile.html#o6">H5PartFile</a><li>name
|
||||
: <a class="el" href="structH5IO__getname__t.html#o2">H5IO_getname_t</a><li>nparticles
|
||||
: <a class="el" href="structH5PartFile.html#o4">H5PartFile</a><li>properties
|
||||
: <a class="el" href="structH5PartFile.html#o3">H5PartFile</a><li>shape
|
||||
: <a class="el" href="structH5PartFile.html#o5">H5PartFile</a><li>timegroup
|
||||
: <a class="el" href="structH5PartFile.html#o2">H5PartFile</a><li>timestep
|
||||
: <a class="el" href="structH5PartFile.html#o1">H5PartFile</a><li>viewend
|
||||
: <a class="el" href="structH5PartFile.html#o14">H5PartFile</a><li>viewstart
|
||||
: <a class="el" href="structH5PartFile.html#o13">H5PartFile</a><li>xfer_prop
|
||||
: <a class="el" href="structH5PartFile.html#o8">H5PartFile</a></ul>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Jan 31 11:52:45 2006 for H5Part by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,107 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>H5Part: Class Members</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.4 -->
|
||||
<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindexHL" href="globals.html">File Members</a></div>
|
||||
<div class="qindex"><a class="qindexHL" href="globals.html">All</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_type.html">Typedefs</a> | <a class="qindex" href="globals_defs.html">Defines</a></div>
|
||||
<div class="qindex"><a class="qindex" href="#index_f">f</a> | <a class="qindex" href="#index_h">h</a></div>
|
||||
|
||||
<p>
|
||||
Here is a list of all file members with links to the files they belong to:
|
||||
<p>
|
||||
<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
|
||||
<li>f_h5pt_close
|
||||
: <a class="el" href="H5PartF_8c.html#a34">H5PartF.c</a><li>f_h5pt_getdatasetname
|
||||
: <a class="el" href="H5PartF_8c.html#a43">H5PartF.c</a><li>f_h5pt_getfileattribinfo
|
||||
: <a class="el" href="H5PartF_8c.html#a60">H5PartF.c</a><li>f_h5pt_getndatasets
|
||||
: <a class="el" href="H5PartF_8c.html#a41">H5PartF.c</a><li>f_h5pt_getnfileattribs
|
||||
: <a class="el" href="H5PartF_8c.html#a58">H5PartF.c</a><li>f_h5pt_getnpoints
|
||||
: <a class="el" href="H5PartF_8c.html#a42">H5PartF.c</a><li>f_h5pt_getnstepattribs
|
||||
: <a class="el" href="H5PartF_8c.html#a57">H5PartF.c</a><li>f_h5pt_getnsteps
|
||||
: <a class="el" href="H5PartF_8c.html#a40">H5PartF.c</a><li>f_h5pt_getnumpoints()
|
||||
: <a class="el" href="H5PartF_8c.html#a44">H5PartF.c</a><li>f_h5pt_getstepattribinfo
|
||||
: <a class="el" href="H5PartF_8c.html#a59">H5PartF.c</a><li>f_h5pt_getview()
|
||||
: <a class="el" href="H5PartF_8c.html#a48">H5PartF.c</a><li>f_h5pt_hasview
|
||||
: <a class="el" href="H5PartF_8c.html#a47">H5PartF.c</a><li>f_h5pt_isvalid
|
||||
: <a class="el" href="H5PartF_8c.html#a35">H5PartF.c</a><li>f_h5pt_openr
|
||||
: <a class="el" href="H5PartF_8c.html#a32">H5PartF.c</a><li>f_h5pt_openr_par
|
||||
: <a class="el" href="H5PartF_8c.html#a2">H5PartF.c</a><li>f_h5pt_openw
|
||||
: <a class="el" href="H5PartF_8c.html#a33">H5PartF.c</a><li>f_h5pt_openw_par
|
||||
: <a class="el" href="H5PartF_8c.html#a3">H5PartF.c</a><li>f_h5pt_readdata
|
||||
: <a class="el" href="H5PartF_8c.html#a19">H5PartF.c</a><li>f_h5pt_readdata_i8
|
||||
: <a class="el" href="H5PartF_8c.html#a50">H5PartF.c</a><li>f_h5pt_readdata_r8
|
||||
: <a class="el" href="H5PartF_8c.html#a49">H5PartF.c</a><li>f_h5pt_readfileattrib
|
||||
: <a class="el" href="H5PartF_8c.html#a62">H5PartF.c</a><li>f_h5pt_readstepattrib
|
||||
: <a class="el" href="H5PartF_8c.html#a61">H5PartF.c</a><li>f_h5pt_resetview
|
||||
: <a class="el" href="H5PartF_8c.html#a46">H5PartF.c</a><li>f_h5pt_setnpoints
|
||||
: <a class="el" href="H5PartF_8c.html#a36">H5PartF.c</a><li>f_h5pt_setstep
|
||||
: <a class="el" href="H5PartF_8c.html#a37">H5PartF.c</a><li>f_h5pt_setview
|
||||
: <a class="el" href="H5PartF_8c.html#a45">H5PartF.c</a><li>f_h5pt_writedata_i8
|
||||
: <a class="el" href="H5PartF_8c.html#a39">H5PartF.c</a><li>f_h5pt_writedata_r8
|
||||
: <a class="el" href="H5PartF_8c.html#a38">H5PartF.c</a><li>f_h5pt_writefileattrib_i8
|
||||
: <a class="el" href="H5PartF_8c.html#a52">H5PartF.c</a><li>f_h5pt_writefileattrib_r8
|
||||
: <a class="el" href="H5PartF_8c.html#a51">H5PartF.c</a><li>f_h5pt_writefileattrib_string
|
||||
: <a class="el" href="H5PartF_8c.html#a53">H5PartF.c</a><li>f_h5pt_writestepattrib_i8
|
||||
: <a class="el" href="H5PartF_8c.html#a55">H5PartF.c</a><li>f_h5pt_writestepattrib_r8
|
||||
: <a class="el" href="H5PartF_8c.html#a54">H5PartF.c</a><li>f_h5pt_writestepattrib_string
|
||||
: <a class="el" href="H5PartF_8c.html#a56">H5PartF.c</a></ul>
|
||||
<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
|
||||
<li>H5IO_getname_t
|
||||
: <a class="el" href="H5Part_8c.html#a1">H5Part.c</a><li>H5IOgetname()
|
||||
: <a class="el" href="H5Part_8c.html#a26">H5Part.c</a><li>H5NameExists()
|
||||
: <a class="el" href="H5Part_8c.html#a40">H5Part.c</a><li>H5PART_READ
|
||||
: <a class="el" href="H5Part_8h.html#a0">H5Part.h</a><li>H5PART_WRITE
|
||||
: <a class="el" href="H5Part_8h.html#a1">H5Part.h</a><li>H5PartAttribcounter()
|
||||
: <a class="el" href="H5Part_8c.html#a15">H5Part.c</a><li>H5PartCloseFile()
|
||||
: <a class="el" href="H5Part_8h.html#a8">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a6">H5Part.c</a><li>H5PartDScounter()
|
||||
: <a class="el" href="H5Part_8c.html#a25">H5Part.c</a><li>H5PartFile
|
||||
: <a class="el" href="H5Part_8h.html#a5">H5Part.h</a><li>H5PartFileGetStashFileName()
|
||||
: <a class="el" href="H5Part_8h.html#a38">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a45">H5Part.c</a><li>H5PartFileHasName()
|
||||
: <a class="el" href="H5Part_8c.html#a41">H5Part.c</a><li>H5PartFileIsValid()
|
||||
: <a class="el" href="H5Part_8h.html#a7">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a5">H5Part.c</a><li>H5PartGetDatasetName()
|
||||
: <a class="el" href="H5Part_8h.html#a15">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a29">H5Part.c</a><li>H5PartGetDiskShape()
|
||||
: <a class="el" href="H5Part_8c.html#a30">H5Part.c</a><li>H5PartGetFileAttribInfo()
|
||||
: <a class="el" href="H5Part_8h.html#a31">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a20">H5Part.c</a><li>H5PartGetFirstDS()
|
||||
: <a class="el" href="H5Part_8c.html#a32">H5Part.c</a><li>H5PartGetMemShape()
|
||||
: <a class="el" href="H5Part_8c.html#a31">H5Part.c</a><li>H5PartGetNumDatasets()
|
||||
: <a class="el" href="H5Part_8h.html#a14">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a28">H5Part.c</a><li>H5PartGetNumFileAttribs()
|
||||
: <a class="el" href="H5Part_8h.html#a29">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a17">H5Part.c</a><li>H5PartGetNumParticles()
|
||||
: <a class="el" href="H5Part_8h.html#a16">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a33">H5Part.c</a><li>H5PartGetNumStashFiles()
|
||||
: <a class="el" href="H5Part_8h.html#a37">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a44">H5Part.c</a><li>H5PartGetNumStepAttribs()
|
||||
: <a class="el" href="H5Part_8h.html#a28">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a16">H5Part.c</a><li>H5PartGetNumSteps()
|
||||
: <a class="el" href="H5Part_8h.html#a13">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a27">H5Part.c</a><li>H5PartGetStepAttribInfo()
|
||||
: <a class="el" href="H5Part_8h.html#a30">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a19">H5Part.c</a><li>H5PartGetView()
|
||||
: <a class="el" href="H5Part_8h.html#a18">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a35">H5Part.c</a><li>H5PartHasView
|
||||
: <a class="el" href="H5Part_8h.html#a4">H5Part.h</a><li>H5PartIOcounter()
|
||||
: <a class="el" href="H5Part_8c.html#a2">H5Part.c</a><li>H5PartNormType()
|
||||
: <a class="el" href="H5Part_8c.html#a18">H5Part.c</a><li>H5PartOpenFile()
|
||||
: <a class="el" href="H5Part_8h.html#a6">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a4">H5Part.c</a><li>H5PartOpenFileParallel()
|
||||
: <a class="el" href="H5Part_8c.html#a3">H5Part.c</a><li>H5PartOpenFileSerial
|
||||
: <a class="el" href="H5Part_8h.html#a2">H5Part.h</a><li>H5PartReadAttrib()
|
||||
: <a class="el" href="H5Part_8h.html#a33">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a22">H5Part.c</a><li>H5PartReadDataFloat64()
|
||||
: <a class="el" href="H5Part_8h.html#a20">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a37">H5Part.c</a><li>H5PartReadDataInt64()
|
||||
: <a class="el" href="H5Part_8h.html#a21">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a38">H5Part.c</a><li>H5PartReadFileAttrib()
|
||||
: <a class="el" href="H5Part_8h.html#a34">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a23">H5Part.c</a><li>H5PartReadParticleStep()
|
||||
: <a class="el" href="H5Part_8h.html#a22">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a39">H5Part.c</a><li>H5PartReadStepAttrib()
|
||||
: <a class="el" href="H5Part_8h.html#a32">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a21">H5Part.c</a><li>H5PartResetView
|
||||
: <a class="el" href="H5Part_8h.html#a3">H5Part.h</a><li>H5PartSetCanonicalView()
|
||||
: <a class="el" href="H5Part_8h.html#a19">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a36">H5Part.c</a><li>H5PartSetNumParticles()
|
||||
: <a class="el" href="H5Part_8h.html#a9">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a7">H5Part.c</a><li>H5PartSetStep()
|
||||
: <a class="el" href="H5Part_8h.html#a12">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a24">H5Part.c</a><li>H5PartSetView()
|
||||
: <a class="el" href="H5Part_8h.html#a17">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a34">H5Part.c</a><li>H5PartStashFile()
|
||||
: <a class="el" href="H5Part_8h.html#a35">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a42">H5Part.c</a><li>H5PartUnstashFile()
|
||||
: <a class="el" href="H5Part_8h.html#a36">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a43">H5Part.c</a><li>H5PartWriteAttrib()
|
||||
: <a class="el" href="H5Part_8h.html#a25">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a13">H5Part.c</a><li>H5PartWriteDataFloat64()
|
||||
: <a class="el" href="H5Part_8h.html#a10">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a8">H5Part.c</a><li>H5PartWriteDataInt64()
|
||||
: <a class="el" href="H5Part_8h.html#a11">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a9">H5Part.c</a><li>H5PartWriteFileAttrib()
|
||||
: <a class="el" href="H5Part_8h.html#a24">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a14">H5Part.c</a><li>H5PartWriteFileAttribString()
|
||||
: <a class="el" href="H5Part_8h.html#a26">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a10">H5Part.c</a><li>H5PartWriteStepAttrib()
|
||||
: <a class="el" href="H5Part_8h.html#a23">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a12">H5Part.c</a><li>H5PartWriteStepAttribString()
|
||||
: <a class="el" href="H5Part_8h.html#a27">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a11">H5Part.c</a></ul>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Jan 31 11:52:45 2006 for H5Part by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,59 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>H5Part: Class Members</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.4 -->
|
||||
<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindexHL" href="globals.html">File Members</a></div>
|
||||
<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_type.html">Typedefs</a> | <a class="qindexHL" href="globals_defs.html">Defines</a></div>
|
||||
<div class="qindex"><a class="qindex" href="#index_f">f</a> | <a class="qindex" href="#index_h">h</a></div>
|
||||
|
||||
<p>
|
||||
|
||||
<p>
|
||||
<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
|
||||
<li>f_h5pt_close
|
||||
: <a class="el" href="H5PartF_8c.html#a34">H5PartF.c</a><li>f_h5pt_getdatasetname
|
||||
: <a class="el" href="H5PartF_8c.html#a43">H5PartF.c</a><li>f_h5pt_getfileattribinfo
|
||||
: <a class="el" href="H5PartF_8c.html#a60">H5PartF.c</a><li>f_h5pt_getndatasets
|
||||
: <a class="el" href="H5PartF_8c.html#a41">H5PartF.c</a><li>f_h5pt_getnfileattribs
|
||||
: <a class="el" href="H5PartF_8c.html#a58">H5PartF.c</a><li>f_h5pt_getnpoints
|
||||
: <a class="el" href="H5PartF_8c.html#a42">H5PartF.c</a><li>f_h5pt_getnstepattribs
|
||||
: <a class="el" href="H5PartF_8c.html#a57">H5PartF.c</a><li>f_h5pt_getnsteps
|
||||
: <a class="el" href="H5PartF_8c.html#a40">H5PartF.c</a><li>f_h5pt_getstepattribinfo
|
||||
: <a class="el" href="H5PartF_8c.html#a59">H5PartF.c</a><li>f_h5pt_hasview
|
||||
: <a class="el" href="H5PartF_8c.html#a47">H5PartF.c</a><li>f_h5pt_isvalid
|
||||
: <a class="el" href="H5PartF_8c.html#a35">H5PartF.c</a><li>f_h5pt_openr
|
||||
: <a class="el" href="H5PartF_8c.html#a32">H5PartF.c</a><li>f_h5pt_openr_par
|
||||
: <a class="el" href="H5PartF_8c.html#a2">H5PartF.c</a><li>f_h5pt_openw
|
||||
: <a class="el" href="H5PartF_8c.html#a33">H5PartF.c</a><li>f_h5pt_openw_par
|
||||
: <a class="el" href="H5PartF_8c.html#a3">H5PartF.c</a><li>f_h5pt_readdata
|
||||
: <a class="el" href="H5PartF_8c.html#a19">H5PartF.c</a><li>f_h5pt_readdata_i8
|
||||
: <a class="el" href="H5PartF_8c.html#a50">H5PartF.c</a><li>f_h5pt_readdata_r8
|
||||
: <a class="el" href="H5PartF_8c.html#a49">H5PartF.c</a><li>f_h5pt_readfileattrib
|
||||
: <a class="el" href="H5PartF_8c.html#a62">H5PartF.c</a><li>f_h5pt_readstepattrib
|
||||
: <a class="el" href="H5PartF_8c.html#a61">H5PartF.c</a><li>f_h5pt_resetview
|
||||
: <a class="el" href="H5PartF_8c.html#a46">H5PartF.c</a><li>f_h5pt_setnpoints
|
||||
: <a class="el" href="H5PartF_8c.html#a36">H5PartF.c</a><li>f_h5pt_setstep
|
||||
: <a class="el" href="H5PartF_8c.html#a37">H5PartF.c</a><li>f_h5pt_setview
|
||||
: <a class="el" href="H5PartF_8c.html#a45">H5PartF.c</a><li>f_h5pt_writedata_i8
|
||||
: <a class="el" href="H5PartF_8c.html#a39">H5PartF.c</a><li>f_h5pt_writedata_r8
|
||||
: <a class="el" href="H5PartF_8c.html#a38">H5PartF.c</a><li>f_h5pt_writefileattrib_i8
|
||||
: <a class="el" href="H5PartF_8c.html#a52">H5PartF.c</a><li>f_h5pt_writefileattrib_r8
|
||||
: <a class="el" href="H5PartF_8c.html#a51">H5PartF.c</a><li>f_h5pt_writefileattrib_string
|
||||
: <a class="el" href="H5PartF_8c.html#a53">H5PartF.c</a><li>f_h5pt_writestepattrib_i8
|
||||
: <a class="el" href="H5PartF_8c.html#a55">H5PartF.c</a><li>f_h5pt_writestepattrib_r8
|
||||
: <a class="el" href="H5PartF_8c.html#a54">H5PartF.c</a><li>f_h5pt_writestepattrib_string
|
||||
: <a class="el" href="H5PartF_8c.html#a56">H5PartF.c</a></ul>
|
||||
<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
|
||||
<li>H5PART_READ
|
||||
: <a class="el" href="H5Part_8h.html#a0">H5Part.h</a><li>H5PART_WRITE
|
||||
: <a class="el" href="H5Part_8h.html#a1">H5Part.h</a><li>H5PartHasView
|
||||
: <a class="el" href="H5Part_8h.html#a4">H5Part.h</a><li>H5PartOpenFileSerial
|
||||
: <a class="el" href="H5Part_8h.html#a2">H5Part.h</a><li>H5PartResetView
|
||||
: <a class="el" href="H5Part_8h.html#a3">H5Part.h</a></ul>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Jan 31 11:52:45 2006 for H5Part by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,97 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>H5Part: Class Members</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.4 -->
|
||||
<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindexHL" href="globals.html">File Members</a></div>
|
||||
<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindexHL" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_type.html">Typedefs</a> | <a class="qindex" href="globals_defs.html">Defines</a></div>
|
||||
<div class="qindex"><a class="qindex" href="#index_f">f</a> | <a class="qindex" href="#index_h">h</a></div>
|
||||
|
||||
<p>
|
||||
|
||||
<p>
|
||||
<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
|
||||
<li>f_h5pt_close()
|
||||
: <a class="el" href="H5PartF_8c.html#a34">H5PartF.c</a><li>f_h5pt_getdatasetname()
|
||||
: <a class="el" href="H5PartF_8c.html#a43">H5PartF.c</a><li>f_h5pt_getfileattribinfo()
|
||||
: <a class="el" href="H5PartF_8c.html#a60">H5PartF.c</a><li>f_h5pt_getndatasets()
|
||||
: <a class="el" href="H5PartF_8c.html#a41">H5PartF.c</a><li>f_h5pt_getnfileattribs()
|
||||
: <a class="el" href="H5PartF_8c.html#a58">H5PartF.c</a><li>f_h5pt_getnpoints()
|
||||
: <a class="el" href="H5PartF_8c.html#a42">H5PartF.c</a><li>f_h5pt_getnstepattribs()
|
||||
: <a class="el" href="H5PartF_8c.html#a57">H5PartF.c</a><li>f_h5pt_getnsteps()
|
||||
: <a class="el" href="H5PartF_8c.html#a40">H5PartF.c</a><li>f_h5pt_getnumpoints()
|
||||
: <a class="el" href="H5PartF_8c.html#a44">H5PartF.c</a><li>f_h5pt_getstepattribinfo()
|
||||
: <a class="el" href="H5PartF_8c.html#a59">H5PartF.c</a><li>f_h5pt_getview()
|
||||
: <a class="el" href="H5PartF_8c.html#a48">H5PartF.c</a><li>f_h5pt_hasview()
|
||||
: <a class="el" href="H5PartF_8c.html#a47">H5PartF.c</a><li>f_h5pt_isvalid()
|
||||
: <a class="el" href="H5PartF_8c.html#a35">H5PartF.c</a><li>f_h5pt_openr()
|
||||
: <a class="el" href="H5PartF_8c.html#a32">H5PartF.c</a><li>f_h5pt_openw()
|
||||
: <a class="el" href="H5PartF_8c.html#a33">H5PartF.c</a><li>f_h5pt_readdata_i8()
|
||||
: <a class="el" href="H5PartF_8c.html#a50">H5PartF.c</a><li>f_h5pt_readdata_r8()
|
||||
: <a class="el" href="H5PartF_8c.html#a49">H5PartF.c</a><li>f_h5pt_readfileattrib()
|
||||
: <a class="el" href="H5PartF_8c.html#a62">H5PartF.c</a><li>f_h5pt_readstepattrib()
|
||||
: <a class="el" href="H5PartF_8c.html#a61">H5PartF.c</a><li>f_h5pt_resetview()
|
||||
: <a class="el" href="H5PartF_8c.html#a46">H5PartF.c</a><li>f_h5pt_setnpoints()
|
||||
: <a class="el" href="H5PartF_8c.html#a36">H5PartF.c</a><li>f_h5pt_setstep()
|
||||
: <a class="el" href="H5PartF_8c.html#a37">H5PartF.c</a><li>f_h5pt_setview()
|
||||
: <a class="el" href="H5PartF_8c.html#a45">H5PartF.c</a><li>f_h5pt_writedata_i8()
|
||||
: <a class="el" href="H5PartF_8c.html#a39">H5PartF.c</a><li>f_h5pt_writedata_r8()
|
||||
: <a class="el" href="H5PartF_8c.html#a38">H5PartF.c</a><li>f_h5pt_writefileattrib_i8()
|
||||
: <a class="el" href="H5PartF_8c.html#a52">H5PartF.c</a><li>f_h5pt_writefileattrib_r8()
|
||||
: <a class="el" href="H5PartF_8c.html#a51">H5PartF.c</a><li>f_h5pt_writefileattrib_string()
|
||||
: <a class="el" href="H5PartF_8c.html#a53">H5PartF.c</a><li>f_h5pt_writestepattrib_i8()
|
||||
: <a class="el" href="H5PartF_8c.html#a55">H5PartF.c</a><li>f_h5pt_writestepattrib_r8()
|
||||
: <a class="el" href="H5PartF_8c.html#a54">H5PartF.c</a><li>f_h5pt_writestepattrib_string()
|
||||
: <a class="el" href="H5PartF_8c.html#a56">H5PartF.c</a></ul>
|
||||
<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
|
||||
<li>H5IOgetname()
|
||||
: <a class="el" href="H5Part_8c.html#a26">H5Part.c</a><li>H5NameExists()
|
||||
: <a class="el" href="H5Part_8c.html#a40">H5Part.c</a><li>H5PartAttribcounter()
|
||||
: <a class="el" href="H5Part_8c.html#a15">H5Part.c</a><li>H5PartCloseFile()
|
||||
: <a class="el" href="H5Part_8h.html#a8">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a6">H5Part.c</a><li>H5PartDScounter()
|
||||
: <a class="el" href="H5Part_8c.html#a25">H5Part.c</a><li>H5PartFileGetStashFileName()
|
||||
: <a class="el" href="H5Part_8h.html#a38">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a45">H5Part.c</a><li>H5PartFileHasName()
|
||||
: <a class="el" href="H5Part_8c.html#a41">H5Part.c</a><li>H5PartFileIsValid()
|
||||
: <a class="el" href="H5Part_8h.html#a7">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a5">H5Part.c</a><li>H5PartGetDatasetName()
|
||||
: <a class="el" href="H5Part_8h.html#a15">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a29">H5Part.c</a><li>H5PartGetDiskShape()
|
||||
: <a class="el" href="H5Part_8c.html#a30">H5Part.c</a><li>H5PartGetFileAttribInfo()
|
||||
: <a class="el" href="H5Part_8h.html#a31">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a20">H5Part.c</a><li>H5PartGetFirstDS()
|
||||
: <a class="el" href="H5Part_8c.html#a32">H5Part.c</a><li>H5PartGetMemShape()
|
||||
: <a class="el" href="H5Part_8c.html#a31">H5Part.c</a><li>H5PartGetNumDatasets()
|
||||
: <a class="el" href="H5Part_8h.html#a14">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a28">H5Part.c</a><li>H5PartGetNumFileAttribs()
|
||||
: <a class="el" href="H5Part_8h.html#a29">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a17">H5Part.c</a><li>H5PartGetNumParticles()
|
||||
: <a class="el" href="H5Part_8h.html#a16">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a33">H5Part.c</a><li>H5PartGetNumStashFiles()
|
||||
: <a class="el" href="H5Part_8h.html#a37">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a44">H5Part.c</a><li>H5PartGetNumStepAttribs()
|
||||
: <a class="el" href="H5Part_8h.html#a28">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a16">H5Part.c</a><li>H5PartGetNumSteps()
|
||||
: <a class="el" href="H5Part_8h.html#a13">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a27">H5Part.c</a><li>H5PartGetStepAttribInfo()
|
||||
: <a class="el" href="H5Part_8h.html#a30">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a19">H5Part.c</a><li>H5PartGetView()
|
||||
: <a class="el" href="H5Part_8h.html#a18">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a35">H5Part.c</a><li>H5PartIOcounter()
|
||||
: <a class="el" href="H5Part_8c.html#a2">H5Part.c</a><li>H5PartNormType()
|
||||
: <a class="el" href="H5Part_8c.html#a18">H5Part.c</a><li>H5PartOpenFile()
|
||||
: <a class="el" href="H5Part_8h.html#a6">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a4">H5Part.c</a><li>H5PartOpenFileParallel()
|
||||
: <a class="el" href="H5Part_8c.html#a3">H5Part.c</a><li>H5PartReadAttrib()
|
||||
: <a class="el" href="H5Part_8h.html#a33">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a22">H5Part.c</a><li>H5PartReadDataFloat64()
|
||||
: <a class="el" href="H5Part_8h.html#a20">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a37">H5Part.c</a><li>H5PartReadDataInt64()
|
||||
: <a class="el" href="H5Part_8h.html#a21">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a38">H5Part.c</a><li>H5PartReadFileAttrib()
|
||||
: <a class="el" href="H5Part_8h.html#a34">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a23">H5Part.c</a><li>H5PartReadParticleStep()
|
||||
: <a class="el" href="H5Part_8h.html#a22">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a39">H5Part.c</a><li>H5PartReadStepAttrib()
|
||||
: <a class="el" href="H5Part_8h.html#a32">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a21">H5Part.c</a><li>H5PartSetCanonicalView()
|
||||
: <a class="el" href="H5Part_8h.html#a19">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a36">H5Part.c</a><li>H5PartSetNumParticles()
|
||||
: <a class="el" href="H5Part_8h.html#a9">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a7">H5Part.c</a><li>H5PartSetStep()
|
||||
: <a class="el" href="H5Part_8h.html#a12">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a24">H5Part.c</a><li>H5PartSetView()
|
||||
: <a class="el" href="H5Part_8h.html#a17">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a34">H5Part.c</a><li>H5PartStashFile()
|
||||
: <a class="el" href="H5Part_8h.html#a35">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a42">H5Part.c</a><li>H5PartUnstashFile()
|
||||
: <a class="el" href="H5Part_8h.html#a36">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a43">H5Part.c</a><li>H5PartWriteAttrib()
|
||||
: <a class="el" href="H5Part_8h.html#a25">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a13">H5Part.c</a><li>H5PartWriteDataFloat64()
|
||||
: <a class="el" href="H5Part_8h.html#a10">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a8">H5Part.c</a><li>H5PartWriteDataInt64()
|
||||
: <a class="el" href="H5Part_8h.html#a11">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a9">H5Part.c</a><li>H5PartWriteFileAttrib()
|
||||
: <a class="el" href="H5Part_8h.html#a24">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a14">H5Part.c</a><li>H5PartWriteFileAttribString()
|
||||
: <a class="el" href="H5Part_8h.html#a26">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a10">H5Part.c</a><li>H5PartWriteStepAttrib()
|
||||
: <a class="el" href="H5Part_8h.html#a23">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a12">H5Part.c</a><li>H5PartWriteStepAttribString()
|
||||
: <a class="el" href="H5Part_8h.html#a27">H5Part.h</a>, <a class="el" href="H5Part_8c.html#a11">H5Part.c</a></ul>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Jan 31 11:52:45 2006 for H5Part by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,19 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>H5Part: Class Members</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.4 -->
|
||||
<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindexHL" href="globals.html">File Members</a></div>
|
||||
<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindexHL" href="globals_type.html">Typedefs</a> | <a class="qindex" href="globals_defs.html">Defines</a></div>
|
||||
|
||||
<p>
|
||||
<ul>
|
||||
<li>H5IO_getname_t
|
||||
: <a class="el" href="H5Part_8c.html#a1">H5Part.c</a><li>H5PartFile
|
||||
: <a class="el" href="H5Part_8h.html#a5">H5Part.h</a></ul>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Jan 31 11:52:45 2006 for H5Part by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,14 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>H5Part: Main Page</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.4 -->
|
||||
<div class="qindex"><a class="qindexHL" href="index.html">Main Page</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div>
|
||||
<h1>H5Part Documentation</h1>
|
||||
<p>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Jan 31 11:52:45 2006 for H5Part by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,16 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>H5Part: Member List</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.4 -->
|
||||
<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div>
|
||||
<h1>H5IO_getname_t Member List</h1>This is the complete list of members for <a class="el" href="structH5IO__getname__t.html">H5IO_getname_t</a>, including all inherited members.<p><table>
|
||||
<tr class="memlist"><td><a class="el" href="structH5IO__getname__t.html#o1">count</a></td><td><a class="el" href="structH5IO__getname__t.html">H5IO_getname_t</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="structH5IO__getname__t.html#o0">index</a></td><td><a class="el" href="structH5IO__getname__t.html">H5IO_getname_t</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="structH5IO__getname__t.html#o2">name</a></td><td><a class="el" href="structH5IO__getname__t.html">H5IO_getname_t</a></td><td></td></tr>
|
||||
</table><hr size="1"><address style="align: right;"><small>Generated on Tue Jan 31 11:52:45 2006 for H5Part by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,97 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>H5Part: H5IO_getname_t Struct Reference</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.4 -->
|
||||
<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div>
|
||||
<h1>H5IO_getname_t Struct Reference</h1><!-- doxytag: class="H5IO_getname_t" --><a href="structH5IO__getname__t-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr><td></td></tr>
|
||||
<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5IO__getname__t.html#o0">index</a></td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5IO__getname__t.html#o1">count</a></td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5IO__getname__t.html#o2">name</a></td></tr>
|
||||
|
||||
</table>
|
||||
<hr><a name="_details"></a><h2>Detailed Description</h2>
|
||||
H5IO_getname_t: Private
|
||||
<p>
|
||||
<hr><h2>Member Data Documentation</h2>
|
||||
<a class="anchor" name="o1"></a><!-- doxytag: member="H5IO_getname_t::count" ref="o1" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">int <a class="el" href="structH5IO__getname__t.html#o1">H5IO_getname_t::count</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a class="anchor" name="o0"></a><!-- doxytag: member="H5IO_getname_t::index" ref="o0" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">int <a class="el" href="structH5IO__getname__t.html#o0">H5IO_getname_t::index</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a class="anchor" name="o2"></a><!-- doxytag: member="H5IO_getname_t::name" ref="o2" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">char* <a class="el" href="structH5IO__getname__t.html#o2">H5IO_getname_t::name</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr>The documentation for this struct was generated from the following file:<ul>
|
||||
<li><a class="el" href="H5Part_8c.html">H5Part.c</a></ul>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Jan 31 11:52:45 2006 for H5Part by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,28 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>H5Part: Member List</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.4 -->
|
||||
<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div>
|
||||
<h1>H5PartFile Member List</h1>This is the complete list of members for <a class="el" href="structH5PartFile.html">H5PartFile</a>, including all inherited members.<p><table>
|
||||
<tr class="memlist"><td><a class="el" href="structH5PartFile.html#o10">access_prop</a></td><td><a class="el" href="structH5PartFile.html">H5PartFile</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="structH5PartFile.html#o9">create_prop</a></td><td><a class="el" href="structH5PartFile.html">H5PartFile</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="structH5PartFile.html#o11">diskshape</a></td><td><a class="el" href="structH5PartFile.html">H5PartFile</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="structH5PartFile.html#o0">file</a></td><td><a class="el" href="structH5PartFile.html">H5PartFile</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="structH5PartFile.html#o7">maxstep</a></td><td><a class="el" href="structH5PartFile.html">H5PartFile</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="structH5PartFile.html#o12">memshape</a></td><td><a class="el" href="structH5PartFile.html">H5PartFile</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="structH5PartFile.html#o6">mode</a></td><td><a class="el" href="structH5PartFile.html">H5PartFile</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="structH5PartFile.html#o4">nparticles</a></td><td><a class="el" href="structH5PartFile.html">H5PartFile</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="structH5PartFile.html#o3">properties</a></td><td><a class="el" href="structH5PartFile.html">H5PartFile</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="structH5PartFile.html#o5">shape</a></td><td><a class="el" href="structH5PartFile.html">H5PartFile</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="structH5PartFile.html#o2">timegroup</a></td><td><a class="el" href="structH5PartFile.html">H5PartFile</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="structH5PartFile.html#o1">timestep</a></td><td><a class="el" href="structH5PartFile.html">H5PartFile</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="structH5PartFile.html#o14">viewend</a></td><td><a class="el" href="structH5PartFile.html">H5PartFile</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="structH5PartFile.html#o13">viewstart</a></td><td><a class="el" href="structH5PartFile.html">H5PartFile</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="structH5PartFile.html#o8">xfer_prop</a></td><td><a class="el" href="structH5PartFile.html">H5PartFile</a></td><td></td></tr>
|
||||
</table><hr size="1"><address style="align: right;"><small>Generated on Tue Jan 31 11:52:45 2006 for H5Part by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,399 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>H5Part: H5PartFile Struct Reference</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.4 -->
|
||||
<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div>
|
||||
<h1>H5PartFile Struct Reference</h1><!-- doxytag: class="H5PartFile" --><code>#include <<a class="el" href="H5Part_8h-source.html">H5Part.h</a>></code>
|
||||
<p>
|
||||
<a href="structH5PartFile-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr><td></td></tr>
|
||||
<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">hid_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5PartFile.html#o0">file</a></td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5PartFile.html#o1">timestep</a></td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">hid_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5PartFile.html#o2">timegroup</a></td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">hid_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5PartFile.html#o3">properties</a></td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">hsize_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5PartFile.html#o4">nparticles</a></td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">hid_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5PartFile.html#o5">shape</a></td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5PartFile.html#o6">mode</a></td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5PartFile.html#o7">maxstep</a></td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">hid_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5PartFile.html#o8">xfer_prop</a></td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">hid_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5PartFile.html#o9">create_prop</a></td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">hid_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5PartFile.html#o10">access_prop</a></td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">hid_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5PartFile.html#o11">diskshape</a></td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">hid_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5PartFile.html#o12">memshape</a></td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">long long </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5PartFile.html#o13">viewstart</a></td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">long long </td><td class="memItemRight" valign="bottom"><a class="el" href="structH5PartFile.html#o14">viewend</a></td></tr>
|
||||
|
||||
</table>
|
||||
<hr><a name="_details"></a><h2>Detailed Description</h2>
|
||||
/struct H5PartFile: This is an essentially opaque datastructure that acts as the filehandle for all practical purposes. It is created by <a class="el" href="H5Part_8c.html#a4">H5PartOpenFile<xx>()</a> and destroyed by <a class="el" href="H5Part_8c.html#a6">H5PartCloseFile()</a>.
|
||||
<p>
|
||||
<hr><h2>Member Data Documentation</h2>
|
||||
<a class="anchor" name="o10"></a><!-- doxytag: member="H5PartFile::access_prop" ref="o10" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">hid_t <a class="el" href="structH5PartFile.html#o10">H5PartFile::access_prop</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a class="anchor" name="o9"></a><!-- doxytag: member="H5PartFile::create_prop" ref="o9" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">hid_t <a class="el" href="structH5PartFile.html#o9">H5PartFile::create_prop</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a class="anchor" name="o11"></a><!-- doxytag: member="H5PartFile::diskshape" ref="o11" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">hid_t <a class="el" href="structH5PartFile.html#o11">H5PartFile::diskshape</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a class="anchor" name="o0"></a><!-- doxytag: member="H5PartFile::file" ref="o0" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">hid_t <a class="el" href="structH5PartFile.html#o0">H5PartFile::file</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a class="anchor" name="o7"></a><!-- doxytag: member="H5PartFile::maxstep" ref="o7" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">int <a class="el" href="structH5PartFile.html#o7">H5PartFile::maxstep</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a class="anchor" name="o12"></a><!-- doxytag: member="H5PartFile::memshape" ref="o12" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">hid_t <a class="el" href="structH5PartFile.html#o12">H5PartFile::memshape</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a class="anchor" name="o6"></a><!-- doxytag: member="H5PartFile::mode" ref="o6" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">unsigned <a class="el" href="structH5PartFile.html#o6">H5PartFile::mode</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a class="anchor" name="o4"></a><!-- doxytag: member="H5PartFile::nparticles" ref="o4" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">hsize_t <a class="el" href="structH5PartFile.html#o4">H5PartFile::nparticles</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a class="anchor" name="o3"></a><!-- doxytag: member="H5PartFile::properties" ref="o3" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">hid_t <a class="el" href="structH5PartFile.html#o3">H5PartFile::properties</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a class="anchor" name="o5"></a><!-- doxytag: member="H5PartFile::shape" ref="o5" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">hid_t <a class="el" href="structH5PartFile.html#o5">H5PartFile::shape</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a class="anchor" name="o2"></a><!-- doxytag: member="H5PartFile::timegroup" ref="o2" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">hid_t <a class="el" href="structH5PartFile.html#o2">H5PartFile::timegroup</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a class="anchor" name="o1"></a><!-- doxytag: member="H5PartFile::timestep" ref="o1" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">int <a class="el" href="structH5PartFile.html#o1">H5PartFile::timestep</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a class="anchor" name="o14"></a><!-- doxytag: member="H5PartFile::viewend" ref="o14" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">long long <a class="el" href="structH5PartFile.html#o14">H5PartFile::viewend</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a class="anchor" name="o13"></a><!-- doxytag: member="H5PartFile::viewstart" ref="o13" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">long long <a class="el" href="structH5PartFile.html#o13">H5PartFile::viewstart</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a class="anchor" name="o8"></a><!-- doxytag: member="H5PartFile::xfer_prop" ref="o8" args="" --><p>
|
||||
<table class="mdTable" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td class="mdRow">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="md" nowrap valign="top">hid_t <a class="el" href="structH5PartFile.html#o8">H5PartFile::xfer_prop</a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr>The documentation for this struct was generated from the following file:<ul>
|
||||
<li><a class="el" href="H5Part_8h-source.html">H5Part.h</a></ul>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Jan 31 11:52:45 2006 for H5Part by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,606 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>H5Part, the C/C++ API</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
||||
<meta name="keywords" content="scientific visualization">
|
||||
<meta name="sitemap" content="put a brief descriptive phrase here that will show up in the site map:foo">
|
||||
|
||||
<!--#include virtual="/include/topIncludes.html"-->
|
||||
|
||||
<div id="maincenter">
|
||||
|
||||
<h1>The C/C++ Application Programming Interface (API)</h1>
|
||||
<UL>
|
||||
<LI><a href="#Opening">Opening, Closing, and Validating Datafiles</a>
|
||||
<LI><a href="#SetStep">Setting the Simulation Timestep</a>
|
||||
<LI><a href="#SetNumParticles">Setting the Number of Particles</a>
|
||||
<LI><a href="#Writing">Writing Datasets</a>
|
||||
<LI><a href="#ReadingNumTimeSteps">Reading the Number of Time Steps</a>
|
||||
<LI><a href="#ReadingNumParticles">Reading the Number of Particles</a>
|
||||
<LI><a href="#Reading">Reading Datasets</a>
|
||||
<LI><a href="#DatasetsInfo">Reading the Number and the Names of Datasets</a>
|
||||
<LI><a href="#AttributesInfo">Attributes Interface</a>
|
||||
<LI><a href="#WriteAttribs">Writing Additional Attributes</a>
|
||||
<LI><a href="#ReadAttribs">Reading Attributes</a>
|
||||
</UL>
|
||||
<br>
|
||||
<a href="ReferencePages/index.html">Reference Manual (Doxygen)</a>
|
||||
<br>
|
||||
<hr>
|
||||
<a name="Opening"><h2>Opening Datafiles</h2></a>
|
||||
<P>
|
||||
Just like the familiar <code>FILE*</code> type for C stdio operations, all
|
||||
H5Part file operations require a file handle. The type of this handle is
|
||||
<code>(H5PartFile*)</code>.
|
||||
<br>
|
||||
<code>H5PartOpenFile()</code> is
|
||||
used to open a serial file and
|
||||
<code>HDFPartOpenFileParallel()</code> is used to open a file for
|
||||
Parallel I/O (in an MPI program).
|
||||
After you open the file handle you can use the same set of
|
||||
subroutines for operations on the file regardless of whether the
|
||||
file is a parallel or serial I/O file.
|
||||
The libraries manage all of this internally.<p>
|
||||
</P>
|
||||
<b>C Prototypes</b><br>
|
||||
<P>
|
||||
<b>Serial File</b><br>
|
||||
<code>H5PartFile *H5PartOpenFile(const char *filename, unsigned
|
||||
accessmode);</code><br>
|
||||
<b>Parallel File</b><br>
|
||||
<code>H5PartFile *H5PartOpenFileParallel(char *filename,int
|
||||
accessmode,MPI_Comm communicator);</code><br>
|
||||
<DT><i>filename</i>: </DT><DD>The name of the IEEEIO data file to
|
||||
open. The typical extension for these files is <i>.h5</i></DD>
|
||||
<DT><i>accessmode</i>: </DT><DD>The accessmode for the file. This is
|
||||
one of 2 different access modes<br>
|
||||
<code>H5PART_READ</code> : Opens a file in read-only mode.</DT><br>
|
||||
<code>H5PART_WRITE</code> : Opens a file in write-only mode.
|
||||
If the
|
||||
file does not exist, it will be created. If it does
|
||||
exist, it will be
|
||||
truncated.
|
||||
<DT><i>communicator</i>: </DT>
|
||||
<DD>This argument is only available if the program has been
|
||||
compiled with the <code>PARALLEL_IO</code> C-preprocessor flag
|
||||
defined. It is used to pass in the communicator that will be
|
||||
used for all collective I/O operations that target the same
|
||||
file on disk.</DD>
|
||||
<DT><i>Returns</i>:</DT><DD>A new filehandle with an open file or NULL if error.</DD>
|
||||
</DL>
|
||||
</P>
|
||||
<br><b>Example Use</b><br>
|
||||
<pre>
|
||||
#include < H5Part.h >
|
||||
. . . code . . .
|
||||
/* Open an HDF5 file for writing */
|
||||
H5PartFile *writer = H5PartOpenFile("datafileout.h5",H5PART_WRITE);
|
||||
/* Open an HDF5 file for Parallel I/O */
|
||||
H5PartFile *writer = H5PartOpenFileParallel("datafileout.h5",H5PART_WRITE,MPI_COMM_WORLD);
|
||||
/* open HDF5 file for reading */
|
||||
H5PartFile *reader = H5PartOpenFile("datafilein.h5",H5PART_READ);
|
||||
/* open HDF5 file for parallel reads */
|
||||
H5PartFile *reader = H5PartOpenFileParallel("datafilein.h5",H5PART_READ,MPI_COMM_WORLD);
|
||||
. . . more code . . .
|
||||
</pre> <br>
|
||||
|
||||
|
||||
<hr>
|
||||
|
||||
|
||||
<h2>Closing Datafiles</h2>
|
||||
<P>
|
||||
To close the file, you simply use H5PartCloseFile() for both
|
||||
parallel and serial files. You must call H5PartCloseFile() on any
|
||||
file descriptor created by H5PartFileOpen() regardless of
|
||||
whether the file turns out to be valid or not.
|
||||
</P>
|
||||
<b>C Prototypes</b><br>
|
||||
<P>
|
||||
<code>void H5PartCloseFile(H5PartFile *fileID);</code>
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by
|
||||
H5PartOpenFile() or H5PartOpenFileParallel().</DD>
|
||||
<DT><i>Returns</i>:</DT><DD>void.</DD>
|
||||
</DL>
|
||||
</P>
|
||||
<br><b>Example Use</b><br>
|
||||
<pre>
|
||||
#include < H5Part.h >
|
||||
H5PartFile *file;
|
||||
... code ...
|
||||
file=H5PartOpenFileParallel("parttest.h5",H5PART_WRITE,comm);
|
||||
... more code ...
|
||||
H5PartCloseFile(file);
|
||||
</pre>
|
||||
<br>
|
||||
<hr>
|
||||
|
||||
|
||||
<h2>Validating Datafiles</h2>
|
||||
<P>
|
||||
You can test if the file was opened successfully using the
|
||||
H5PartFileIsValid() function. It returns 1 if valid, 0 if invalid.<p>
|
||||
</P>
|
||||
<b>C Prototype</b><br>
|
||||
<P>
|
||||
<code>int H5PartFileIsValid(H5PartFile *fileID);</code>
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by
|
||||
H5PartOpenFile() or H5PartOpenFileParallel().</DD>
|
||||
<DT><i>Returns</i>:</DT><DD>1 if valid, 0 if invalid.</DD>
|
||||
</DL>
|
||||
</P>
|
||||
<br><b>Example Use</b><br>
|
||||
<P>
|
||||
Here is an example of validating a newly opened file. Even if
|
||||
the file is invalid, you must use H5PartCloseFile() to reclaim
|
||||
the file handle.
|
||||
</P>
|
||||
<pre>
|
||||
#include < H5Part.h >
|
||||
. . . code . . .
|
||||
H5PartFile *fileID = H5PartOpenFile("datafileout.h5",H5PART_WRITE);
|
||||
if(!H5PartFileIsValid(fileID)){
|
||||
puts("The file you specified does not exist or is not in a
|
||||
readable format");
|
||||
H5PartClose(fileID); /* must reclaim fileID even if file is invalid */
|
||||
. . . do other cleanup . . .
|
||||
}
|
||||
. . . more code . . .
|
||||
</pre><br>
|
||||
|
||||
<hr>
|
||||
|
||||
<a name="SetStep">
|
||||
<h2>Setting the Timestep</h2>
|
||||
</a>
|
||||
<P>
|
||||
When writing data to a file the current time step must be set (even if there is only one). In a file with N time steps, the steps are numbered from 0 to N-1.
|
||||
</P>
|
||||
<b>C Prototype</b><br>
|
||||
<P>
|
||||
<code>void H5PartSetStep((H5PartFile *fileID,int step);</code>
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by
|
||||
H5PartOpenFile() or H5PartOpenFileParallel().</DD>
|
||||
<DT><i>step</i>: </DT><DD>An integer time step.
|
||||
</DD>
|
||||
<DT><i>Returns</i>: </DT><DD>void.</DD>
|
||||
</DL>
|
||||
<br><b>Example Use</b><br>
|
||||
</P>
|
||||
<pre>
|
||||
#include < H5Part.h >
|
||||
H5PartFile *fileID;
|
||||
int timeStep;
|
||||
....
|
||||
H5PartSetStep(fileID,timeStep);
|
||||
....
|
||||
</pre>
|
||||
|
||||
<hr>
|
||||
|
||||
|
||||
<a name="SetNumParticles">
|
||||
</a>
|
||||
<h2>Setting the Number of Particles</h2>
|
||||
<P>
|
||||
H5PartSetNumParticles: This function's sole purpose is to
|
||||
prevent needless creation of new HDF5 DataSpace handles if
|
||||
the number of particles is invariant throughout the sim.
|
||||
That's its only reason for existence. After you call this
|
||||
subroutine, all subsequent operations will assume this
|
||||
number of particles will be written.
|
||||
</P>
|
||||
<b>C Prototype</b><br>
|
||||
<P>
|
||||
<code>void H5PartSetNumParticles(H5PartFile *fileID,long long nparticles);</code>
|
||||
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by
|
||||
H5PartOpenFile() or H5PartOpenFileParallel().</DD>
|
||||
<DT><i>nparticles</i>: </DT><DD>A long long integer specifying the number of particles.
|
||||
</DD>
|
||||
<DT><i>Returns</i>: </DT><DD>void.</DD>
|
||||
</DL>
|
||||
</P>
|
||||
<br><b>Example Use</b><br>
|
||||
<pre>
|
||||
#include < H5Part.h >
|
||||
H5PartFile *fileID;
|
||||
long long nparticles;
|
||||
....
|
||||
H5PartSetStep(fileID,nparticles);
|
||||
....
|
||||
</pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<a name="Writing">
|
||||
<h2>Writing Datasets</h2>
|
||||
</a>
|
||||
<P>
|
||||
After setting the number of particles with
|
||||
<a href="#SetNumParticles">H5PartSetNumParticles()</a>
|
||||
and the current timestep using
|
||||
<a href="#SetStep">H5PartSetStep()</a>, you can start
|
||||
writing datasets into the file. Each dataset has a name
|
||||
associated with it (chosen by the user) in order to facilitate
|
||||
later retrieval. The writing routines also implicitly store
|
||||
the datatype of the array so that the array can be
|
||||
reconstructed properly on other systems with incompatible type
|
||||
representations. The data is committed to disk before the
|
||||
routine returns. All data that is written after setting the
|
||||
timestep is associated with that timestep. While the number of
|
||||
particles can change for each timestep, you cannot change the
|
||||
number of particles in the middle of a given timestep.
|
||||
</P>
|
||||
<b>C Prototypes</b><br>
|
||||
<P>
|
||||
<code>int H5PartWriteDataFloat64(H5PartFile *fileID,char
|
||||
*name,double *array);</code></br>
|
||||
<code>int H5PartWriteDataInt64(H5PartFile *fileID,char
|
||||
*name,double *array);</code>
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by
|
||||
<a href="#Opening">H5PartOpenFile()</a> or
|
||||
<a href="#Opening">H5PartOpenFileParallel()</a>.</DD>
|
||||
<DT><i>name</i>: </DT><DD>A null-terminated string for the
|
||||
name of the array. When retrieving datasets from disk,
|
||||
you ask for them by name. There are no restrictions on
|
||||
naming of arrays, but it is useful to arrive at some common
|
||||
naming convention when sharing data with other groups.</DD>
|
||||
<DT><i>array</i>: </DT><DD>A buffer containing an array of
|
||||
particle data to commit to disk. The datatype for
|
||||
elements in the buffer is implicit in the name of the
|
||||
subroutine call.</DD>
|
||||
<DT><i>Returns</i>: </DT><DD>1 on success, 0 on failure.</DD>
|
||||
</DL>
|
||||
</P>
|
||||
<br><b>Example Use</b><br>
|
||||
<pre>
|
||||
#include < H5Part.h >
|
||||
H5PartFile *fileID;
|
||||
double *x,*y,*z;
|
||||
int timeStep;
|
||||
long long nparticles;
|
||||
|
||||
...
|
||||
|
||||
H5PartSetStep(fileID,timeStep); /* must set the current timestep in file */
|
||||
H5PartSetNumParticles(fileID,nparticles); /* then set number of particles to store */
|
||||
|
||||
/* now write different tuples of data into this timestep of the file */
|
||||
H5PartWriteDataFloat64(fileID,"x",x);
|
||||
H5PartWriteDataFloat64(fileID,"y",y);
|
||||
H5PartWriteDataFloat64(file,"z",z);
|
||||
..
|
||||
</pre>
|
||||
|
||||
<hr>
|
||||
<a name="ReadingNumTimeSteps">
|
||||
<h2>Reading the Number of Time Steps</h2>
|
||||
</a>
|
||||
<P>
|
||||
This reads the number of datasteps that are
|
||||
currently stored in the datafile.
|
||||
It works for both reading and writing of files, but is probably
|
||||
only typically used when you are reading.
|
||||
|
||||
</P>
|
||||
<b>C Prototype</b><br>
|
||||
<P>
|
||||
<code>int H5PartGetNumSteps (H5PartFile *fileID);</code><br>
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by <a href="#Opening">H5PartOpenFile()</a> or
|
||||
<a href="#Opening">H5PartOpenFileParallel()</a>.</DD>
|
||||
<DT><i>Returns</i>: </DT><DD>The number of timesteps currently stored in the file.
|
||||
</DL>
|
||||
</P>
|
||||
<hr>
|
||||
|
||||
<a name="ReadingNumParticles">
|
||||
<h2>Reading the Number of Particles</h2>
|
||||
</a>
|
||||
<P>
|
||||
This reads the number of particles that are
|
||||
currently stored in the current time step.
|
||||
It will arbitrarily select a timestep if you haven't
|
||||
already set the timestep with H5PartSetStep().
|
||||
|
||||
</P>
|
||||
<b>C Prototype</b><br>
|
||||
<P>
|
||||
<code>long long H5PartGetNumParticles (H5PartFile *fileID);</code><br>
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by <a href="#Opening">H5PartOpenFile()</a> or
|
||||
<a href="#Opening">H5PartOpenFileParallel()</a>.</DD>
|
||||
<DT><i>Returns</i>: </DT><DD>The number of particles in current timestep.
|
||||
</DL>
|
||||
</P>
|
||||
<br><b>Example Use</b><br>
|
||||
<pre>
|
||||
#include < H5Part.h >
|
||||
H5PartFile *fileID;
|
||||
int timeStep;
|
||||
long long nparticles;
|
||||
|
||||
H5PartSetStep(fileID,0);
|
||||
nparticles=H5PartGetNumParticles(fileID);
|
||||
...
|
||||
</pre>
|
||||
|
||||
<hr>
|
||||
|
||||
|
||||
|
||||
<a name="Reading">
|
||||
<h2>Reading Datasets</h2>
|
||||
</a>
|
||||
<P>
|
||||
After setting the time step and getting the number of particles to allocate the data arrays, you can start to read the data.
|
||||
</P>
|
||||
<b>C Prototypes</b><br>
|
||||
<P>
|
||||
<code>int H5PartReadDataFloat64(H5PartFile *fileID,char *name,double *array);</code><br>
|
||||
<code>int H5PartReadDataInt64(H5PartFile *fileID,char *name,long long *array);</code><br>
|
||||
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by
|
||||
<a href="#Opening">H5PartOpenFile()</a> or
|
||||
<a href="#Opening">H5PartOpenFileParallel()</a>.</DD>
|
||||
<DT><i>name</i>: </DT><DD>A null-terminated string for the
|
||||
name of the array. When retrieving datasets from disk,
|
||||
you ask for them by name. There are no restrictions on
|
||||
naming of arrays, but it is useful to arrive at some common
|
||||
naming convention when sharing data with other groups.</DD>
|
||||
<DT><i>array</i>: </DT><DD>A buffer to which the particle data will be read.i
|
||||
The datatype for
|
||||
elements in the buffer is implicit in the name of the
|
||||
subroutine call.</DD>
|
||||
<DT><i>Returns</i>: </DT><DD>1 on success, 0 on failure.</DD>
|
||||
</DL>
|
||||
</P>
|
||||
<br><b>Example Use</b><br>
|
||||
<pre>
|
||||
#include < H5Part.h >
|
||||
H5PartFile *fileID;
|
||||
double *x,*y,*z;
|
||||
int timeStep;
|
||||
long long nparticles;
|
||||
|
||||
H5PartSetStep(fileID,0);
|
||||
nparticles=H5PartGetNumParticles(fileID);
|
||||
...
|
||||
|
||||
H5PartReadDataFloat64(file,"x",x);
|
||||
H5PartReadDataFloat64(file,"y",y);
|
||||
H5PartReadDataFloat64(file,"z",z);
|
||||
...
|
||||
</pre>
|
||||
<hr>
|
||||
<a name="DatasetsInfo"><h2>Reading the Number and Names of Datasets</h2></a>
|
||||
<P>
|
||||
H5Part provides funtions to find out how many datasets are stored at a particular timestep
|
||||
and what their names are if you don't know what they are a-priori.
|
||||
</P>
|
||||
<b>C Prototypes</b><br>
|
||||
<P>
|
||||
<code>int H5PartGetNumDatasets(H5PartFile *fileID);</code><br>
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by
|
||||
<a href="#Opening">H5PartOpenFile()</a> or
|
||||
<a href="#Opening">H5PartOpenFileParallel()</a>.</DD>
|
||||
<DT><i>Returns</i>: </DT><DD>The number of datasets.</DD>
|
||||
</DL>
|
||||
</P>
|
||||
<P>
|
||||
<code>int H5PartGetDatasetName(H5PartFile *fileID,int index,char *name,int maxlen);</code><br>
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by
|
||||
<a href="#Opening">H5PartOpenFile()</a> or
|
||||
<a href="#Opening">H5PartOpenFileParallel()</a>.</DD>
|
||||
<DT><i>index</i>:</DT><DD> integer specifying the index of the dataset. If the number of datasets is
|
||||
nds, the range of index is 0 to nds-1.</DD>
|
||||
<DT><i>name</i>:</DT><DD> A null-terminated string for the name of the dataset.</DD>
|
||||
<DT><i>maxlen</i>:</DT><DD> An integer specifying the maximum length of the name array.</DD>
|
||||
<DT><i>Returns</i>: </DT><DD>1 on success, 0 on failure.</DD>
|
||||
</DL>
|
||||
</P>
|
||||
<br><b>Example Use</b><br>
|
||||
<pre>
|
||||
#include < H5Part.h >
|
||||
H5PartFile *fileID;
|
||||
char name[64];
|
||||
int index, nds;
|
||||
|
||||
...
|
||||
nds=H5PartGetNumDatasets(fileID);
|
||||
for(index=0;index< nds;index++){
|
||||
H5PartGetDatasetName(fileID,index,name,64);
|
||||
printf("\tDataset[%u] name=[%s]\n", index,name);
|
||||
}
|
||||
...
|
||||
</pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<a name="AttributesInfo">
|
||||
<h2>Attributes Interface</h2></a>
|
||||
<P>
|
||||
In the current H5Part implemtation there are two types of attributes: file attributes which are bound to the file
|
||||
and step attributes which are bound to the current timestep. You
|
||||
must set the timestep explicitly before writing the attributes (just
|
||||
as you must do when you write a new dataset. Currently there are no
|
||||
attributes that are bound to a particular data array, but this could
|
||||
easily be done if required.
|
||||
</P>
|
||||
<P>H5PartGetNumStepAttribs and H5PartGetNumFileAttribs return the number of attributes bound to a step and to a file respectively. H5PartGetStepAttribInfo and H5PartGetFileAttribInfo return the name, type and number of elements of type "type" bound to a step and a file respectively.
|
||||
</P>
|
||||
<b>C Prototypes:</b><br>
|
||||
<code>int H5PartGetNumStepAttribs(H5PartFile *fileID);
|
||||
</code><br>
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by
|
||||
<a href="#Opening">H5PartOpenFile()</a> or
|
||||
<a href="#Opening">H5PartOpenFileParallel()</a>.</DD>
|
||||
<DT><i>Returns</i> </DT><DD> The number of step attributes for the current step.</DD>
|
||||
</DL>
|
||||
<code>int H5PartGetNumFileAttribs(H5PartFile *fileID);
|
||||
</code><br>
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by
|
||||
<a href="#Opening">H5PartOpenFile()</a> or
|
||||
<a href="#Opening">H5PartOpenFileParallel()</a>.</DD>
|
||||
<DT><i>Returns</i> </DT><DD> The number of file attributes.</DD>
|
||||
</DL>
|
||||
<code>void H5PartGetStepAttribInfo(H5PartFile *fileID,int idx, char *name,size_t maxnamelen,hid_t *type,int *nelem);
|
||||
</code><br>
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by
|
||||
<a href="#Opening">H5PartOpenFile()</a> or
|
||||
<a href="#Opening">H5PartOpenFileParallel()</a>.</DD>
|
||||
<DT><i>idx</i>: </DT><DD>Index of the attribute.</DD>
|
||||
<DT><i>name</i>: </DT><DD>A null-terminated string with the name of the attribute.</DD>
|
||||
<DT><i>maxnamelen</i></DT><DD>the length of the name of the attribute.</DD>
|
||||
<DT><i>type</i>: </DT><DD>One of the following: H5T_NATIVE_DOUBLE H5T_NATIVE_INT64 H5T_NATIVE_CHAR.</DD>
|
||||
<DT><i>nelem</i>: </DT><DD>Number of elements of type "type".</DD>
|
||||
<DT><i>Returns</i> </DT><DD> void.</DD>
|
||||
</DL>
|
||||
|
||||
<code>void H5PartGetFileAttribInfo(H5PartFile *fileID,int idx, char *name,size_t maxnamelen, hid_t *type,int *nelem);
|
||||
</code><br>
|
||||
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by
|
||||
<a href="#Opening">H5PartOpenFile()</a> or
|
||||
<a href="#Opening">H5PartOpenFileParallel()</a>.</DD>
|
||||
<DT><i>idx</i>: </DT><DD>Index of the attribute.</DD>
|
||||
<DT><i>name</i>: </DT><DD>A null-terminated string with the name of the attribute.</DD>
|
||||
<DT><i>maxnamelen</i></DT><DD>the length of the name of the attribute.</DD>
|
||||
<DT><i>type</i>: </DT><DD>One of the following: H5T_NATIVE_DOUBLE H5T_NATIVE_INT64 H5T_NATIVE_CHAR.</DD>
|
||||
<DT><i>nelem</i>: </DT><DD>Number of elements of type "type".</DD>
|
||||
<DT><i>Returns</i> </DT><DD> void.</DD>
|
||||
</DL>
|
||||
|
||||
|
||||
<a name="WriteAttribs">
|
||||
<h2>Writing Attributes</h2>
|
||||
</a>
|
||||
<P>
|
||||
An attribute can be bound to the file or after setting the time step to this time step.
|
||||
</P>
|
||||
|
||||
<b>C Prototypes: Generic Attributes</b><br>
|
||||
<P>
|
||||
<code>int H5PartWriteFileAttrib(H5PartFile *fileID,char *name, hid_t type,void *value,int nelem);</code><br>
|
||||
<code>int H5PartWriteStepAttrib(H5PartFile *fileID,char *name, hid_t type,void *value,int nelem);</code><br>
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by
|
||||
<a href="#Opening">H5PartOpenFile()</a> or
|
||||
<a href="#Opening">H5PartOpenFileParallel()</a>.</DD>
|
||||
<DT><i>name</i>: </DT><DD>A null-terminated string for the
|
||||
name of the array. When retrieving datasets from disk,
|
||||
you ask for them by name. There are no restrictions on
|
||||
naming of arrays, but it is useful to arrive at some common
|
||||
naming convention when sharing data with other groups.</DD>
|
||||
<DT><i>type</i>: One of H5T_NATIVE_DOUBLE, H5T_NATIVE_INT64, H5T_NATIVE_CHAR.</DD>
|
||||
<DT><i>value</i>: value of the attribute.</DD>
|
||||
<DT><i>nelem</i>: number of elements of type "type".</DD>
|
||||
<DT><i>Returns</i>: </DT><DD>1 on success, 0 on failure.</DD>
|
||||
</DL>
|
||||
</P>
|
||||
<br><b>Example Use</b><br>
|
||||
<pre>
|
||||
#include < H5Part.h >
|
||||
H5PartFile *fileID;
|
||||
double actPos;
|
||||
|
||||
...
|
||||
H5PartWriteStepAttrib(file_m,"Spos",H5T_NATIVE_DOUBLE,&actPos,1);
|
||||
...
|
||||
</pre>
|
||||
|
||||
|
||||
<b>C Prototypes: String Attributes</b><br>
|
||||
<P>
|
||||
<code>int H5PartWriteStepAttribString(H5PartFile *fileID,char *name, char *attrib);</code><br>
|
||||
<code>int H5PartWriteFileAttribString(H5PartFile *fileID,char *name, char *attrib);</code><br>
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by
|
||||
<a href="#Opening">H5PartOpenFile()</a> or
|
||||
<a href="#Opening">H5PartOpenFileParallel()</a>.</DD>
|
||||
<DT><i>name</i>: </DT><DD>A null-terminated string for the
|
||||
name of the array. When retrieving datasets from disk,
|
||||
you ask for them by name. There are no restrictions on
|
||||
naming of arrays, but it is useful to arrive at some common
|
||||
naming convention when sharing data with other groups.</DD>
|
||||
<DT><i>attrib</i>: the attribute character string.</DD>
|
||||
<DT><i>Returns</i>: </DT><DD>1 on success, 0 on failure.</DD>
|
||||
</DL>
|
||||
</P>
|
||||
<br><b>Example Use</b><br>
|
||||
<pre>
|
||||
#include < H5Part.h >
|
||||
H5PartFile *fileID;
|
||||
char *newattrib;
|
||||
char *newname;
|
||||
|
||||
...
|
||||
H5PartWriteFileAttribString(fileID, newname,newattrib);
|
||||
...
|
||||
</pre>
|
||||
<hr>
|
||||
|
||||
<a name="ReadAttribs">
|
||||
<h2>Reading Attributes</h2>
|
||||
</a>
|
||||
<P>
|
||||
<P>
|
||||
As with the writing of attributes, there are two basic reading interfaces one that reads file bound attributes and one that reads
|
||||
step bound attributes. If the step is not set the current one will be used.
|
||||
</P>
|
||||
</P>
|
||||
<b>C Prototypes</b><br>
|
||||
<P>
|
||||
<code>void H5PartReadStepAttrib(H5PartFile *fileID,char *name,void *value);</code><br>
|
||||
<code>void H5PartReadAttrib(H5PartFile *fileID,char *name,void *value);</code><br>
|
||||
<code>int H5PartReadFileAttrib(H5PartFile *fileID,char *name,void *value);</code><br>
|
||||
<DL>
|
||||
<DT><i>fileID</i>: </DT><DD>A FileHandle opened by
|
||||
<a href="#Opening">H5PartOpenFile()</a> or
|
||||
<a href="#Opening">H5PartOpenFileParallel()</a>.</DD>
|
||||
<DT><i>name</i>: </DT><DD>A null-terminated string for the
|
||||
name of the array. When retrieving datasets from disk,
|
||||
you ask for them by name. There are no restrictions on
|
||||
naming of arrays, but it is useful to arrive at some common
|
||||
naming convention when sharing data with other groups.</DD>
|
||||
<DT><i>value</i>: value of the attribute.</DD>
|
||||
<DT><i>Returns</i>: </DT><DD>1 on success, 0 on failure.</DD>
|
||||
</DL>
|
||||
</P>
|
||||
<br>
|
||||
NOTE: H5PartReadAttrib has been superseeded by H5PartSetStep.
|
||||
<br>
|
||||
<br><b>Example Use</b><br>
|
||||
<pre>
|
||||
#include < H5Part.h >
|
||||
H5PartFile *fileID;
|
||||
int step;
|
||||
char name[MAXNAME];
|
||||
|
||||
...
|
||||
|
||||
H5PartSetStep(fileID, step);
|
||||
if (H5PartReadStepAttrib(file, "filename", &name[0]) == 1){
|
||||
printf("Read step from file: %s\n", name);
|
||||
}
|
||||
|
||||
...
|
||||
</pre>
|
||||
|
||||
</div>
|
||||
|
||||
<!--#include virtual="/include/dateFooter.html"-->
|
||||
@@ -0,0 +1,504 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>H5part, the Fortran API</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
||||
<meta name="keywords" content="scientific visualization">
|
||||
<meta name="sitemap" content="put a brief descriptive phrase here that will show up in the site map:foo">
|
||||
|
||||
<!--#include virtual="/include/topIncludes.html"-->
|
||||
|
||||
<div id="maincenter">
|
||||
|
||||
|
||||
<h1>The FORTRAN Application Programming Interface (API)</h1>
|
||||
<P>
|
||||
These references contain the information on how to access the H5Part API using FORTRAN bindings. All pointers are cast to haddr_t (a unint64_t) within the C/C++ code. In fortran, these pointers (handles) are carried as INTEGER*8
|
||||
</P>
|
||||
<UL>
|
||||
<LI><a href="#Opening">Opening, Closing, and Validating Datafiles</a>
|
||||
<LI><a href="#SetStep">Setting the Simulation Timestep</a>
|
||||
<LI><a href="#SetNumParticles">Setting the Number of Particles</a>
|
||||
<LI><a href="#Writing">Writing Datasets</a>
|
||||
<LI><a href="#ReadingNumTimeSteps">Reading the Number of Time Steps</a>
|
||||
<LI><a href="#ReadingNumTimeSteps">Reading the Number of Particles</a>
|
||||
<LI><a href="#Reading">Reading Datasets</a>
|
||||
<LI><a href="#DatasetsInfo">Reading the Number and the Names of Datasets</a>
|
||||
<LI><a href="#AttributesInfo">Attributes Interface</a>
|
||||
<LI><a href="#WriteAttribs">Writing Additional Attributes</a>
|
||||
<LI><a href="#ReadAttribs">Reading Attributes</a>
|
||||
</UL>
|
||||
<hr>
|
||||
<a name="Opening"><h2>Opening Datafiles</h2></a>
|
||||
<P>
|
||||
Like the familiar OPEN in FORTRAN files can be opened to read and write. Different functions are used for the serial and parallel case.
|
||||
</P>
|
||||
<b>FORTRAN Prototypes</b><br>
|
||||
<P>
|
||||
<b>Serial File</b><br>
|
||||
<code>INTEGER*8 h5pt_openr</code><br>
|
||||
<code>FUNCTION h5pt_openw(file)<br>
|
||||
in CHARACTER file(*) : the filename to open for writing </code><br>
|
||||
returns INTEGER*8 : and open filehandle for serial reads</code><br>
|
||||
<br>
|
||||
<code>INTEGER*8 h5pt_openw</code><br>
|
||||
<code>FUNCTION h5pt_openw(file)<br>
|
||||
in CHARACTER file(*) : the filename to open for writing<br>
|
||||
returns INTEGER*8 : and open filehandle for serial writes</code><br>
|
||||
<br>
|
||||
<b>Parallel File</b><br>
|
||||
<code>INTEGER*8 h5pt_openr_par</code><br>
|
||||
<code>FUNCTION h5pt_openr_par(file,mpi_communicator)<br>
|
||||
in CHARACTER file(*) : the filename to open for writing<br>
|
||||
in INTEGER mpi_communicator : the MPI_Communicator used by the program<br>
|
||||
returns INTEGER*8 : and open filehandle for parallel reads</code><br>
|
||||
<br>
|
||||
<code>INTEGER*8 h5pt_openw_par</code><br>
|
||||
<code>FUNCTION h5pt_openw_par(file,mpi_communicator)<br>
|
||||
in CHARACTER file(*) : the filename to open for writing<br>
|
||||
in INTEGER mpi_communicator : the MPI_Communicator used by the program<br>
|
||||
returns INTEGER*8 : and open filehandle for parallel reads</code><br>
|
||||
</P>
|
||||
<P>
|
||||
<b>Example Use</b><br>
|
||||
<pre>
|
||||
include 'H5Part.inc'
|
||||
INTEGER*8 file
|
||||
...
|
||||
file = h5pt_openw("testfilef.h5")
|
||||
...
|
||||
</pre>
|
||||
</P>
|
||||
<hr>
|
||||
<h2>Closing Datafiles</h2>
|
||||
<P>
|
||||
To close the file, you simply use h5pt_close() for both parallel and serial files. You must call h5pt_close() on any file descriptor created by h5pt_open*() regardless of whether the file turns out to be valid or not.</P>
|
||||
<b>FORTRAN Prototype</b><br>
|
||||
<code>EXTERNAL h5pt_close</code><br>
|
||||
<code>SUBROUTINE h5pt_close(filehandle)<br>
|
||||
in INTEGER*8 filehandle : close this open filehandle</code><br>
|
||||
<b>Example Use</b><br>
|
||||
<pre>
|
||||
include 'H5Part.inc'
|
||||
INTEGER*8 file
|
||||
...
|
||||
call h5pt_close(file)
|
||||
...
|
||||
</pre>
|
||||
</P>
|
||||
<hr>
|
||||
<h2> Validating Datafiles</h2>
|
||||
<P>
|
||||
You can test if the file was opened successfully using the
|
||||
h5p_isvalid() function. It returns 1 if valid, 0 if invalid.
|
||||
</P>
|
||||
<b>FORTRAN Prototype</b><br>
|
||||
<code>INTEGER h5pt_isvalid</code><br>
|
||||
<code>FUNCTION h5pt_isvalid(filehandle)<br>
|
||||
in INTEGER*8 filehandle: an open filehandle <br>
|
||||
returns INTEGER : 1 if the file is valid, 0 if it is not</code><br>
|
||||
<b>Example Use</b><br>
|
||||
<pre>
|
||||
include 'H5Part.inc'
|
||||
INTEGER*8 file
|
||||
INTEGER status
|
||||
...
|
||||
status = h5pt_isvalid(file)
|
||||
...
|
||||
</pre>
|
||||
</P>
|
||||
<hr>
|
||||
<a name="SetStep">
|
||||
<h2>Setting the Timestep</h2>
|
||||
</a>
|
||||
<P>
|
||||
When writing data to a file the current time step must be set (even if there is only one). In a file with N time steps, the steps are numbered from 0 to N-1.
|
||||
</P>
|
||||
<b>FORTRAN Prototype</b><br>
|
||||
<code>EXTERNAL h5pt_setstep</code><br>
|
||||
<code>SUBROUTINE h5pt_setstep(filehandle,step)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
in INTEGER step : Set the current timestep in the file to this
|
||||
</code><br>
|
||||
<b>Example Use</b><br>
|
||||
<pre>
|
||||
include 'H5Part.inc'
|
||||
INTEGER*8 file
|
||||
INTEGER I
|
||||
INTEGER nstep
|
||||
...
|
||||
do I=1,nstep
|
||||
call h5pt_setstep(file,I)
|
||||
... more code ...
|
||||
enddo
|
||||
</pre>
|
||||
</P>
|
||||
<hr>
|
||||
|
||||
<a name="SetNumParticles">
|
||||
</a>
|
||||
<h2>Setting the Number of Particles</h2>
|
||||
<P>
|
||||
This function's sole purpose is to
|
||||
prevent needless creation of new HDF5 DataSpace handles if
|
||||
the number of particles is invariant throughout the sim.
|
||||
That's its only reason for existence. After you call this
|
||||
subroutine, all subsequent operations will assume this
|
||||
number of particles will be written.
|
||||
</P>
|
||||
<b>FORTRAN Prototype</b><br>
|
||||
<code>EXTERNAL h5pt_setnpoints</code><br>
|
||||
<code>SUBROUTINE h5pt_setnpoints(filehandle,npoints)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
in INTEGER*8 npoints : The number of particles on *this* processor</code><br>
|
||||
<b>Example Use</b><br>
|
||||
<pre>
|
||||
include 'H5Part.inc'
|
||||
INTEGER*8 file
|
||||
INTEGER*8 npoints
|
||||
|
||||
...
|
||||
call h5pt_setnpoints(file,npoints)
|
||||
...
|
||||
</pre>
|
||||
|
||||
<hr>
|
||||
<a name="Writing">
|
||||
<h2>Writing Datasets</h2>
|
||||
</a>
|
||||
<P>
|
||||
After setting the number of particles with
|
||||
<a href="#SetNumParticles">h5pt_setnpoints()</a>
|
||||
and the current timestep using
|
||||
<a href="#SetStep">h5pt_setstep()</a>, you can start
|
||||
writing datasets into the file. Each dataset has a name
|
||||
associated with it (chosen by the user) in order to facilitate
|
||||
later retrieval. The writing routines also implicitly store
|
||||
the datatype of the array so that the array can be
|
||||
reconstructed properly on other systems with incompatible type
|
||||
representations. The data is committed to disk before the
|
||||
routine returns. All data that is written after setting the
|
||||
timestep is associated with that timestep. While the number of
|
||||
particles can change for each timestep, you cannot change the
|
||||
number of particles in the middle of a given timestep.
|
||||
</P>
|
||||
<b>FORTRAN Prototypes</b><br>
|
||||
<P>
|
||||
The two data types supported for the moment are REAL*8 and INTEGER*8 (float64 and int64).
|
||||
</P>
|
||||
<code>EXTERNAL h5pt_writedata_r8</code><br>
|
||||
<code>SUBROUTINE h5pt_writedata_r8(filehandle,name,data)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
in CHARACTER name(*) : The name of the data we are writing eg. "X" or "Y" or "PX" etc...<br>
|
||||
in REAL*8 data(*) : The dataarray to write</code><br>
|
||||
<br>
|
||||
<code>EXTERNAL h5pt_writedata_i8</code><br>
|
||||
<code>SUBROUTINE h5pt_writedata_i8(filehandle,name,data)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
in CHARACTER name(*) : The name of the data we are writing eg. "X" or "Y" or "PX" etc...<br>
|
||||
in INTEGER*8 data(*) : The dataarray to write</code><br>
|
||||
<b>Example Use</b><br>
|
||||
<pre>
|
||||
include 'H5Part.inc'
|
||||
INTEGER*8 file
|
||||
INTEGER nstep
|
||||
INTEGER I
|
||||
REAL*8,ALLOCATABLE:: X(:)
|
||||
|
||||
...
|
||||
do I=1,nstep
|
||||
call h5pt_setstep(file,I)
|
||||
call h5pt_writedata_r8(file,"x",X)
|
||||
enddo
|
||||
...
|
||||
</pre>
|
||||
<hr>
|
||||
<a name="ReadingNumTimeSteps">
|
||||
<h2>Reading the Number of Time Steps</h2>
|
||||
</a>
|
||||
<P>
|
||||
This reads the number of datasteps that are
|
||||
currently stored in the datafile.
|
||||
It works for both reading and writing of files, but is probably
|
||||
only typically used when you are reading.
|
||||
|
||||
</P>
|
||||
<b>FORTRAN Prototypes</b><br>
|
||||
<code>INTEGER h5pt_getnsteps</code><br>
|
||||
<code>FUNCTION h5pt_getnsteps(filehandle)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
returns INTEGER : number of timesteps stored in the file</code><br>
|
||||
<b>Example Use</b><br>
|
||||
<pre>
|
||||
include 'H5Part.inc'
|
||||
INTEGER*8 file
|
||||
INTEGER nstep
|
||||
|
||||
file = h5pt_openr("testfilef.h5")
|
||||
nstep = h5pt_getnsteps(file)
|
||||
</pre>
|
||||
<hr>
|
||||
|
||||
<a name="ReadingNumParticles">
|
||||
<h2>Reading the Number of Particles</h2>
|
||||
</a>
|
||||
<P>
|
||||
This reads the number of particles that are currently stored in the current time step. It will arbitrarily select a timestep if you haven't already set the timestep with H5PartSetStep().
|
||||
|
||||
</P>
|
||||
<b>FORTRAN Prototypes</b><br>
|
||||
<code>INTEGER h5pt_getnpointss</code><br>
|
||||
<code>FUNCTION h5pt_getnpoints(filehandle)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
returns INTEGER : number of particles in the current time step</code><br>
|
||||
<b>Example Use</b><br>
|
||||
<pre>
|
||||
include 'H5Part.inc'
|
||||
INTEGER*8 file
|
||||
INTEGER*8 npoints
|
||||
INTEGET step;
|
||||
|
||||
file = h5pt_openr("testfilef.h5")
|
||||
call h5pt_setstep(file,0)
|
||||
npoints = h5pt_getnpoints(file)
|
||||
...
|
||||
</pre>
|
||||
<hr>
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="Reading">
|
||||
<h2>Reading Datasets</h2>
|
||||
</a>
|
||||
<P>
|
||||
After setting the time step and getting the number of particles to allocate the data arrays, you can start to read the data.
|
||||
</P>
|
||||
<b>FORTRAN Prototypes</b><br>
|
||||
<code>INTEGER h5pt_readdata_r8</code><br>
|
||||
<code>FUNCTION h5pt_readdata_r8(filehandle,name,data)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
in CHARACTER name(*) : The name of the data we are writing, eg. "X" or "Y" or "PX" etc...<br>
|
||||
out REAL*8 data(*) : The data array to read. The number of points to read is either the number within
|
||||
the view setby h5pt_setview() or the default (the total number of particles in the file).<br>
|
||||
|
||||
|
||||
|
||||
<b>Example Use</b><br>
|
||||
<pre>
|
||||
include 'H5Part.inc'
|
||||
INTEGER*8 file
|
||||
INTEGER err
|
||||
INTEGER*8,ALLOCATABLE:: ID(:)
|
||||
|
||||
...
|
||||
call h5pt_setstep(file,step)
|
||||
err=h5pt_readdata_i8(file,"id",ID)
|
||||
...
|
||||
</pre>
|
||||
<hr>
|
||||
<a name="DatasetsInfo"><h2>Reading the Number and Names of Datasets</h2></a>
|
||||
<P>
|
||||
H5Part provides funtions to find out how many datasets are stored at a particular timestep
|
||||
and what their names are if you don't know what they are a-priori.
|
||||
</P>
|
||||
<b>FORTRAN Prototypes</b><br>
|
||||
<code>INTEGER h5pt_getndatasets</code><br>
|
||||
<code>FUNCTION h5pt_getndatasets(filehandle)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
returns INTEGER*8 : number of datasets stored per timestep</code><br>
|
||||
<b>Example Use</b><br>
|
||||
<pre>
|
||||
include 'H5Part.inc'
|
||||
INTEGER*8 file
|
||||
INTEGER ndata
|
||||
|
||||
...
|
||||
call h5pt_setstep(file,1)
|
||||
ndata = h5pt_getndatasets(file)
|
||||
...
|
||||
|
||||
</pre>
|
||||
<b>FORTRAN Prototypes</b><br>
|
||||
<code>INTEGER h5pt_getdatasetname</code><br>
|
||||
<code>FUNCTION h5pt_getdatasetname(filehandle,index,name)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
in INTEGER index : Index for a given dataset name<br>
|
||||
out CHARACTER name(*) returns the name of the dataset at that index<br>
|
||||
returns INTEGER, 1 on success 0 on failure.</code><br>
|
||||
<b>Example Use</b><br>
|
||||
<pre>
|
||||
include 'H5Part.inc'
|
||||
INTEGER*8 file
|
||||
INTEGER err
|
||||
CHARACTER,ALLOCATABLE:: name(:)
|
||||
|
||||
...
|
||||
err=h5pt_getdatasetname(file, 1, name)
|
||||
...
|
||||
</pre>
|
||||
<hr>
|
||||
|
||||
<a name="AttributesInfo">
|
||||
<h2>Attributes Interface</h2></a>
|
||||
<P>
|
||||
In the current H5Part implemtation there are two types of attributes: file attributes which are bound to the file
|
||||
and step attributes which are bound to the current timestep. You
|
||||
must set the timestep explicitly before writing the attributes (just
|
||||
as you must do when you write a new dataset. Currently there are no
|
||||
attributes that are bound to a particular data array, but this could
|
||||
easily be done if required.
|
||||
</P>
|
||||
<b>FORTRAN Prototypes</b><br>
|
||||
<code>INTEGER h5pt_getnstepattribs</code><br>
|
||||
<code>FUNCTION h5pt_getnstepattribs(filehandle)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
returns INTEGER : number of attributes bound to this particular step<br>
|
||||
</code>
|
||||
<br>
|
||||
<code>INTEGER h5pt_getnfileattribs</code><br>
|
||||
<code>FUNCTION h5pt_getnfileattribs(filehandle)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
returns INTEGER : number of attributes bound to the file<br>
|
||||
</code>
|
||||
<br>
|
||||
<code>INTEGER h5pt_getstepattribinfo</code><br>
|
||||
<code>FUNCTION h5pt_getstepattribinfo(filehandle,idx,attribname,nelem)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
in INTEGER idx : index of the attribute being queried<br>
|
||||
out CHARACTER name(*) : The name of the attribute<br>
|
||||
out INTEGER nelem : Number of elements in the attrib array<br>
|
||||
returns INTEGER, 1 on success 0 on failure.<br>
|
||||
</code>
|
||||
<br>
|
||||
<code>INTEGER h5pt_getfileattribinfo</code><br>
|
||||
<code>FUNCTION h5pt_getfileattribinfo(filehandle,idx,attribname,nelem)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
in INTEGER idx : index of the attribute being queried<br>
|
||||
out CHARACTER name(*) : The name of the attribute<br>
|
||||
out INTEGER nelem : Number of elements in the attrib array<br>
|
||||
returns INTEGER, 1 on success 0 on failure.
|
||||
</code>
|
||||
<br>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<hr>
|
||||
<a name="WriteAttribs">
|
||||
<h2>Writing Attributes</h2>
|
||||
</a>
|
||||
<P>
|
||||
An attribute can be bound to the file or after setting the time step to this time step.
|
||||
</P>
|
||||
<b>FORTRAN Prototypes</b><br>
|
||||
<code>INTEGER h5pt_writefileattrib_r8</code><br>
|
||||
<code>
|
||||
FUNCTION h5pt_writefileattrib_r8(filehandle,name,attrib,nelem)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
in CHARACTER name(*) : The name of the attribute<br>
|
||||
in REAL*8 attrib(*) : The array of data to write into the attribute<br>
|
||||
in INTEGER nelem : Number of elements in the attrib array<br>
|
||||
returns INTEGER, 1 on success 0 on failure<br>
|
||||
</code>
|
||||
<br>
|
||||
<code>INTEGER h5pt_writefileattrib_i8</code><br>
|
||||
<code>FUNCTION h5pt_writefileattrib_i8(filehandle,name,attrib,nelem)<br>
|
||||
in INTEGER*8 filehandle : The filehandle<br>
|
||||
in CHARACTER name(*) : The name of the attribute<br>
|
||||
in INTEGER*8 attrib(*) : The array of data to write into the attribute<br>
|
||||
in INTEGER nelem : Number of elements in the attrib array<br>
|
||||
returns INTEGER, 1 on success 0 on failure<br>
|
||||
</code>
|
||||
<br>
|
||||
<code>INTEGER h5pt_writefileattrib_string</code><br>
|
||||
<code>FUNCTION h5pt_writefileattrib_string(filehandle,name,string)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
in CHARACTER name(*) : The name of the attribute<br>
|
||||
in CHARACTER*8 attrib(*) : The array of data to write into the attribute<br>
|
||||
returns INTEGER, 1 on success 0 on failure<br>
|
||||
</code>
|
||||
<br>
|
||||
<code>INTEGER h5pt_writestepattrib_r8</code><br>
|
||||
<code>FUNCTION h5pt_writestepattrib_r8(filehandle,name,attrib,nelem)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
in CHARACTER name(*) : The name of the attribute<br>
|
||||
in REAL*8 attrib(*) : The array of data to write into the attribute<br>
|
||||
in INTEGER nelem : Number of elements in the attrib array
|
||||
returns INTEGER, 1 on success 0 on failure<br>
|
||||
</code>
|
||||
<br>
|
||||
<code>INTEGER h5pt_writestepattrib_i8</code><br>
|
||||
<code>FUNCTION h5pt_writestepattrib_i8(filehandle,name,attrib,nelem)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
in CHARACTER name(*) : The name of the attribute<br>
|
||||
in INTEGER*8 attrib(*) : The array of data to write into the attribute<br>
|
||||
in INTEGER nelem : Number of elements in the attrib array<br>
|
||||
returns INTEGER, 1 on success 0 on failure<br>
|
||||
</code>
|
||||
<br>
|
||||
<code>INTEGER h5pt_writestepattrib_string</code><br>
|
||||
<code>FUNCTION h5pt_writestepattrib_string(filehandle,name,string)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
in CHARACTER name(*) : The name of the attribute<br>
|
||||
in CHARACTER*8 attrib(*) : The array of data to write into the attribute<br>
|
||||
returns INTEGER, 1 on success 0 on failure<br>
|
||||
</code>
|
||||
|
||||
<b>Example Use</b><br>
|
||||
<pre>
|
||||
include 'H5Part.inc'
|
||||
INTEGER*8 file
|
||||
REAL*8 REALTIME
|
||||
INTEGER err
|
||||
|
||||
...
|
||||
err=h5pt_writefileattrib_string(file,"Annotation","Testing 1 2 3")
|
||||
err=h5pt_writestepattrib_r8(file,"RealTime",REALTIME,1)
|
||||
...
|
||||
|
||||
</pre>
|
||||
|
||||
<hr>
|
||||
<a name="ReadAttribs">
|
||||
<h2>Reading Attributes</h2>
|
||||
</a>
|
||||
<P>
|
||||
As with the writing of attributes, there are two basic reading interfaces one that reads file bound attributes and one that reads
|
||||
step bound attributes. If the step is not set the current one will be used.
|
||||
</P>
|
||||
<b>FORTRAN Prototypes</b><br>
|
||||
|
||||
<code>INTEGER h5pt_readstepattrib</code><br>
|
||||
<code>FUNCTION h5pt_readstepattrib(filehandle,name,data)<br>
|
||||
in INTEGER*8 filehandle : an open filehandle<br>
|
||||
in CHARACTER attributename(*) : name of the attribute to read<br>
|
||||
out <anytype> data(*) : the attribute data will be read into this array<br>
|
||||
returns INTEGER, 1 on success 0 on failure<br>
|
||||
</code>
|
||||
<br>
|
||||
<code>INTEGER h5pt_readfileattrib</code><br>
|
||||
<code>FUNCTION h5pt_readfileattrib(filehandle,name,data)<br>
|
||||
in INTEGER*8 filehandle an open filehandle<br>
|
||||
in CHARACTER attributename(*) : name of the attribute to read<br>
|
||||
out <anytype> data(*) : the attribute data will be read into this array<br>
|
||||
returns INTEGER, 1 on success 0 on failure<br>
|
||||
</code>
|
||||
|
||||
<b>Example Use</b><br>
|
||||
<pre>
|
||||
include 'H5Part.inc'
|
||||
INTEGER*8 file
|
||||
REAL*8 REALTIME
|
||||
|
||||
...
|
||||
call h5pt_setstep(file,0)
|
||||
err=h5pt_readstepattrib(file,"RealTime",data)
|
||||
...
|
||||
</pre>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<!--#include virtual="/include/dateFooter.html"-->
|
||||
|
After Width: | Height: | Size: 1.2 MiB |
|
After Width: | Height: | Size: 187 KiB |
@@ -1,2 +0,0 @@
|
||||
</BODY>
|
||||
</HTML>
|
||||
@@ -0,0 +1,121 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>H5Part: a Portable High Performance Parallel Data Interface to HDF5</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
||||
<meta name="keywords" content="scientific visualization">
|
||||
<meta name="sitemap" content="put a brief descriptive phrase here that will show up in the site map:foo">
|
||||
|
||||
|
||||
<div id="maincenter">
|
||||
<font face="arial,helvetica"><h1>H5Part: a Portable High Performance Parallel Data Interface to HDF5</h1></font>
|
||||
<h2><font color="red"> THESE PAGES ARE UNDER CONSTRUCTION, July 2006</h2></font>
|
||||
<font face="arial,helvetica" color="#555588"><h2>Motivation</h2></font>
|
||||
<P>
|
||||
<TABLE>
|
||||
<TR>
|
||||
<TD>
|
||||
<a href="collision_6.png"><img src="collision_6.s.png" width=300 height=300></a>
|
||||
</TD
|
||||
></TR>
|
||||
<TR>
|
||||
<TD>
|
||||
Beam-beam collision simulation.
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
</P>
|
||||
<P>
|
||||
Particle based simulations of accelerator beam-lines, especially in
|
||||
six dimensional phase space, generate vast amounts of data. Even
|
||||
though a subset of statistical information regarding phase space
|
||||
or analysis needs to be preserved, reading and writing such
|
||||
enormous restart files on massively parallel supercomputing
|
||||
systems remains challenging.<p>
|
||||
</P>
|
||||
|
||||
<P>
|
||||
H5Part is a very simple data storage schema and provides an
|
||||
API that simplifies the reading/writing of the data to the HDF5
|
||||
file format. An important foundation for a stable visualization and data
|
||||
analysis environment is a stable and portable file storage format and
|
||||
its associated APIs. The presence of a "common file storage format,"
|
||||
including associated APIs, will help foster a fundamental level of
|
||||
interoperability across the project's software infrastructure. It will
|
||||
also help ensure that key data analysis capabilities are present
|
||||
during the earliest phases of the software development effort.
|
||||
</P>
|
||||
<P>
|
||||
H5Part is built on top of the <a href="http://hdf.ncsa.uiuc.edu/HDF5">HDF5 (Hierarchical Data Format).</a>
|
||||
HDF5 offers a self-describing machine-independent
|
||||
binary file format that supports scalable parallel I/O
|
||||
performance for MPI codes on a variety of supercomputing
|
||||
systems, and works equally well on laptop computers. The API is
|
||||
available for C, C++, and Fortran codes. The H5Part file format and APIs
|
||||
enable disparate research groups with different simulation
|
||||
implementations to transparently share datasets and data
|
||||
analysis tools. For instance, the common file format will enable
|
||||
groups that depend on completely different simulation
|
||||
implementations to share data analysis tools.
|
||||
</P>
|
||||
<font face="arial,helvetica" color="#555588"><h2>H5Part file organization and API</h2></font>
|
||||
<P>
|
||||
The proposed file storage format uses HDF5 for the lowlevel
|
||||
file storage and a simple API to provide a high-level
|
||||
interface to that file format. A programmer can either use
|
||||
the H5Part API to access the data files or write directly to
|
||||
the file format using some simple conventions for organizing
|
||||
and naming the objects stored in the file.
|
||||
</P>
|
||||
<P>
|
||||
In order to store Particle Data in the HDF5 file format,
|
||||
we have formalized the hierarchical arrangement of the
|
||||
datasets and naming conventions for the groups and associated
|
||||
datasets. The sample H5Part API formally encodes
|
||||
these conventions in order to provide a simple and uniform
|
||||
way to access these files from C, C++, and Fortran codes.
|
||||
The API makes it easier to write very portable data adaptors
|
||||
for visualization tools in order to expand the number of
|
||||
tools available to access the data. Even so, anyone can use
|
||||
the HDF5 h5ls utility to examine the organization of the
|
||||
H5Part files and even write their own HDF5-based interface
|
||||
for reading and writing the file format. The standards
|
||||
offered by the sample API are completely independent of
|
||||
the standard for organizing data within the file.The file
|
||||
format supports the storage of multiple timesteps
|
||||
of datasets that contain multiple fields.
|
||||
</P>
|
||||
<!--
|
||||
<font face="arial,helvetica" color="#555588"><h2>Requirements Specification</h2></font>
|
||||
<UL>
|
||||
<LI><a href="H5PartSpecs.html">H5Part API specifications
|
||||
</UL>
|
||||
</a>
|
||||
-->
|
||||
|
||||
<font face="arial,helvetica" color="#555588"><h2>Downloading and Installing H5Part</h2></font>
|
||||
<UL>
|
||||
<LI><a href="Downloading.html">Downloading HDF5 and H5Part
|
||||
<LI><a href="BuildingHDF5.html">Building the HDF5 Library</a>
|
||||
<LI><a href="Building.html">Building the H5Part Library</a>
|
||||
</UL>
|
||||
<font face="arial,helvetica" color="#555588"><h2>Bindings</h2></font>
|
||||
<UL>
|
||||
<LI><a href="UsingC.html">Using the C/C++ interface</a>
|
||||
<LI><a href="UsingF.html">Using the F77/F90 interface</a>
|
||||
<LI><a href="InternalLayout.html">Logical Internal HDF5 File</a>
|
||||
<LI><a href="H5PartTools.html">H5Part Utility Tools</a>
|
||||
<LI><a href="ReferencePages/index.html">Reference Manual</a>
|
||||
</UL>
|
||||
|
||||
<font face="arial,helvetica" color="#555588"><h2>H5Part Visualization Tools</h2></font>
|
||||
<UL>
|
||||
<LI><a href="H5PartExpress.html">H5Part Express Reader</a>
|
||||
<LI><a href="H5PartVisIt.html">H5Part VisIt Reader</a>
|
||||
<LI><a href="H5PartIDL.html">H5Part IDL Reader</a>
|
||||
<LI><a href="http://www.cscs.ch/a-display.php?id=170">H5Part sparticles Reader: developed at CSCS, Switzerland</a>
|
||||
|
||||
<LI><a href="H5PartPartView.html">PartView Visualization Application</a>
|
||||
</UL>
|
||||
</div>
|
||||
|
||||
|
After Width: | Height: | Size: 15 KiB |
@@ -1,204 +0,0 @@
|
||||
#ifndef __H5BLOCK_H
|
||||
#define __H5BLOCK_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*!
|
||||
Interface for block structured field data
|
||||
|
||||
*/
|
||||
|
||||
h5part_int64_t
|
||||
H5BlockDefine3DFieldLayout (
|
||||
H5PartFile *f,
|
||||
const h5part_int64_t i_start,
|
||||
const h5part_int64_t i_end,
|
||||
const h5part_int64_t j_start,
|
||||
const h5part_int64_t j_end,
|
||||
const h5part_int64_t k_start,
|
||||
const h5part_int64_t k_end
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5Block3dGetPartitionOfProc (
|
||||
H5PartFile *f,
|
||||
const h5part_int64_t proc,
|
||||
h5part_int64_t *i_start,
|
||||
h5part_int64_t *i_end,
|
||||
h5part_int64_t *j_start,
|
||||
h5part_int64_t *j_end,
|
||||
h5part_int64_t *k_start,
|
||||
h5part_int64_t *k_end
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5Block3dGetReducedPartitionOfProc (
|
||||
H5PartFile *f,
|
||||
h5part_int64_t proc,
|
||||
h5part_int64_t *i_start,
|
||||
h5part_int64_t *i_end,
|
||||
h5part_int64_t *j_start,
|
||||
h5part_int64_t *j_end,
|
||||
h5part_int64_t *k_start,
|
||||
h5part_int64_t *k_end
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5Block3dGetProcOf (
|
||||
H5PartFile *f,
|
||||
h5part_int64_t i,
|
||||
h5part_int64_t j,
|
||||
h5part_int64_t k
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5Block3dWriteScalarField (
|
||||
H5PartFile *f,
|
||||
const char *name,
|
||||
const h5part_float64_t *data
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5Block3dReadScalarField (
|
||||
H5PartFile *f,
|
||||
const char *name,
|
||||
h5part_float64_t *data
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5BlockGetNumFields (
|
||||
H5PartFile *f
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5BlockGetFieldInfo (
|
||||
H5PartFile *f,
|
||||
const h5part_int64_t idx,
|
||||
char *name,
|
||||
const h5part_int64_t len_name,
|
||||
h5part_int64_t *grid_rank,
|
||||
h5part_int64_t *grid_dims,
|
||||
h5part_int64_t *field_dims
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5BlockGetFieldInfoByName (
|
||||
H5PartFile *f,
|
||||
const char *field_name,
|
||||
h5part_int64_t *grid_rank,
|
||||
h5part_int64_t *grid_dims,
|
||||
h5part_int64_t *field_dims
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5Block3dGetFieldOrigin (
|
||||
H5PartFile *f,
|
||||
const char *field_name,
|
||||
h5part_float64_t *x_origin,
|
||||
h5part_float64_t *y_origin,
|
||||
h5part_float64_t *z_origin
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5Block3dSetFieldOrigin (
|
||||
H5PartFile *f,
|
||||
const char *field_name,
|
||||
const h5part_float64_t x_origin,
|
||||
const h5part_float64_t y_origin,
|
||||
const h5part_float64_t z_origin
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5Block3dGetFieldSpacing (
|
||||
H5PartFile *f,
|
||||
const char *field_name,
|
||||
h5part_float64_t *x_spacing,
|
||||
h5part_float64_t *y_spacing,
|
||||
h5part_float64_t *z_spacing
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5Block3dSetFieldSpacing (
|
||||
H5PartFile *f,
|
||||
const char *field_name,
|
||||
const h5part_float64_t x_spacing,
|
||||
const h5part_float64_t y_spacing,
|
||||
const h5part_float64_t z_spacing
|
||||
);
|
||||
|
||||
|
||||
|
||||
h5part_int64_t
|
||||
H5Block3dWrite3dVectorField (
|
||||
H5PartFile *f,
|
||||
const char *name,
|
||||
const h5part_float64_t *xval,
|
||||
const h5part_float64_t *yval,
|
||||
const h5part_float64_t *zval
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5Block3dRead3dVectorField (
|
||||
H5PartFile *f,
|
||||
const char *name,
|
||||
h5part_float64_t *xval,
|
||||
h5part_float64_t *yval,
|
||||
h5part_float64_t *zval
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5BlockWriteFieldAttrib (
|
||||
H5PartFile *f,
|
||||
const char *field_name,
|
||||
const char *attrib_name,
|
||||
const h5part_int64_t attrib_type,
|
||||
const void *attrib_value,
|
||||
const h5part_int64_t attrib_nelem
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5BlockWriteFieldAttribString (
|
||||
H5PartFile *f,
|
||||
const char *field_name,
|
||||
const char *attrib_name,
|
||||
const char *attrib_value
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5BlockGetNumFieldAttribs (
|
||||
H5PartFile *f,
|
||||
const char *field_name
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5BlockGetFieldAttribInfo (
|
||||
H5PartFile *f,
|
||||
const char *field_name,
|
||||
const h5part_int64_t attrib_idx,
|
||||
char *attrib_name,
|
||||
const h5part_int64_t len_of_attrib_name,
|
||||
h5part_int64_t *attrib_type,
|
||||
h5part_int64_t *attrib_nelem
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5BlockReadFieldAttrib (
|
||||
H5PartFile *f,
|
||||
const char *field_name,
|
||||
const char *attrib_name,
|
||||
void *attrib_value
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5BlockHasFieldData (
|
||||
H5PartFile *f
|
||||
);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,51 +0,0 @@
|
||||
#ifndef __H5BLOCKERRORS_H
|
||||
#define __H5BLOCKERRORS_H
|
||||
|
||||
#define _err_handler H5PartGetErrorHandler()
|
||||
|
||||
#define CHECK_LAYOUT( f ) \
|
||||
if ( ! f->block->have_layout ) \
|
||||
return (*_err_handler) ( \
|
||||
_H5Part_get_funcname(), \
|
||||
H5PART_ERR_LAYOUT, \
|
||||
"No layout defined." )
|
||||
|
||||
#define HANDLE_H5PART_LAYOUT_ERR \
|
||||
(*_err_handler) ( \
|
||||
_H5Part_get_funcname(), \
|
||||
H5PART_ERR_LAYOUT, \
|
||||
"Bad layout." );
|
||||
|
||||
#define HANDLE_H5PART_NOENT_ERR( name ) \
|
||||
(*_err_handler) ( \
|
||||
_H5Part_get_funcname(), \
|
||||
H5PART_ERR_NOENT, \
|
||||
"Object \"%s\" doesn't exists.", name );
|
||||
|
||||
#define HANDLE_H5PART_DATASET_RANK_ERR( m, n ) \
|
||||
(*_err_handler) ( \
|
||||
_H5Part_get_funcname(), \
|
||||
H5PART_ERR_INVAL, \
|
||||
"Wrong rank of dataset: Is %d, but should be %d", \
|
||||
m, n );
|
||||
|
||||
#define HANDLE_H5PART_GROUP_EXISTS_ERR( name ) \
|
||||
(*_err_handler) ( \
|
||||
_H5Part_get_funcname(), \
|
||||
H5PART_ERR_INVAL, \
|
||||
"Group \"%s\" already exists", name )
|
||||
#define HANDLE_H5S_CREATE_SIMPLE_3D_ERR( dims ) \
|
||||
(*_err_handler) ( \
|
||||
_H5Part_get_funcname(), \
|
||||
H5PART_ERR_HDF5, \
|
||||
"Cannot create 3d dataspace with dimension sizes " \
|
||||
"\"(%lld,%lld,%lld)\".", \
|
||||
(long long)dims[0], (long long)dims[1], (long long)dims[2] );
|
||||
|
||||
#define HANDLE_H5S_GET_SIMPLE_EXTENT_DIMS_ERR \
|
||||
(*_err_handler) ( \
|
||||
_H5Part_get_funcname(), \
|
||||
H5PART_ERR_HDF5, \
|
||||
"Cannot get dimension sizes of dataset" );
|
||||
|
||||
#endif
|
||||
@@ -1,581 +0,0 @@
|
||||
#include "H5Part.h"
|
||||
#include "H5PartPrivate.h"
|
||||
#include "H5Block.h"
|
||||
#include "Underscore.h"
|
||||
|
||||
#if defined(F77_SINGLE_UNDERSCORE)
|
||||
#define F77NAME(a,b) a
|
||||
#elif defined(F77_CRAY_UNDERSCORE)
|
||||
#define F77NAME(a,b) b
|
||||
#elif defined(F77_NO_UNDERSCORE)
|
||||
#else
|
||||
#error Error, no way to determine how to construct fortran bindings
|
||||
#endif
|
||||
|
||||
#if ! defined(F77_NO_UNDERSCORE)
|
||||
|
||||
#define h5bl_define3dlayout F77NAME ( \
|
||||
h5bl_define3dlayout_, \
|
||||
H5BL_DEFINE3DLAYOUT )
|
||||
#define h5bl_get_partition_of_proc F77NAME ( \
|
||||
h5bl_get_partition_of_proc_, \
|
||||
H5BL_GET_PARTITION_OF_PROC )
|
||||
#define h5bl_get_reduced_partition_of_proc F77NAME ( \
|
||||
h5bl_get_reduced_partition_of_proc_,\
|
||||
H5BL_GET_REDUCED_PARTITION_OF_PROC )
|
||||
#define h5bl_get_proc_of F77NAME ( \
|
||||
h5bl_get_proc_of_, \
|
||||
H5BL_GET_PROC_OF )
|
||||
#define h5bl_3d_read_scalar_field F77NAME ( \
|
||||
h5bl_3d_read_scalar_field_, \
|
||||
H5BL_3D_READ_SCALAR_FIELD )
|
||||
#define h5bl_3d_write_scalar_field F77NAME ( \
|
||||
h5bl_3d_write_scalar_field_, \
|
||||
H5BL_3D_WRITE_SCALAR_FIELD )
|
||||
#define h5bl_3d_read_3dvector_field F77NAME ( \
|
||||
h5bl_3d_read_3dvector_field_, \
|
||||
H5BL_3D_READ_3DVECTOR_FIELD )
|
||||
#define h5bl_3d_write_3dvector_field F77NAME ( \
|
||||
h5bl_3d_write_3dvector_field_, \
|
||||
H5BL_3D_WRITE_3DVECTOR_FIELD )
|
||||
#define h5bl_getnumfields F77NAME ( \
|
||||
h5bl_getnumfields_, \
|
||||
H5BL_GETNUMFIELDS )
|
||||
#define h5bl_getfieldinfo F77NAME ( \
|
||||
h5bl_getfieldinfo_, \
|
||||
H5BL_GETFIELDINFO )
|
||||
#define h5bl_writefieldattrib_r8 F77NAME ( \
|
||||
h5bl_writefieldattrib_r8_, \
|
||||
H5BL_WRITEFIELDATTRIB_R8 )
|
||||
#define h5bl_writefieldattrib_i8 F77NAME ( \
|
||||
h5bl_writefieldattrib_i8_, \
|
||||
H5BL_WRITEFIELDATTRIB_I8 )
|
||||
#define h5bl_writefieldattrib_string F77NAME ( \
|
||||
h5bl_writefieldattrib_string_, \
|
||||
H5BL_WRITEFIELDATTRIB_STRING )
|
||||
#define h5bl_getnfieldattribs F77NAME ( \
|
||||
h5bl_getnfieldattribs_, \
|
||||
H5BL_GETNFIELDATTRIBS )
|
||||
#define h5bl_getfieldattribinfo F77NAME ( \
|
||||
h5bl_getfieldattribinfo_, \
|
||||
h5bl_getfieldattribinfo )
|
||||
#define h5bl_readfieldattrib_i8 F77NAME ( \
|
||||
h5bl_readfieldattrib_i8_, \
|
||||
H5BL_READFIELDATTRIB_I8 )
|
||||
#define h5bl_readfieldattrib_r8 F77NAME ( \
|
||||
h5bl_readfieldattrib_r8_, \
|
||||
H5BL_READFIELDATTRIB_R8 )
|
||||
#define h5bl_readfieldattrib_string F77NAME ( \
|
||||
h5bl_readfieldattrib_string_, \
|
||||
H5BL_READFIELDATTRIB_STRING )
|
||||
#define h5bl_has_fielddata F77NAME ( \
|
||||
h5bl_has_fielddata_, \
|
||||
H5BL_HAS_FIELDDATA )
|
||||
#define h5bl_3d_set_field_spacing F77NAME ( \
|
||||
h5bl_3d_set_field_spacing_, \
|
||||
H5BL_3D_SET_FIELD_SPACING )
|
||||
#define h5bl_3d_get_field_spacing F77NAME ( \
|
||||
h5bl_3d_get_field_spacing_, \
|
||||
H5BL_3D_GET_FIELD_SPACING )
|
||||
#define h5bl_3d_set_field_origin F77NAME ( \
|
||||
h5bl_3d_set_field_origin_, \
|
||||
H5BL_3D_SET_FIELD_ORIGIN )
|
||||
#define h5bl_3d_get_field_origin F77NAME ( \
|
||||
h5bl_3d_get_field_origin_, \
|
||||
H5BL_3D_GET_FIELD_origin )
|
||||
#endif
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_define3dlayout (
|
||||
h5part_int64_t *f,
|
||||
const h5part_int64_t *i_start, /*!< start index of i */
|
||||
const h5part_int64_t *i_end, /*!< end index of i */
|
||||
const h5part_int64_t *j_start, /*!< start index of j */
|
||||
const h5part_int64_t *j_end, /*!< end index of j */
|
||||
const h5part_int64_t *k_start, /*!< start index of k */
|
||||
const h5part_int64_t *k_end /*!< end index of k */
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
return H5BlockDefine3DFieldLayout (
|
||||
filehandle,
|
||||
*i_start-1, *i_end-1,
|
||||
*j_start-1, *j_end-1,
|
||||
*k_start-1, *k_end-1 );
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_get_partition_of_proc (
|
||||
h5part_int64_t *f, /*!< file handle */
|
||||
const h5part_int64_t *proc,
|
||||
h5part_int64_t *i_start, /*!< start index of i */
|
||||
h5part_int64_t *i_end, /*!< end index of i */
|
||||
h5part_int64_t *j_start, /*!< start index of j */
|
||||
h5part_int64_t *j_end, /*!< end index of j */
|
||||
h5part_int64_t *k_start, /*!< start index of k */
|
||||
h5part_int64_t *k_end /*!< end index of k */
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
h5part_int64_t herr = H5Block3dGetPartitionOfProc (
|
||||
filehandle,
|
||||
*proc,
|
||||
i_start, i_end, j_start, j_end, k_start, k_end );
|
||||
if ( herr < 0 ) return herr;
|
||||
|
||||
(*i_start)++;
|
||||
(*i_end)++;
|
||||
(*j_start)++;
|
||||
(*j_end)++;
|
||||
(*k_start)++;
|
||||
(*k_end)++;
|
||||
|
||||
return H5PART_SUCCESS;
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_get_reduced_partition_of_proc (
|
||||
h5part_int64_t *f,
|
||||
const h5part_int64_t *proc,
|
||||
h5part_int64_t *i_start,
|
||||
h5part_int64_t *i_end,
|
||||
h5part_int64_t *j_start,
|
||||
h5part_int64_t *j_end,
|
||||
h5part_int64_t *k_start,
|
||||
h5part_int64_t *k_end
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
h5part_int64_t herr = H5Block3dGetReducedPartitionOfProc (
|
||||
filehandle,
|
||||
*proc,
|
||||
i_start, i_end, j_start, j_end, k_start, k_end );
|
||||
if ( herr < 0 ) return herr;
|
||||
|
||||
(*i_start)++;
|
||||
(*i_end)++;
|
||||
(*j_start)++;
|
||||
(*j_end)++;
|
||||
(*k_start)++;
|
||||
(*k_end)++;
|
||||
|
||||
return H5PART_SUCCESS;
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_get_proc_of (
|
||||
h5part_int64_t *f,
|
||||
const h5part_int64_t *i,
|
||||
const h5part_int64_t *j,
|
||||
const h5part_int64_t *k
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
return H5Block3dGetProcOf ( filehandle, (*i)-1, (*j)-1, (*k)-1 );
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_3d_read_scalar_field (
|
||||
h5part_int64_t *f,
|
||||
const char *field_name,
|
||||
h5part_float64_t *data,
|
||||
const int l_field_name
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
||||
|
||||
h5part_int64_t herr = H5Block3dReadScalarField (
|
||||
filehandle, field_name2, data );
|
||||
|
||||
free ( field_name2 );
|
||||
return herr;
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_3d_write_scalar_field (
|
||||
h5part_int64_t *f,
|
||||
const char *field_name,
|
||||
const h5part_float64_t *data,
|
||||
const int l_field_name
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
||||
|
||||
h5part_int64_t herr = H5Block3dWriteScalarField (
|
||||
filehandle, field_name2, data );
|
||||
|
||||
free ( field_name2 );
|
||||
return herr;
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_3d_read_3dvector_field (
|
||||
h5part_int64_t *f, /*!< file handle */
|
||||
const char *field_name, /*!< name of the data set */
|
||||
h5part_float64_t *xval, /*!< array of x component data */
|
||||
h5part_float64_t *yval, /*!< array of y component data */
|
||||
h5part_float64_t *zval, /*!< array of z component data */
|
||||
const int l_field_name
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
||||
|
||||
h5part_int64_t herr = H5Block3dRead3dVectorField (
|
||||
filehandle, field_name2, xval, yval, zval );
|
||||
|
||||
free ( field_name2 );
|
||||
return herr;
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_3d_write_3dvector_field (
|
||||
h5part_int64_t *f, /*!< file handle */
|
||||
const char *field_name, /*!< name of the data set */
|
||||
const h5part_float64_t *xval, /*!< array of x component data */
|
||||
const h5part_float64_t *yval, /*!< array of y component data */
|
||||
const h5part_float64_t *zval, /*!< array of z component data */
|
||||
const int l_field_name
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
||||
|
||||
h5part_int64_t herr = H5Block3dWrite3dVectorField (
|
||||
filehandle, field_name2, xval, yval, zval );
|
||||
|
||||
free ( field_name2 );
|
||||
return herr;
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_getnumfields (
|
||||
h5part_int64_t *f /*!< file handle */
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
return H5BlockGetNumFields ( filehandle );
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_getfieldinfo (
|
||||
h5part_int64_t *f,
|
||||
const h5part_int64_t *idx,
|
||||
char *field_name,
|
||||
h5part_int64_t *grid_rank,
|
||||
h5part_int64_t *grid_dims,
|
||||
h5part_int64_t *field_dims,
|
||||
const int l_field_name
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
h5part_int64_t herr = H5BlockGetFieldInfo (
|
||||
filehandle, *idx, field_name, l_field_name,
|
||||
grid_rank, grid_dims, field_dims );
|
||||
_H5Part_strc2for ( field_name, l_field_name );
|
||||
return herr;
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_writefieldattrib_r8 (
|
||||
h5part_int64_t *f,
|
||||
const char *field_name,
|
||||
const char *attrib_name,
|
||||
const h5part_float64_t *attrib_value,
|
||||
const h5part_int64_t *attrib_nelem,
|
||||
const int l_field_name,
|
||||
const int l_attrib_name
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
||||
char *attrib_name2 =_H5Part_strdupfor2c ( attrib_name, l_attrib_name );
|
||||
|
||||
h5part_int64_t herr = H5BlockWriteFieldAttrib (
|
||||
filehandle, field_name2, attrib_name2, H5PART_FLOAT64,
|
||||
attrib_value, *attrib_nelem );
|
||||
|
||||
free ( field_name2 );
|
||||
free ( attrib_name2 );
|
||||
return herr;
|
||||
}
|
||||
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_writefieldattrib_i8 (
|
||||
h5part_int64_t *f,
|
||||
const char *field_name,
|
||||
const char *attrib_name,
|
||||
const h5part_int64_t *attrib_value,
|
||||
const h5part_int64_t *attrib_nelem,
|
||||
const int l_field_name,
|
||||
const int l_attrib_name
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
||||
char *attrib_name2 =_H5Part_strdupfor2c ( attrib_name, l_attrib_name );
|
||||
|
||||
h5part_int64_t herr = H5BlockWriteFieldAttrib (
|
||||
filehandle, field_name2, attrib_name2, H5PART_INT64,
|
||||
attrib_value, *attrib_nelem );
|
||||
|
||||
free ( field_name2 );
|
||||
free ( attrib_name2 );
|
||||
return herr;
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_writefieldattrib_string (
|
||||
h5part_int64_t *f,
|
||||
const char *field_name,
|
||||
const char *attrib_name,
|
||||
const char *attrib_value,
|
||||
const int l_field_name,
|
||||
const int l_attrib_name,
|
||||
const int l_attrib_value
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
char *field_name2 =_H5Part_strdupfor2c ( field_name, l_field_name );
|
||||
char *attrib_name2=_H5Part_strdupfor2c ( attrib_name, l_attrib_name );
|
||||
char *attrib_value2=_H5Part_strdupfor2c( attrib_value,l_attrib_value );
|
||||
|
||||
h5part_int64_t herr = H5BlockWriteFieldAttribString (
|
||||
filehandle, field_name2, attrib_name2, attrib_value2 );
|
||||
|
||||
free ( field_name2 );
|
||||
free ( attrib_name2 );
|
||||
free ( attrib_value2 );
|
||||
return herr;
|
||||
}
|
||||
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_getnfieldattribs (
|
||||
h5part_int64_t *f,
|
||||
const char *field_name,
|
||||
const int l_field_name
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
||||
|
||||
h5part_int64_t herr = H5BlockGetNumFieldAttribs (
|
||||
filehandle, field_name2 );
|
||||
|
||||
free ( field_name2 );
|
||||
return herr;
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_getfieldattribinfo (
|
||||
h5part_int64_t *f,
|
||||
const char *field_name,
|
||||
const h5part_int64_t *attrib_idx,
|
||||
char *attrib_name,
|
||||
h5part_int64_t *attrib_nelem,
|
||||
const int l_field_name,
|
||||
const int l_attrib_name
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
h5part_int64_t attrib_type;
|
||||
|
||||
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
||||
|
||||
h5part_int64_t herr = H5BlockGetFieldAttribInfo (
|
||||
filehandle, field_name2, *attrib_idx,
|
||||
attrib_name, l_attrib_name,
|
||||
&attrib_type,
|
||||
attrib_nelem );
|
||||
|
||||
_H5Part_strc2for ( attrib_name, l_attrib_name );
|
||||
|
||||
free ( field_name2 );
|
||||
return herr;
|
||||
}
|
||||
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_readfieldattrib_i8 (
|
||||
h5part_int64_t *f,
|
||||
const char *field_name,
|
||||
const char *attrib_name,
|
||||
h5part_int64_t *attrib_value,
|
||||
const int l_field_name,
|
||||
const int l_attrib_name
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
char *field_name2 =_H5Part_strdupfor2c ( field_name, l_field_name );
|
||||
char *attrib_name2=_H5Part_strdupfor2c ( attrib_name, l_attrib_name );
|
||||
|
||||
h5part_int64_t herr = H5BlockReadFieldAttrib (
|
||||
filehandle, field_name2, attrib_name2, attrib_value );
|
||||
|
||||
free ( field_name2 );
|
||||
free ( attrib_name2 );
|
||||
return herr;
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_readfieldattrib_r8 (
|
||||
h5part_int64_t *f,
|
||||
const char *field_name,
|
||||
const char *attrib_name,
|
||||
h5part_float64_t *attrib_value,
|
||||
const int l_field_name,
|
||||
const int l_attrib_name
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
char *field_name2 =_H5Part_strdupfor2c ( field_name, l_field_name );
|
||||
char *attrib_name2=_H5Part_strdupfor2c ( attrib_name, l_attrib_name );
|
||||
|
||||
h5part_int64_t herr = H5BlockReadFieldAttrib (
|
||||
filehandle, field_name2, attrib_name2, attrib_value );
|
||||
|
||||
free ( field_name2 );
|
||||
free ( attrib_name2 );
|
||||
return herr;
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_readfieldattrib_string (
|
||||
h5part_int64_t *f,
|
||||
const char *field_name,
|
||||
const char *attrib_name,
|
||||
char *attrib_value,
|
||||
const int l_field_name,
|
||||
const int l_attrib_name,
|
||||
const int l_attrib_value
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
char *field_name2 =_H5Part_strdupfor2c ( field_name, l_field_name );
|
||||
char *attrib_name2=_H5Part_strdupfor2c ( attrib_name, l_attrib_name );
|
||||
|
||||
h5part_int64_t herr = H5BlockReadFieldAttrib (
|
||||
filehandle, field_name2, attrib_name2, attrib_value );
|
||||
|
||||
_H5Part_strc2for ( attrib_value, l_attrib_value );
|
||||
|
||||
free ( field_name2 );
|
||||
free ( attrib_name2 );
|
||||
return herr;
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5bl_has_fielddata (
|
||||
h5part_int64_t *f
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
return H5BlockHasFieldData ( filehandle );
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5b_3d_get_field_spacing (
|
||||
h5part_int64_t *f,
|
||||
const char *field_name,
|
||||
h5part_float64_t *x,
|
||||
h5part_float64_t *y,
|
||||
h5part_float64_t *z,
|
||||
const int l_field_name
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
||||
|
||||
h5part_int64_t herr = H5Block3dGetFieldSpacing (
|
||||
filehandle, field_name2, x, y, z );
|
||||
|
||||
free ( field_name2 );
|
||||
return herr;
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5b_3d_set_field_spacing (
|
||||
h5part_int64_t *f,
|
||||
const char *field_name,
|
||||
const h5part_float64_t *x,
|
||||
const h5part_float64_t *y,
|
||||
const h5part_float64_t *z,
|
||||
const int l_field_name
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
||||
|
||||
h5part_int64_t herr = H5Block3dSetFieldSpacing (
|
||||
filehandle, field_name2, *x, *y, *z );
|
||||
|
||||
free ( field_name2 );
|
||||
return herr;
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5b_3d_get_field_origin (
|
||||
h5part_int64_t *f,
|
||||
const char *field_name,
|
||||
h5part_float64_t *x,
|
||||
h5part_float64_t *y,
|
||||
h5part_float64_t *z,
|
||||
const int l_field_name
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
||||
|
||||
h5part_int64_t herr = H5Block3dGetFieldOrigin (
|
||||
filehandle, field_name2, x, y, z );
|
||||
|
||||
free ( field_name2 );
|
||||
return herr;
|
||||
}
|
||||
|
||||
h5part_int64_t
|
||||
h5b_3d_set_field_origin (
|
||||
h5part_int64_t *f,
|
||||
const char *field_name,
|
||||
const h5part_float64_t *x,
|
||||
const h5part_float64_t *y,
|
||||
const h5part_float64_t *z,
|
||||
const int l_field_name
|
||||
) {
|
||||
|
||||
H5PartFile *filehandle = (H5PartFile*)(size_t)*f;
|
||||
|
||||
char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name );
|
||||
|
||||
h5part_int64_t herr = H5Block3dSetFieldOrigin (
|
||||
filehandle, field_name2, *x, *y, *z );
|
||||
|
||||
free ( field_name2 );
|
||||
return herr;
|
||||
}
|
||||
@@ -1,176 +0,0 @@
|
||||
INTERFACE
|
||||
INTEGER*8 FUNCTION h5bl_define3dlayout ( filehandle, i_start, i_end, j_start, j_end, k_start, k_end )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
INTEGER*8, INTENT(IN) :: i_start
|
||||
INTEGER*8, INTENT(IN) :: i_end
|
||||
INTEGER*8, INTENT(IN) :: j_start
|
||||
INTEGER*8, INTENT(IN) :: j_end
|
||||
INTEGER*8, INTENT(IN) :: k_start
|
||||
INTEGER*8, INTENT(IN) :: k_end
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_get_partition_of_proc ( filehandle, proc, i_start, i_end, j_start, j_end, k_start, k_end )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
INTEGER*8, INTENT(OUT) :: proc
|
||||
INTEGER*8, INTENT(OUT) :: i_start
|
||||
INTEGER*8, INTENT(OUT) :: i_end
|
||||
INTEGER*8, INTENT(OUT) :: j_start
|
||||
INTEGER*8, INTENT(OUT) :: j_end
|
||||
INTEGER*8, INTENT(OUT) :: k_start
|
||||
INTEGER*8, INTENT(OUT) :: k_end
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_get_reduced_partition_of_proc ( filehandle, proc, i_start, i_end, j_start, j_end, k_start, k_end )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
INTEGER*8, INTENT(OUT) :: proc
|
||||
INTEGER*8, INTENT(OUT) :: i_start
|
||||
INTEGER*8, INTENT(OUT) :: i_end
|
||||
INTEGER*8, INTENT(OUT) :: j_start
|
||||
INTEGER*8, INTENT(OUT) :: j_end
|
||||
INTEGER*8, INTENT(OUT) :: k_start
|
||||
INTEGER*8, INTENT(OUT) :: k_end
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_get_proc_of ( filehandle, i, j, k )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
INTEGER*8, INTENT(IN) :: i
|
||||
INTEGER*8, INTENT(IN) :: j
|
||||
INTEGER*8, INTENT(IN) :: k
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_3d_read_scalar_field ( filehandle, name, data )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
CHARACTER(LEN=*), INTENT(IN) :: name
|
||||
REAL*8, INTENT(OUT) :: data(*)
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_3d_write_scalar_field ( filehandle, name, data )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
CHARACTER(LEN=*), INTENT(IN) :: name
|
||||
REAL*8, INTENT(IN) :: data(*)
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_3d_read_3dvector_field ( filehandle, name, x, y, z )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
CHARACTER(LEN=*), INTENT(IN) :: name
|
||||
REAL*8, INTENT(OUT) :: x(*)
|
||||
REAL*8, INTENT(OUT) :: y(*)
|
||||
REAL*8, INTENT(OUT) :: z(*)
|
||||
END FUNCTION
|
||||
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_3d_write_3dvector_field ( filehandle, name, x, y, z )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
CHARACTER(LEN=*), INTENT(IN) :: name
|
||||
REAL*8, INTENT(IN) :: x(*)
|
||||
REAL*8, INTENT(IN) :: y(*)
|
||||
REAL*8, INTENT(IN) :: z(*)
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_getnumfields ( filehandle )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_getfieldinfo ( filehandle, idx, field_name, grid_rank, grid_dims, field_dims )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
INTEGER*8, INTENT(IN) :: idx
|
||||
CHARACTER(LEN=*), INTENT(OUT) :: field_name
|
||||
INTEGER*8, INTENT(OUT) :: grid_rank
|
||||
INTEGER*8, INTENT(OUT) :: grid_dims(*)
|
||||
INTEGER*8, INTENT(OUT) :: field_dims
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_writefieldattrib_r8 ( filehandle, field_name, attrib_name, attrib_value, attrib_nelem)
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field
|
||||
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute
|
||||
REAL*8, INTENT(IN) :: attrib_value(*) ! The array of data to write into the attribute
|
||||
INTEGER*8, INTENT(IN) :: attrib_nelem ! Number of elements in the attrib array
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_writefieldattrib_i8 (filehandle, field_name, attrib_name,attrib_value,attrib_nelem)
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field
|
||||
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute
|
||||
INTEGER*8, INTENT(IN) :: attrib_value(*) ! The array of data to write into the attribute
|
||||
INTEGER*8, INTENT(IN) :: attrib_nelem ! Number of elements in the attrib array
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_writefieldattrib_string ( filehandle, field_name, attrib_name, attrib_value )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field
|
||||
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute
|
||||
CHARACTER(LEN=*), INTENT(IN) :: attrib_value ! The array of data to write into the attribute
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_getnfieldattribs ( filehandle, field_name )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_getfieldattribinfo ( filehandle, field_name, idx, attrib_name, attrib_nelem)
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field
|
||||
INTEGER*8, INTENT(IN) :: idx ! index of the attribute being queried
|
||||
CHARACTER(LEN=*), INTENT(OUT):: attrib_name ! The name of the attribute
|
||||
INTEGER*8, INTENT(OUT):: attrib_nelem ! Number of elements in the attrib array
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_readfieldattrib_i8 ( filehandle, field_name, attrib_name, attrib_value )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field
|
||||
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read
|
||||
INTEGER*8, INTENT(OUT):: attrib_value(*)! the attribute data will be read into this array
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_readfieldattrib_r8 ( filehandle, field_name, attrib_name, attrib_value )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field
|
||||
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read
|
||||
REAL*8, INTENT(OUT):: attrib_value(*)! the attribute data will be read into this array
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_readfieldattrib_string ( filehandle, field_name, attrib_name, attrib_value )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field
|
||||
CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read
|
||||
CHARACTER(LEN=*), INTENT(IN) :: attrib_value ! The array of data to write into the attribute
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_has_fielddata ( filehandle )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_3d_get_field_spacing ( filehandle, name, x, y, z )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
CHARACTER(LEN=*), INTENT(IN) :: name
|
||||
REAL*8, INTENT(OUT) :: x
|
||||
REAL*8, INTENT(OUT) :: y
|
||||
REAL*8, INTENT(OUT) :: z
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_3d_set_field_spacing ( filehandle, name, x, y, z )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
CHARACTER(LEN=*), INTENT(IN) :: name
|
||||
REAL*8, INTENT(IN) :: x
|
||||
REAL*8, INTENT(IN) :: y
|
||||
REAL*8, INTENT(IN) :: z
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_3d_get_field_origin ( filehandle, name, x, y, z )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
CHARACTER(LEN=*), INTENT(IN) :: name
|
||||
REAL*8, INTENT(OUT) :: x
|
||||
REAL*8, INTENT(OUT) :: y
|
||||
REAL*8, INTENT(OUT) :: z
|
||||
END FUNCTION
|
||||
|
||||
INTEGER*8 FUNCTION h5bl_3d_set_field_origin ( filehandle, name, x, y, z )
|
||||
INTEGER*8, INTENT(IN) :: filehandle
|
||||
CHARACTER(LEN=*), INTENT(IN) :: name
|
||||
REAL*8, INTENT(IN) :: x
|
||||
REAL*8, INTENT(IN) :: y
|
||||
REAL*8, INTENT(IN) :: z
|
||||
END FUNCTION
|
||||
|
||||
END INTERFACE
|
||||
@@ -1,6 +0,0 @@
|
||||
#ifndef __H5BLOCKPRIVATE_H
|
||||
#define __H5BLOCKPRIVATE_H
|
||||
|
||||
#define H5BLOCK_GROUPNAME_BLOCK "Block"
|
||||
|
||||
#endif
|
||||
@@ -1,32 +0,0 @@
|
||||
#ifndef __H5BLOCKTYPES_H
|
||||
#define __H5BLOCKTYPES_H
|
||||
|
||||
struct H5BlockPartition {
|
||||
h5part_int64_t i_start;
|
||||
h5part_int64_t i_end;
|
||||
h5part_int64_t j_start;
|
||||
h5part_int64_t j_end;
|
||||
h5part_int64_t k_start;
|
||||
h5part_int64_t k_end;
|
||||
};
|
||||
|
||||
struct H5BlockStruct {
|
||||
h5part_int64_t timestep;
|
||||
h5part_int64_t i_max;
|
||||
h5part_int64_t j_max;
|
||||
h5part_int64_t k_max;
|
||||
struct H5BlockPartition *user_layout;
|
||||
struct H5BlockPartition *write_layout;
|
||||
int have_layout;
|
||||
|
||||
hid_t shape;
|
||||
hid_t memshape;
|
||||
hid_t diskshape;
|
||||
hid_t blockgroup;
|
||||
hid_t field_group_id;
|
||||
};
|
||||
|
||||
#define H5PART_ERR_LAYOUT -100
|
||||
#define H5PART_ERR_NOENT -101
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,234 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <hdf5.h>
|
||||
#include "H5Part++.hh"
|
||||
|
||||
#include <fstream>
|
||||
#include <iomanip>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
using namespace std;
|
||||
|
||||
#ifdef READTEST
|
||||
|
||||
/*
|
||||
A simple regression test that shows how you use this API
|
||||
to write and read multi-timestep files of particle data.
|
||||
*/
|
||||
#ifdef PARALLEL_IO
|
||||
|
||||
|
||||
#else
|
||||
|
||||
int main(int argc,char **argv){
|
||||
const int sz=5;
|
||||
double x[sz],y[sz],z[sz];
|
||||
long long id[sz];
|
||||
char name[64];
|
||||
H5PartFile *file;
|
||||
int i,t,nt,nds,myproc;
|
||||
int nfattribs,nsattribs;
|
||||
|
||||
const string fn = string(argv[1]);
|
||||
|
||||
cout << "Open " << fn << endl;
|
||||
|
||||
|
||||
file= H5PartOpenFile(fn.c_str(),H5PART_READ);
|
||||
nt=H5PartGetNumSteps(file); /* get number of steps in file */
|
||||
H5PartSetStep(file,0);
|
||||
nds=H5PartGetNumDatasets(file); /* get number of datasets in timestep 0 */
|
||||
|
||||
|
||||
|
||||
puts("\n\n===============================");
|
||||
for(i=0;i<nds;i++){ /* and print out those names */
|
||||
H5PartGetDatasetName(file,i,name,64);
|
||||
printf("\tDataset[%u] name=[%s]\n",
|
||||
i,name);
|
||||
}
|
||||
puts("===============================\n\n");
|
||||
|
||||
nfattribs=H5PartGetNumFileAttribs(file);
|
||||
printf("Number of datasteps in file is %u num file attribs=%d\n",
|
||||
nt,nfattribs);
|
||||
|
||||
H5PartCloseFile(file);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef REGRESSIONTEST
|
||||
|
||||
/*
|
||||
A simple regression test that shows how you use this API
|
||||
to write and read multi-timestep files of particle data.
|
||||
*/
|
||||
#ifdef PARALLEL_IO
|
||||
|
||||
int main(int argc,char *argv[]){
|
||||
int sz=5;
|
||||
double *x,*y,*z;
|
||||
long long *id;
|
||||
char name[64];
|
||||
H5PartFile *file;
|
||||
int i,t,nt,nds;
|
||||
int nprocs,myproc;
|
||||
hid_t gid;
|
||||
MPI_Comm comm=MPI_COMM_WORLD;
|
||||
|
||||
MPI_Init(&argc,&argv);
|
||||
MPI_Comm_size(comm,&nprocs);
|
||||
MPI_Comm_rank(comm,&myproc);
|
||||
|
||||
x=(double*)malloc(sz*nprocs*sizeof(double));
|
||||
y=(double*)malloc(sz*nprocs*sizeof(double));
|
||||
z=(double*)malloc(sz*nprocs*sizeof(double));
|
||||
id=(long long*)malloc(sz*nprocs*sizeof(long long));
|
||||
/* parallel file creation */
|
||||
file=H5PartOpenFileParallel("parttest.h5",H5PART_WRITE,comm);
|
||||
if(!file) {
|
||||
perror("File open failed: exiting!");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
for(t=0;t<5;t++){
|
||||
MPI_Barrier(comm);
|
||||
for(i=0;i<sz;i++) {
|
||||
x[i]=(double)(i+t)+10.0*(double)myproc;
|
||||
y[i]=0.1 + (double)(i+t);
|
||||
z[i]=0.2 + (double)(i+t*10);
|
||||
id[i]=i+sz*myproc;
|
||||
}
|
||||
printf("Proc[%u] Writing timestep %u file=%u\n",myproc,t,file->file);
|
||||
H5PartSetStep(file,t); /* must set the current timestep in file */
|
||||
H5PartSetNumParticles(file,sz); /* then set number of particles to store */
|
||||
/* now write different tuples of data into this timestep of the file */
|
||||
H5PartWriteDataFloat64(file,"x",x);
|
||||
H5PartWriteDataFloat64(file,"y",y);
|
||||
H5PartWriteDataFloat64(file,"z",z);
|
||||
H5PartWriteDataInt64(file,"id",id);
|
||||
}
|
||||
printf("AllDone p[%u]\n",myproc);
|
||||
H5PartCloseFile(file);
|
||||
MPI_Barrier(comm);
|
||||
printf("p[%u:%u] : OK, close file and reopen for reading \n",myproc,nprocs);
|
||||
if(myproc==0){ /* now only proc 0 reads the file serially */
|
||||
file= H5PartOpenFileSerial("parttest.h5",H5PART_READ);
|
||||
nt=H5PartGetNumSteps(file); /* get number of steps in file */
|
||||
H5PartSetStep(file,0);
|
||||
nds=H5PartGetNumDatasets(file); /* get number of datasets in timestep 0 */
|
||||
|
||||
puts("\n\n===============================");
|
||||
for(i=0;i<nds;i++){ /* and print out those names */
|
||||
H5PartGetDatasetName(file,i,name,64);
|
||||
printf("\tDataset[%u] name=[%s]\n",
|
||||
i,name);
|
||||
}
|
||||
puts("===============================\n\n");
|
||||
printf("Number of datasteps in file is %u\n",nt);
|
||||
for(t=0;t<nt;t++){
|
||||
int nparticles;
|
||||
H5PartSetStep(file,t); /* select a timestep */
|
||||
nparticles=(int)H5PartGetNumParticles(file);
|
||||
printf("Step[%u] nparticles this step=%u\n",
|
||||
t,nparticles); /* get num particles this step *
|
||||
H5PartReadParticleStep(file,t,/* do a mongo read of all data this step */
|
||||
x,y,z,id);
|
||||
printf("\tid\t\tx\t\ty\t\tz\n");
|
||||
puts("\t----------------------------------------------------");
|
||||
for(i=0;i<nparticles;i++) {
|
||||
printf("\t%llu\t%f\t%f\t%f\n\n",id[i],x[i],y[i],z[i]);
|
||||
}
|
||||
}
|
||||
H5PartCloseFile(file);
|
||||
}
|
||||
if(x) free(x);
|
||||
if(y) free(y);
|
||||
if(z) free(z);
|
||||
if(id) free(id);
|
||||
MPI_Barrier(comm);
|
||||
fprintf(stderr,"proc[%u]: done\n",myproc);
|
||||
return MPI_Finalize();
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
int main(int argc,char *argv){
|
||||
const int sz=5;
|
||||
double x[sz],y[sz],z[sz];
|
||||
long long id[sz];
|
||||
char name[64];
|
||||
H5PartFile *file;
|
||||
int i,t,nt,nds,myproc;
|
||||
int nfattribs,nsattribs;
|
||||
|
||||
file=H5PartOpenFile("parttest.h5",H5PART_WRITE);
|
||||
if(!file) {
|
||||
perror("File open failed: exiting!");
|
||||
exit(0);
|
||||
}
|
||||
for(t=0;t<5;t++){
|
||||
long long step=t;
|
||||
printf("Writing timestep %u\n",t);
|
||||
for(i=0;i<sz;i++) {
|
||||
x[i]=(double)(i+t);
|
||||
y[i]=0.1 + (double)(i+t);
|
||||
z[i]=0.2 + (double)(i+t);
|
||||
id[i]=i;
|
||||
}
|
||||
H5PartSetStep(file,t); /* must set the current timestep in file */
|
||||
H5PartSetNumParticles(file,sz); /* then set number of particles to store */
|
||||
/* now write different tuples of data into this timestep of the file */
|
||||
H5PartWriteDataFloat64(file,"x",x);
|
||||
H5PartWriteDataFloat64(file,"y",y);
|
||||
H5PartWriteDataFloat64(file,"z",z);
|
||||
H5PartWriteDataInt64(file,"id",id);
|
||||
H5PartWriteStepAttrib(file,"Step",H5T_NATIVE_INT64,&step,1);
|
||||
}
|
||||
H5PartCloseFile(file);
|
||||
printf("OK, close file and reopen for reading\n");
|
||||
file= H5PartOpenFile("parttest.h5",H5PART_READ);
|
||||
nt=H5PartGetNumSteps(file); /* get number of steps in file */
|
||||
H5PartSetStep(file,0);
|
||||
nds=H5PartGetNumDatasets(file); /* get number of datasets in timestep 0 */
|
||||
|
||||
puts("\n\n===============================");
|
||||
for(i=0;i<nds;i++){ /* and print out those names */
|
||||
H5PartGetDatasetName(file,i,name,64);
|
||||
printf("\tDataset[%u] name=[%s]\n",
|
||||
i,name);
|
||||
}
|
||||
puts("===============================\n\n");
|
||||
|
||||
nfattribs=H5PartGetNumFileAttribs(file);
|
||||
printf("Number of datasteps in file is %u num file attribs=%d\n",
|
||||
nt,nfattribs);
|
||||
for(t=0;t<nt;t++){
|
||||
int nparticles;
|
||||
H5PartSetStep(file,t); /* select a timestep */
|
||||
nparticles=(int)H5PartGetNumParticles(file);
|
||||
nsattribs=H5PartGetNumStepAttribs(file);
|
||||
printf("Step[%u] nparticles this step=%u stepattribs=%u\n",
|
||||
t,nparticles,nsattribs); /* get num particles this step */
|
||||
if(nsattribs>0){
|
||||
char attrname[32];
|
||||
H5PartGetStepAttribInfo(file,0,attrname,32,0,0);
|
||||
printf("First Attrib name is [%s]\n",attrname);
|
||||
}
|
||||
H5PartReadParticleStep(file,t,/* do a mongo read of all data this step */
|
||||
x,y,z,id);
|
||||
printf("\tid\t\tx\t\ty\t\tz\n");
|
||||
puts("\t----------------------------------------------------");
|
||||
for(i=0;i<sz;i++) {
|
||||
printf("\t%llu\t%f\t%f\t%f\n\n",id[i],x[i],y[i],z[i]);
|
||||
}
|
||||
}
|
||||
H5PartCloseFile(file);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,219 @@
|
||||
#ifndef _H5Part_HH_
|
||||
#define _H5Part_HH_
|
||||
|
||||
extern "C" {
|
||||
#include "H5Part.h"
|
||||
#ifdef PARALLEL_IO
|
||||
#include <mpi.h>
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Add any C++ specific extensions/implementations/wrappers here */
|
||||
|
||||
/* here is a sample class wrapping of H5Part for C++ usage */
|
||||
|
||||
class H5ParticleFile {
|
||||
H5PartFile *file;
|
||||
long long np;
|
||||
public:
|
||||
H5ParticleFile(const char *filename,const int flags):np(0){
|
||||
this->file=H5PartOpenFile(filename,flags);
|
||||
}
|
||||
|
||||
// H5ParticleFile(const std::string fn,const int flags):np(0){
|
||||
// this->file=H5PartOpenFile(fn.cstr(),flags);
|
||||
//}
|
||||
|
||||
#ifdef PARALLEL_IO
|
||||
H5ParticleFile(const char *filename,const int flags,const MPI_Comm comm):np(0){
|
||||
this->file=H5PartOpenFileParallel(filename,flags,comm);
|
||||
}
|
||||
// H5ParticleFile(const string fn,const int flags,const MPI_Comm comm):np(0){
|
||||
// this->file=H5PartOpenFile(fn.cstr(),flags,comm);
|
||||
//}
|
||||
#endif
|
||||
inline int isValid() { return H5PartFileIsValid(this->file);}
|
||||
|
||||
~H5ParticleFile(){H5PartCloseFile(this->file);}
|
||||
|
||||
inline void setNumParticles(long long nparticles){
|
||||
np=nparticles;
|
||||
H5PartSetNumParticles(file,nparticles);
|
||||
}
|
||||
// get the current step (-1 means step is invalid)
|
||||
inline int step(){ return file->timestep; }
|
||||
// set the current step
|
||||
inline int step(int s){ H5PartSetStep(this->file,s); return file->timestep; }
|
||||
inline int nSteps(){ return H5PartGetNumSteps(this->file);}
|
||||
inline int nFields(){ return H5PartGetNumDatasets(file);}
|
||||
inline int fieldName(int index,char *name,int maxlen){H5PartGetDatasetName(file,index,name,maxlen);}
|
||||
inline long long nParticles(){return H5PartGetNumParticles(file);}
|
||||
inline int write(char *name,double *array){
|
||||
return H5PartWriteDataFloat64(this->file,name,array);
|
||||
}
|
||||
inline int write(char *name,long long *array){
|
||||
return H5PartWriteDataInt64(this->file,name,array);
|
||||
}
|
||||
inline int read(char *name,double *array){
|
||||
return H5PartReadDataFloat64(this->file,name,array);
|
||||
}
|
||||
inline int read(char *name,long long *array){
|
||||
return H5PartReadDataInt64(this->file,name,array);
|
||||
}
|
||||
inline int readStep(int step,
|
||||
double *x,double *y,double *z,
|
||||
double *px,double *py,double *pz,
|
||||
long long *id){
|
||||
return H5PartReadParticleStep(file,step,
|
||||
x,y,z,
|
||||
px,py,pz,
|
||||
id);
|
||||
}
|
||||
|
||||
// Attribute stuff
|
||||
// Info on attributes
|
||||
inline int nStepAttribs(){ return H5PartGetNumStepAttribs(file);}
|
||||
inline void getStepAttribInfo(int idx,char *name,size_t maxsize,
|
||||
hid_t &type,int &nelem){
|
||||
H5PartGetStepAttribInfo(file,idx,name,maxsize,&type,&nelem);
|
||||
}
|
||||
inline int nFileAttribs(){ return H5PartGetNumFileAttribs(file);}
|
||||
inline void getFileAttribInfo(int idx,char *name,size_t maxsize,
|
||||
hid_t &type,int &nelem){
|
||||
H5PartGetFileAttribInfo(file,idx,name,maxsize,&type,&nelem);
|
||||
}
|
||||
// step attribs
|
||||
// int writeStepAttrib(char *key,string *valuestring){
|
||||
// return H5PartWriteStepAttribString(file,key,valuestring.c_str());
|
||||
//}
|
||||
inline int writeStepAttrib(char *key,char *valuestring){
|
||||
return H5PartWriteStepAttribString(file,key,valuestring);
|
||||
}
|
||||
inline int writeStepAttrib(char *key,double *value,int nelem=1){
|
||||
return H5PartWriteStepAttrib(file,key,H5T_NATIVE_DOUBLE,value,nelem);
|
||||
}
|
||||
inline int writeStepAttrib(char *key,float *value,int nelem=1){
|
||||
return H5PartWriteStepAttrib(file,key,H5T_NATIVE_FLOAT,value,nelem);}
|
||||
inline int writeStepAttrib(char *key,int *value,int nelem=1){
|
||||
return H5PartWriteStepAttrib(file,key,H5T_NATIVE_INT,value,nelem);}
|
||||
inline int writeStepAttrib(char *key,long long *value,int nelem=1){
|
||||
return H5PartWriteStepAttrib(file,key,H5T_NATIVE_INT64,value,nelem);}
|
||||
inline void readStepAttrib(char *key,void *value){
|
||||
H5PartReadStepAttrib(file,key,value);
|
||||
}
|
||||
// FileAttribs
|
||||
// Attribute stuff
|
||||
// int writeFileAttrib(char *key,string *valuestring){
|
||||
// return H5PartWriteFileAttribString(file,key,valuestring.c_str());
|
||||
//}
|
||||
inline int writeFileAttrib(char *key,char *valuestring){
|
||||
return H5PartWriteFileAttribString(file,key,valuestring);
|
||||
}
|
||||
inline int writeFileAttrib(char *key,double *value,int nelem=1){
|
||||
return H5PartWriteFileAttrib(file,key,H5T_NATIVE_DOUBLE,value,nelem);
|
||||
}
|
||||
inline int writeFileAttrib(char *key,float *value,int nelem=1){
|
||||
return H5PartWriteFileAttrib(file,key,H5T_NATIVE_FLOAT,value,nelem);}
|
||||
inline int writeFileAttrib(char *key,int *value,int nelem=1){
|
||||
return H5PartWriteFileAttrib(file,key,H5T_NATIVE_INT,value,nelem);}
|
||||
inline int writeFileAttrib(char *key,long long *value,int nelem=1){
|
||||
return H5PartWriteFileAttrib(file,key,H5T_NATIVE_INT64,value,nelem);}
|
||||
// read file attribs
|
||||
inline int readFileAttrib(char *key,void *valuestring){
|
||||
H5PartReadFileAttrib(file,key,valuestring);
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
An even wackier idea
|
||||
file.datasets[0:ndatasets-1]
|
||||
file.attributes[0:nfileattribs-1]
|
||||
file.datasets.attributes[0:ndatasetattribs-1]
|
||||
file.datasets.size()
|
||||
|
||||
operators
|
||||
.size()
|
||||
.name()
|
||||
[idx]
|
||||
["name" or "keyname"]
|
||||
|
||||
*/
|
||||
#if 0
|
||||
|
||||
class H5Dataset {
|
||||
const hid_t dataset;
|
||||
char *n; // return as const
|
||||
int d[5]; // simple start
|
||||
int nd;
|
||||
public:
|
||||
H5Dataset(const hid_t ds_handle):dataset(ds_handle){}
|
||||
const char *name() {return n;}
|
||||
int nDims(){ return nd; }
|
||||
const int *dims(){return d;}
|
||||
};
|
||||
|
||||
class H5Attribute{
|
||||
char *n;
|
||||
int sz;
|
||||
public:
|
||||
const char *name(){return n;}
|
||||
int size(){return sz;}
|
||||
}
|
||||
|
||||
|
||||
class H5Group {
|
||||
hid_t gid;
|
||||
int sz;
|
||||
protected:
|
||||
virtual int computesize(){}
|
||||
void setGroup(gid_t g){
|
||||
if(gid>0) H5close(gid);
|
||||
gid=g;
|
||||
// must compute size if available
|
||||
if(gid>0) computesize();
|
||||
else sz=0;
|
||||
}
|
||||
public:
|
||||
// const hid_t gid;
|
||||
H5Group(hid_t g):gid(g){}
|
||||
H5Group():gid(-1){}
|
||||
~H5Group(){if(gid>0) H5Gclose(gid);}
|
||||
int size(){return sz;}
|
||||
};
|
||||
|
||||
class H5AttribGroup : public H5Group{
|
||||
int size;
|
||||
virtual void computesize(){
|
||||
// compute the number of items in this group
|
||||
}
|
||||
public:
|
||||
const H5Attribute &operator[](char *name);
|
||||
const H5Attribute &operator[](int idx);
|
||||
};
|
||||
|
||||
class H5DataGroup : public H5Group {
|
||||
int size;
|
||||
public:
|
||||
const H5Dataset &operator[](int idx);
|
||||
const H5Dataset &operator[](char *name);
|
||||
// no name here??
|
||||
};
|
||||
|
||||
class H5FancyParticles {
|
||||
char *n;
|
||||
hid_t file;
|
||||
public:
|
||||
hid_t mygroup;
|
||||
const H5AttribGroup attributes;
|
||||
const H5DataGroup datasets;
|
||||
H5FancyParticles(char *filename,int readwriteflag);
|
||||
~H5FancyParticles();
|
||||
// int size();// return the number of datasets in file
|
||||
// const char *name(); // return the name of the file?
|
||||
// const H5Dataset &operator[](int idx); // index dataset by integer
|
||||
// const H5Dataset &operator[](char *n); // index dataset by name
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,234 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <hdf5.h>
|
||||
#include "H5Part.hh"
|
||||
|
||||
#include <fstream>
|
||||
#include <iomanip>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
using namespace std;
|
||||
|
||||
#ifdef READTEST
|
||||
|
||||
/*
|
||||
A simple regression test that shows how you use this API
|
||||
to write and read multi-timestep files of particle data.
|
||||
*/
|
||||
#ifdef PARALLEL_IO
|
||||
|
||||
|
||||
#else
|
||||
|
||||
int main(int argc,char **argv){
|
||||
const int sz=5;
|
||||
double x[sz],y[sz],z[sz];
|
||||
long long id[sz];
|
||||
char name[64];
|
||||
H5PartFile *file;
|
||||
int i,t,nt,nds,myproc;
|
||||
int nfattribs,nsattribs;
|
||||
|
||||
const string fn = string(argv[1]);
|
||||
|
||||
cout << "Open " << fn << endl;
|
||||
|
||||
|
||||
file= H5PartOpenFile(fn.c_str(),H5PART_READ);
|
||||
nt=H5PartGetNumSteps(file); /* get number of steps in file */
|
||||
H5PartSetStep(file,0);
|
||||
nds=H5PartGetNumDatasets(file); /* get number of datasets in timestep 0 */
|
||||
|
||||
|
||||
|
||||
puts("\n\n===============================");
|
||||
for(i=0;i<nds;i++){ /* and print out those names */
|
||||
H5PartGetDatasetName(file,i,name,64);
|
||||
printf("\tDataset[%u] name=[%s]\n",
|
||||
i,name);
|
||||
}
|
||||
puts("===============================\n\n");
|
||||
|
||||
nfattribs=H5PartGetNumFileAttribs(file);
|
||||
printf("Number of datasteps in file is %u num file attribs=%d\n",
|
||||
nt,nfattribs);
|
||||
|
||||
H5PartCloseFile(file);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef REGRESSIONTEST
|
||||
|
||||
/*
|
||||
A simple regression test that shows how you use this API
|
||||
to write and read multi-timestep files of particle data.
|
||||
*/
|
||||
#ifdef PARALLEL_IO
|
||||
|
||||
int main(int argc,char *argv[]){
|
||||
int sz=5;
|
||||
double *x,*y,*z;
|
||||
long long *id;
|
||||
char name[64];
|
||||
H5PartFile *file;
|
||||
int i,t,nt,nds;
|
||||
int nprocs,myproc;
|
||||
hid_t gid;
|
||||
MPI_Comm comm=MPI_COMM_WORLD;
|
||||
|
||||
MPI_Init(&argc,&argv);
|
||||
MPI_Comm_size(comm,&nprocs);
|
||||
MPI_Comm_rank(comm,&myproc);
|
||||
|
||||
x=(double*)malloc(sz*nprocs*sizeof(double));
|
||||
y=(double*)malloc(sz*nprocs*sizeof(double));
|
||||
z=(double*)malloc(sz*nprocs*sizeof(double));
|
||||
id=(long long*)malloc(sz*nprocs*sizeof(long long));
|
||||
/* parallel file creation */
|
||||
file=H5PartOpenFileParallel("parttest.h5",H5PART_WRITE,comm);
|
||||
if(!file) {
|
||||
perror("File open failed: exiting!");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
for(t=0;t<5;t++){
|
||||
MPI_Barrier(comm);
|
||||
for(i=0;i<sz;i++) {
|
||||
x[i]=(double)(i+t)+10.0*(double)myproc;
|
||||
y[i]=0.1 + (double)(i+t);
|
||||
z[i]=0.2 + (double)(i+t*10);
|
||||
id[i]=i+sz*myproc;
|
||||
}
|
||||
printf("Proc[%u] Writing timestep %u file=%u\n",myproc,t,file->file);
|
||||
H5PartSetStep(file,t); /* must set the current timestep in file */
|
||||
H5PartSetNumParticles(file,sz); /* then set number of particles to store */
|
||||
/* now write different tuples of data into this timestep of the file */
|
||||
H5PartWriteDataFloat64(file,"x",x);
|
||||
H5PartWriteDataFloat64(file,"y",y);
|
||||
H5PartWriteDataFloat64(file,"z",z);
|
||||
H5PartWriteDataInt64(file,"id",id);
|
||||
}
|
||||
printf("AllDone p[%u]\n",myproc);
|
||||
H5PartCloseFile(file);
|
||||
MPI_Barrier(comm);
|
||||
printf("p[%u:%u] : OK, close file and reopen for reading \n",myproc,nprocs);
|
||||
if(myproc==0){ /* now only proc 0 reads the file serially */
|
||||
file= H5PartOpenFileSerial("parttest.h5",H5PART_READ);
|
||||
nt=H5PartGetNumSteps(file); /* get number of steps in file */
|
||||
H5PartSetStep(file,0);
|
||||
nds=H5PartGetNumDatasets(file); /* get number of datasets in timestep 0 */
|
||||
|
||||
puts("\n\n===============================");
|
||||
for(i=0;i<nds;i++){ /* and print out those names */
|
||||
H5PartGetDatasetName(file,i,name,64);
|
||||
printf("\tDataset[%u] name=[%s]\n",
|
||||
i,name);
|
||||
}
|
||||
puts("===============================\n\n");
|
||||
printf("Number of datasteps in file is %u\n",nt);
|
||||
for(t=0;t<nt;t++){
|
||||
int nparticles;
|
||||
H5PartSetStep(file,t); /* select a timestep */
|
||||
nparticles=(int)H5PartGetNumParticles(file);
|
||||
printf("Step[%u] nparticles this step=%u\n",
|
||||
t,nparticles); /* get num particles this step */
|
||||
H5PartReadParticleStep(file,t, /* do a mongo read of all data this step */
|
||||
x,y,z,x,y,z,id);
|
||||
printf("\tid\t\tx\t\ty\t\tz\n");
|
||||
puts("\t----------------------------------------------------");
|
||||
for(i=0;i<nparticles;i++) {
|
||||
printf("\t%llu\t%f\t%f\t%f\n\n",id[i],x[i],y[i],z[i]);
|
||||
}
|
||||
}
|
||||
H5PartCloseFile(file);
|
||||
}
|
||||
if(x) free(x);
|
||||
if(y) free(y);
|
||||
if(z) free(z);
|
||||
if(id) free(id);
|
||||
MPI_Barrier(comm);
|
||||
fprintf(stderr,"proc[%u]: done\n",myproc);
|
||||
return MPI_Finalize();
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
int main(int argc,char *argv){
|
||||
const int sz=5;
|
||||
double x[sz],y[sz],z[sz];
|
||||
long long id[sz];
|
||||
char name[64];
|
||||
H5PartFile *file;
|
||||
int i,t,nt,nds,myproc;
|
||||
int nfattribs,nsattribs;
|
||||
|
||||
file=H5PartOpenFile("parttest.h5",H5PART_WRITE);
|
||||
if(!file) {
|
||||
perror("File open failed: exiting!");
|
||||
exit(0);
|
||||
}
|
||||
for(t=0;t<5;t++){
|
||||
long long step=t;
|
||||
printf("Writing timestep %u\n",t);
|
||||
for(i=0;i<sz;i++) {
|
||||
x[i]=(double)(i+t);
|
||||
y[i]=0.1 + (double)(i+t);
|
||||
z[i]=0.2 + (double)(i+t);
|
||||
id[i]=i;
|
||||
}
|
||||
H5PartSetStep(file,t); /* must set the current timestep in file */
|
||||
H5PartSetNumParticles(file,sz); /* then set number of particles to store */
|
||||
/* now write different tuples of data into this timestep of the file */
|
||||
H5PartWriteDataFloat64(file,"x",x);
|
||||
H5PartWriteDataFloat64(file,"y",y);
|
||||
H5PartWriteDataFloat64(file,"z",z);
|
||||
H5PartWriteDataInt64(file,"id",id);
|
||||
H5PartWriteStepAttrib(file,"Step",H5T_NATIVE_INT64,&step,1);
|
||||
}
|
||||
H5PartCloseFile(file);
|
||||
printf("OK, close file and reopen for reading\n");
|
||||
file= H5PartOpenFile("parttest.h5",H5PART_READ);
|
||||
nt=H5PartGetNumSteps(file); /* get number of steps in file */
|
||||
H5PartSetStep(file,0);
|
||||
nds=H5PartGetNumDatasets(file); /* get number of datasets in timestep 0 */
|
||||
|
||||
puts("\n\n===============================");
|
||||
for(i=0;i<nds;i++){ /* and print out those names */
|
||||
H5PartGetDatasetName(file,i,name,64);
|
||||
printf("\tDataset[%u] name=[%s]\n",
|
||||
i,name);
|
||||
}
|
||||
puts("===============================\n\n");
|
||||
|
||||
nfattribs=H5PartGetNumFileAttribs(file);
|
||||
printf("Number of datasteps in file is %u num file attribs=%d\n",
|
||||
nt,nfattribs);
|
||||
for(t=0;t<nt;t++){
|
||||
int nparticles;
|
||||
H5PartSetStep(file,t); /* select a timestep */
|
||||
nparticles=(int)H5PartGetNumParticles(file);
|
||||
nsattribs=H5PartGetNumStepAttribs(file);
|
||||
printf("Step[%u] nparticles this step=%u stepattribs=%u\n",
|
||||
t,nparticles,nsattribs); /* get num particles this step */
|
||||
if(nsattribs>0){
|
||||
char attrname[32];
|
||||
H5PartGetStepAttribInfo(file,0,attrname,32,0,0);
|
||||
printf("First Attrib name is [%s]\n",attrname);
|
||||
}
|
||||
H5PartReadParticleStep(file,t,/* do a mongo read of all data this step */
|
||||
x,y,z,x,y,z,id);
|
||||
printf("\tid\t\tx\t\ty\t\tz\n");
|
||||
puts("\t----------------------------------------------------");
|
||||
for(i=0;i<sz;i++) {
|
||||
printf("\t%llu\t%f\t%f\t%f\n\n",id[i],x[i],y[i],z[i]);
|
||||
}
|
||||
}
|
||||
H5PartCloseFile(file);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -7,11 +7,6 @@
|
||||
#ifdef PARALLEL_IO
|
||||
#include <mpi.h>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "H5PartTypes.h"
|
||||
|
||||
|
||||
@@ -21,7 +16,6 @@ extern "C" {
|
||||
#define H5PART_ERR_BADFD -77
|
||||
|
||||
#define H5PART_ERR_INIT -200
|
||||
#define H5PART_ERR_NOENTRY -201
|
||||
|
||||
#define H5PART_ERR_MPI -201
|
||||
#define H5PART_ERR_HDF5 -202
|
||||
@@ -31,16 +25,11 @@ extern "C" {
|
||||
#define H5PART_WRITE 0x02
|
||||
#define H5PART_APPEND 0x03
|
||||
|
||||
|
||||
#define H5PART_INT64 ((h5part_int64_t)H5T_NATIVE_INT64)
|
||||
#define H5PART_FLOAT64 ((h5part_int64_t)H5T_NATIVE_DOUBLE)
|
||||
#define H5PART_CHAR ((h5part_int64_t)H5T_NATIVE_CHAR)
|
||||
|
||||
/*========== File Opening/Closing ===============*/
|
||||
H5PartFile*
|
||||
H5PartOpenFile(
|
||||
const char *filename,
|
||||
const unsigned flags
|
||||
unsigned flags
|
||||
);
|
||||
|
||||
#define H5PartOpenFileSerial(x,y) H5PartOpenFile(x,y)
|
||||
@@ -49,7 +38,7 @@ H5PartOpenFile(
|
||||
H5PartFile*
|
||||
H5PartOpenFileParallel (
|
||||
const char *filename,
|
||||
const unsigned flags,
|
||||
unsigned flags,
|
||||
MPI_Comm communicator
|
||||
);
|
||||
#endif
|
||||
@@ -62,44 +51,31 @@ H5PartCloseFile (
|
||||
|
||||
|
||||
/*============== File Writing Functions ==================== */
|
||||
h5part_int64_t
|
||||
H5PartDefineStepName (
|
||||
H5PartFile *f,
|
||||
const char *name,
|
||||
const h5part_int64_t width
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartSetNumParticles (
|
||||
H5PartFile *f,
|
||||
const h5part_int64_t nparticles
|
||||
h5part_int64_t nparticles
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartWriteDataFloat64 (
|
||||
H5PartFile *f,
|
||||
const char *name,
|
||||
const h5part_float64_t *array
|
||||
char *name,
|
||||
h5part_float64_t *array
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartWriteDataInt64 (
|
||||
H5PartFile *f,
|
||||
const char *name,
|
||||
const h5part_int64_t *array
|
||||
char *name,
|
||||
h5part_int64_t *array
|
||||
);
|
||||
|
||||
/*================== File Reading Routines =================*/
|
||||
h5part_int64_t
|
||||
H5PartSetStep (
|
||||
H5PartFile *f,
|
||||
const h5part_int64_t step
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartHasStep (
|
||||
H5PartFile *f,
|
||||
const h5part_int64_t step
|
||||
h5part_int64_t step
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
@@ -115,18 +91,18 @@ H5PartGetNumDatasets (
|
||||
h5part_int64_t
|
||||
H5PartGetDatasetName (
|
||||
H5PartFile *f,
|
||||
const h5part_int64_t idx,
|
||||
int indx,
|
||||
char *name,
|
||||
const h5part_int64_t maxlen
|
||||
size_t maxlen
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartGetDatasetInfo (
|
||||
H5PartFile *f,
|
||||
const h5part_int64_t idx,
|
||||
int idx,
|
||||
char *name,
|
||||
const h5part_int64_t maxlen,
|
||||
h5part_int64_t *type,
|
||||
size_t maxlen,
|
||||
hid_t *type,
|
||||
h5part_int64_t *nelem);
|
||||
|
||||
|
||||
@@ -138,10 +114,12 @@ H5PartGetNumParticles (
|
||||
h5part_int64_t
|
||||
H5PartSetView (
|
||||
H5PartFile *f,
|
||||
const h5part_int64_t start,
|
||||
const h5part_int64_t end
|
||||
h5part_int64_t start,
|
||||
h5part_int64_t end
|
||||
);
|
||||
|
||||
#define H5PartResetView(f) H5PartSetView(f,-1,-1)
|
||||
#define H5PartHasView(f) ((f->viewstart<0||f->viewend<0)?0:1)
|
||||
|
||||
h5part_int64_t
|
||||
H5PartGetView (
|
||||
@@ -150,16 +128,6 @@ H5PartGetView (
|
||||
h5part_int64_t *end
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartHasView (
|
||||
H5PartFile *f
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartResetView (
|
||||
H5PartFile *f
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartSetCanonicalView (
|
||||
H5PartFile *f
|
||||
@@ -168,21 +136,39 @@ H5PartSetCanonicalView (
|
||||
h5part_int64_t
|
||||
H5PartReadDataFloat64(
|
||||
H5PartFile *f,
|
||||
const char *name,
|
||||
char *name,
|
||||
h5part_float64_t *array
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartReadDataInt64 (
|
||||
H5PartFile *f,
|
||||
const char *name,
|
||||
char *name,
|
||||
h5part_int64_t *array
|
||||
);
|
||||
|
||||
/* the following is a back-door for extensions to the data writing */
|
||||
#if 0
|
||||
h5part_int64_t
|
||||
H5PartReadData (
|
||||
H5PartFile *f,
|
||||
char *name,
|
||||
void *array,
|
||||
hid_t type
|
||||
);
|
||||
h5part_int64_t
|
||||
H5PartWriteData (
|
||||
H5PartFile *f,
|
||||
char *name,
|
||||
void *array,
|
||||
hid_t type
|
||||
);
|
||||
#endif
|
||||
|
||||
h5part_int64_t
|
||||
H5PartReadParticleStep (
|
||||
H5PartFile *f,
|
||||
const h5part_int64_t step,
|
||||
h5part_int64_t step,
|
||||
h5part_float64_t *x, /* particle positions */
|
||||
h5part_float64_t *y,
|
||||
h5part_float64_t *z,
|
||||
@@ -203,33 +189,42 @@ H5PartReadParticleStep (
|
||||
h5part_int64_t
|
||||
H5PartWriteStepAttrib (
|
||||
H5PartFile *f,
|
||||
const char *attrib_name,
|
||||
const h5part_int64_t attrib_type,
|
||||
const void *attrib_value,
|
||||
const h5part_int64_t attrib_nelem
|
||||
char *name,
|
||||
hid_t type,
|
||||
void *attrib,
|
||||
int nelem
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartWriteFileAttrib (
|
||||
H5PartFile *f,
|
||||
const char *attrib_name,
|
||||
const h5part_int64_t attrib_type,
|
||||
const void *attrib_value,
|
||||
const h5part_int64_t attrib_nelem
|
||||
char *name,
|
||||
hid_t type,
|
||||
void *attrib,
|
||||
int nelem
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartWriteAttrib (
|
||||
H5PartFile *f,
|
||||
char *name,
|
||||
hid_t type,
|
||||
void *attrib,
|
||||
int nelem /* this should be deprecated ??? */
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartWriteFileAttribString (
|
||||
H5PartFile *f,
|
||||
const char *name,
|
||||
const char *attrib
|
||||
char *name,
|
||||
char *attrib
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartWriteStepAttribString (
|
||||
H5PartFile *f,
|
||||
const char *name,
|
||||
const char *attrib
|
||||
char *name,
|
||||
char *attrib
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
@@ -244,46 +239,80 @@ H5PartGetNumFileAttribs (
|
||||
|
||||
h5part_int64_t
|
||||
H5PartGetStepAttribInfo (
|
||||
H5PartFile *f,
|
||||
const h5part_int64_t attrib_idx,
|
||||
char *attrib_name,
|
||||
const h5part_int64_t len_of_attrib_name,
|
||||
h5part_int64_t *attrib_type,
|
||||
h5part_int64_t *attrib_nelem
|
||||
);
|
||||
H5PartFile *f,
|
||||
int idx,
|
||||
char *name,
|
||||
size_t maxnamelen, /* ??? */
|
||||
hid_t *type,
|
||||
int *nelem
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartGetFileAttribInfo (
|
||||
H5PartFile *f,
|
||||
const h5part_int64_t idx,
|
||||
int idx,
|
||||
char *name,
|
||||
const h5part_int64_t maxnamelen,
|
||||
h5part_int64_t *type,
|
||||
h5part_int64_t *nelem
|
||||
size_t maxnamelen,
|
||||
hid_t *type,
|
||||
int *nelem
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartReadStepAttrib (
|
||||
H5PartFile *f,
|
||||
const char *name,
|
||||
char *name,
|
||||
void *data
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartReadAttrib (
|
||||
H5PartFile *f,
|
||||
char *name,
|
||||
void *data
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartReadFileAttrib (
|
||||
H5PartFile *f,
|
||||
const char *name,
|
||||
char *name,
|
||||
void *data
|
||||
);
|
||||
|
||||
/**************** File Stashing Interfaces *************************/
|
||||
h5part_int64_t
|
||||
H5PartStashFile (
|
||||
H5PartFile *f,
|
||||
char *filename
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartUnstashFile (
|
||||
H5PartFile *f,
|
||||
char *filename,
|
||||
char *outputpath /* outputpath can be null for cwd */
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartGetNumStashFiles (
|
||||
H5PartFile *f
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
_H5PartFileGetStashFileName (
|
||||
H5PartFile *f,
|
||||
int nameindex,
|
||||
char *filename,
|
||||
int maxlen
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartSetVerbosityLevel (
|
||||
const h5part_int64_t level
|
||||
unsigned int
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartSetErrorHandler (
|
||||
const h5part_error_handler handler
|
||||
h5part_error_handler handler
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
@@ -291,13 +320,8 @@ H5PartGetErrno (
|
||||
void
|
||||
);
|
||||
|
||||
h5part_error_handler
|
||||
H5PartGetErrorHandler (
|
||||
void
|
||||
);
|
||||
|
||||
h5part_int64_t
|
||||
H5PartReportErrorHandler (
|
||||
H5PartDefaultErrorHandler (
|
||||
const char *funcname,
|
||||
const h5part_int64_t eno,
|
||||
const char *fmt,
|
||||
@@ -312,8 +336,13 @@ H5PartAbortErrorHandler (
|
||||
...
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
void vprint_error ( const char *fmt, va_list ap );
|
||||
void print_error ( const char *fmt, ... );
|
||||
void vprint_warn ( const char *fmt, va_list ap );
|
||||
void print_warn ( const char *fmt, ... );
|
||||
void vprint_info ( const char *fmt, va_list ap );
|
||||
void print_info ( const char *fmt, ... );
|
||||
void vprint_debug ( const char *fmt, va_list ap );
|
||||
void print_debug ( const char *fmt, ... );
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
#ifndef _H5Part_HH_
|
||||
#define _H5Part_HH_
|
||||
|
||||
extern "C" {
|
||||
#include "H5PartTypes.h"
|
||||
#include "H5Part.h"
|
||||
}
|
||||
|
||||
/* Add any C++ specific extensions/implementations/wrappers here */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,208 @@
|
||||
! Declaration of subroutines for Fortran Bindings
|
||||
! open/close interface
|
||||
INTEGER*8 h5pt_openr
|
||||
! FUNCTION h5pt_openr (file)
|
||||
! in CHARACTER file(*) : the filename to open for reading
|
||||
|
||||
INTEGER*8 h5pt_openw
|
||||
! FUNCTION h5pt_openw(file)
|
||||
! in CHARACTER file(*) : the filename to open for writing
|
||||
|
||||
INTEGER*8 h5pt_openr_par
|
||||
! FUNCTION h5pt_openr_par(file,mpi_communicator)
|
||||
! in CHARACTER file(*) : the filename to open for writing
|
||||
! in INTEGER mpi_communicator : the MPI_Communicator used by the program
|
||||
! returns INTEGER*8 : and open filehandle for parallel reads
|
||||
|
||||
INTEGER*8 h5pt_openw_par
|
||||
! FUNCTION h5pt_openw_par(file,mpi_communicator)
|
||||
! in CHARACTER file(*)
|
||||
! in INTEGER mpi_communicator
|
||||
! returns INTEGER*8 : an open filehandle for parallel writes
|
||||
|
||||
INTEGER*8 h5pt_close
|
||||
! FUNCTION h5pt_close(filehandle)
|
||||
! in INTEGER*8 filehandle : close this open filehandle
|
||||
|
||||
!==============Writing and Setting Dataset info========
|
||||
! c h5pt_readstep(in INTEGER*8 filehandle,INTEGER step,
|
||||
! REAL*8 x(*),REAL*8 y(*),REAL*8 z(*),
|
||||
! REAL*8 px(*),REAL*8 py(*),REAL*8 pz(*),
|
||||
! INTEGER*8 id(*))
|
||||
|
||||
INTEGER*8 h5pt_setnpoints
|
||||
! SUBROUTINE h5pt_setnpoints(filehandle,npoints)
|
||||
! in INTEGER*8 filehandle
|
||||
! in INTEGER*8 npoints : The number of particles on *this* processor
|
||||
|
||||
INTEGER*8 h5pt_setstep
|
||||
! FUNCTION h5pt_setstep(filehandle,step)
|
||||
! in INTEGER*8 filehandle
|
||||
! in INTEGER*8 step : Set the current timestep in the file to this
|
||||
|
||||
INTEGER*8 h5pt_writedata_r8
|
||||
! SUBROUTINE h5pt_writedata_r8(filehandle,name,data)
|
||||
! in INTEGER*8 filehandle
|
||||
! in CHARACTER name(*) : The name of the data we are writing
|
||||
! eg. "X" or "Y" or "PX" etc...
|
||||
! in REAL*8 data(*) : The dataarray to write. The number of
|
||||
! elements is presumably set earlier with
|
||||
! h5pt_setnpoints(f,npoints)
|
||||
|
||||
INTEGER*8 h5pt_writedata_i8
|
||||
! SUBROUTINE h5pt_writedata_i8(filehandle,name,data)
|
||||
! in INTEGER*8 filehandle
|
||||
! in CHARACTER name(*)
|
||||
! in INTEGER*8 data(*)
|
||||
!==============Reading Data Characteristics============
|
||||
|
||||
INTEGER*8 h5pt_getnsteps
|
||||
! FUNCTION h5pt_getnsteps(filehandle)
|
||||
! in INTEGER*8 filehandle
|
||||
! returns INTEGER : number of timesteps stored in the file
|
||||
|
||||
INTEGER*8 h5pt_getndatasets
|
||||
! FUNCTION h5pt_getndatasets(filehandle)
|
||||
! in INTEGER*8 filehandle
|
||||
! returns INTEGER*8 : number of datasets stored per timestep
|
||||
|
||||
INTEGER*8 h5pt_getnpoints
|
||||
! FUNCTION h5pt_getnpoints(filehandle)
|
||||
! in INTEGER*8 filehandle
|
||||
! returns INTEGER*8 : total number of points in this timestep
|
||||
! If a "view" has been set using h5pt_setview()
|
||||
! then it returns the number of points that are
|
||||
! in the current view.
|
||||
|
||||
! probably should get index from name
|
||||
INTEGER*8 h5pt_getdatasetname
|
||||
! FUNCTION h5pt_getdatasetname(filehandle,index,name)
|
||||
! in INTEGER*8 filehandle
|
||||
! in INTEGER index : Index for a given dataset name
|
||||
! out CHARACTER name(*) returns the name of the dataset at that index
|
||||
|
||||
!=============Setting and getting views================
|
||||
INTEGER*8 h5pt_setview
|
||||
! SUBROUTINE h5pt_setview(filehandle,start,end)
|
||||
! in INTEGER*8 filehandle
|
||||
! in INTEGER*8 start : offset of the first particle in the view
|
||||
! in INTEGER*8 end : offset of the first particle after the end of the view
|
||||
|
||||
INTEGER*8 h5pt_resetview
|
||||
! SUBROUTINE h5pt_resetview(filehandle)
|
||||
! in INTEGER*8 filehandle : reset the view on this filehandle to default
|
||||
|
||||
INTEGER*8 h5pt_hasview
|
||||
! FUNCTION h5pt_hasview(filehandle)
|
||||
! in INTEGER*8 filehandle
|
||||
! returns INTEGER : 1 if a view is in place and 0 if the view is default
|
||||
|
||||
INTEGER*8 h5pt_getview
|
||||
! FUNCTION h5pt_getview(filehandle,start,end)
|
||||
! in INTEGER*8 filehandle
|
||||
! out INTEGER*8 start : offset of first particle in the view
|
||||
! out INTEGER*8 end : offset of first particle beyond the current view
|
||||
|
||||
!==============Reading Data=========================
|
||||
INTEGER*8 h5pt_readdata_r8
|
||||
! FUNCTION h5pt_readdata_r8(filehandle,name,data)
|
||||
! in INTEGER*8 filehandle
|
||||
! in CHARACTER name(*) : The name of the data we are writing
|
||||
! eg. "X" or "Y" or "PX" etc...
|
||||
! out REAL*8 data(*) : The dataarray to read. Number of points
|
||||
! read is either the number within the view set
|
||||
! by h5pt_setview() or the default (the total
|
||||
! number of particles in the file.
|
||||
! returns INTEGER : 1 for success, 0 for failure
|
||||
INTEGER*8 h5pt_readdata_i8
|
||||
! FUNCTION h5pt_readdata_i8(filehandle,name,data)
|
||||
! in INTEGER*8 filehandle
|
||||
! in CHARACTER name(*) : The name of the data we are writing
|
||||
! eg. "X" or "Y" or "PX" etc...
|
||||
! out REAL*8 data(*) : The dataarray to read. Number of points
|
||||
! read is either the number within the view set
|
||||
! by h5pt_setview() or the default (the total
|
||||
! number of particles in the file.
|
||||
! returns INTEGER : 1 for success, 0 for failure
|
||||
! =================== Attributes ================
|
||||
|
||||
! Attributes
|
||||
! writing
|
||||
INTEGER*8 h5pt_writefileattrib_r8
|
||||
! FUNCTION h5pt_writefileattrib_r8(filehandle,name,attrib,nelem)
|
||||
! in INTEGER*8 filehandle : The filehandle
|
||||
! in CHARACTER name(*) : The name of the attribute
|
||||
! in REAL*8 attrib(*) : The array of data to write into the attribute
|
||||
! in INTEGER nelem : Number of elements in the attrib array
|
||||
|
||||
INTEGER*8 h5pt_writefileattrib_i8
|
||||
! FUNCTION h5pt_writefileattrib_i8(filehandle,name,attrib,nelem)
|
||||
! in INTEGER*8 filehandle : The filehandle
|
||||
! in CHARACTER name(*) : The name of the attribute
|
||||
! in INTEGER*8 attrib(*) : The array of data to write into the attribute
|
||||
! in INTEGER nelem : Number of elements in the attrib array
|
||||
|
||||
INTEGER*8 h5pt_writefileattrib_string
|
||||
! FUNCTION h5pt_writefileattrib_string(filehandle,name,string)
|
||||
! in INTEGER*8 filehandle : The filehandle
|
||||
! in CHARACTER name(*) : The name of the attribute
|
||||
! in CHARACTER*8 attrib(*) : The array of data to write into the attribute
|
||||
|
||||
INTEGER*8 h5pt_writestepattrib_r8
|
||||
! FUNCTION h5pt_writestepattrib_r8(filehandle,name,attrib,nelem)
|
||||
! in INTEGER*8 filehandle : The filehandle
|
||||
! in CHARACTER name(*) : The name of the attribute
|
||||
! in INTEGER*8 attrib(*) : The array of data to write into the attribute
|
||||
! in INTEGER nelem : Number of elements in the attrib array
|
||||
|
||||
INTEGER*8 h5pt_writestepattrib_i8
|
||||
! FUNCTION h5pt_writestepattrib_i8(filehandle,name,attrib,nelem)
|
||||
! in INTEGER*8 filehandle : The filehandle
|
||||
! in CHARACTER name(*) : The name of the attribute
|
||||
! in INTEGER*8 attrib(*) : The array of data to write into the attribute
|
||||
! in INTEGER nelem : Number of elements in the attrib array
|
||||
|
||||
INTEGER*8 h5pt_writestepattrib_string
|
||||
! FUNCTION h5pt_writestepattrib_string(filehandle,name,string)
|
||||
! in INTEGER*8 filehandle : The filehandle
|
||||
! in CHARACTER name(*) : The name of the attribute
|
||||
! in CHARACTER*8 attrib(*) : The array of data to write into the attribute
|
||||
|
||||
! reading attributes *************************
|
||||
INTEGER*8 h5pt_getnstepattribs
|
||||
! FUNCTION h5pt_getnstepattribs(filehandle)
|
||||
! in INTEGER*8 filehandle : The filehandle
|
||||
! returns INTEGER : number of attributes bound to this particular step
|
||||
|
||||
INTEGER*8 h5pt_getnfileattribs
|
||||
! FUNCTION h5pt_getnfileattribs(filehandle)
|
||||
! in INTEGER*8 filehandle : The filehandle
|
||||
! returns INTEGER : number of attributes bound to the file
|
||||
|
||||
INTEGER*8 h5pt_getstepattribinfo
|
||||
! FUNCTION h5pt_getstepattribinfo(filehandle,idx,attribname,nelem)
|
||||
! in INTEGER*8 filehandle : The filehandle
|
||||
! in INTEGER idx : index of the attribute being queried
|
||||
! out CHARACTER name(*) : The name of the attribute
|
||||
! out INTEGER nelem : Number of elements in the attrib array
|
||||
|
||||
|
||||
INTEGER*8 h5pt_getfileattribinfo
|
||||
! FUNCTION h5pt_getfileattribinfo(filehandle,idx,attribname,nelem)
|
||||
! in INTEGER*8 filehandle : The filehandle
|
||||
! in INTEGER idx : index of the attribute being queried
|
||||
! out CHARACTER name(*) : The name of the attribute
|
||||
! out INTEGER nelem : Number of elements in the attrib array
|
||||
|
||||
INTEGER*8 h5pt_readstepattrib
|
||||
! FUNCTION h5pt_readstepattrib(filehandle,name,data)
|
||||
! in INTEGER*8 filehandle
|
||||
! in CHARACTER attributename(*) : name of the attribute to read
|
||||
! out <anytype> data(*) : the attribute data will be read into this array
|
||||
|
||||
INTEGER*8 h5pt_readfileattrib
|
||||
! FUNCTION h5pt_readfileattrib(filehandle,name,data)
|
||||
! in INTEGER*8 filehandle
|
||||
! in CHARACTER attributename(*) : name of the attribute to read
|
||||
! out <anytype> data(*) : the attribute data will be read into this array
|
||||
|
||||