35 #ifndef NEKTAR_LIB_UTILITIES_BASIC_UTILS_FIELDIO_H
36 #define NEKTAR_LIB_UTILITIES_BASIC_UTILS_FIELDIO_H
49 namespace LibUtilities
62 virtual std::shared_ptr<TagWriter>
AddChild(
const std::string &
name) = 0;
64 virtual void SetAttr(
const std::string &key,
const std::string &val) = 0;
117 const std::vector<unsigned int> &elementIDs,
118 const std::vector<LibUtilities::BasisType> &basis,
120 const std::vector<unsigned int> &numModes,
121 const std::vector<std::string> &fields,
124 bool homoStrips =
false,
128 const std::vector<LibUtilities::PointsType> &points =
130 bool pointsDef =
false,
132 bool numPointsDef =
false)
182 const std::string &outFile,
183 std::vector<FieldDefinitionsSharedPtr> &fielddefs,
184 std::vector<std::vector<NekDouble> > &fielddata,
186 const bool backup =
false);
188 const std::string &infilename,
189 std::vector<FieldDefinitionsSharedPtr> &fielddefs,
222 class FieldIO :
public std::enable_shared_from_this<FieldIO>
233 const std::string &outFile,
234 std::vector<FieldDefinitionsSharedPtr> &fielddefs,
235 std::vector<std::vector<NekDouble> > &fielddata,
237 const bool backup =
false);
240 const std::string &infilename,
241 std::vector<FieldDefinitionsSharedPtr> &fielddefs,
242 std::vector<std::vector<NekDouble> > &fielddata =
248 const std::string &filename,
259 const std::string &filename);
282 const std::string outname,
bool perRank,
bool backup =
false);
286 const std::string &outFile,
287 std::vector<FieldDefinitionsSharedPtr> &fielddefs,
288 std::vector<std::vector<NekDouble> > &fielddata,
290 const bool backup =
false) = 0;
294 const std::string &infilename,
295 std::vector<FieldDefinitionsSharedPtr> &fielddefs,
296 std::vector<std::vector<NekDouble> >
318 std::vector<FieldDefinitionsSharedPtr> &fielddefs,
319 std::vector<std::vector<NekDouble> > &fielddata,
323 v_Write(outFile, fielddefs, fielddata, fieldinfomap, backup);
340 std::vector<FieldDefinitionsSharedPtr> &fielddefs,
341 std::vector<std::vector<NekDouble> > &fielddata,
345 v_Import(infilename, fielddefs, fielddata, fieldinfo, ElementIDs);
#define LIB_UTILITIES_EXPORT
Class for operating on Nektar++ input/output files.
int CheckFieldDefinition(const FieldDefinitionsSharedPtr &fielddefs)
Check field definitions for correctness and return storage size.
static const std::string GetFileType(const std::string &filename, CommSharedPtr comm)
Determine file type of given input file.
bool m_sharedFilesystem
Boolean dictating whether we are on a shared filesystem.
void Write(const std::string &outFile, std::vector< FieldDefinitionsSharedPtr > &fielddefs, std::vector< std::vector< NekDouble > > &fielddata, const FieldMetaDataMap &fieldinfomap=NullFieldMetaDataMap, const bool backup=false)
Write out the field information to the file outFile.
DataSourceSharedPtr ImportFieldMetaData(const std::string &filename, FieldMetaDataMap &fieldmetadatamap)
Import the metadata from a field file.
static std::shared_ptr< FieldIO > CreateForFile(const LibUtilities::SessionReaderSharedPtr session, const std::string &filename)
Construct a FieldIO object for a given input filename.
virtual void v_Write(const std::string &outFile, std::vector< FieldDefinitionsSharedPtr > &fielddefs, std::vector< std::vector< NekDouble > > &fielddata, const FieldMetaDataMap &fieldinfomap, const bool backup=false)=0
Write out the field information to the file outFile.
virtual const std::string & GetClassName() const =0
virtual void v_Import(const std::string &infilename, std::vector< FieldDefinitionsSharedPtr > &fielddefs, std::vector< std::vector< NekDouble > > &fielddata=NullVectorNekDoubleVector, FieldMetaDataMap &fieldinfomap=NullFieldMetaDataMap, const Array< OneD, int > &ElementIDs=NullInt1DArray)=0
Read field information from the file infilename.
static std::shared_ptr< FieldIO > CreateDefault(const LibUtilities::SessionReaderSharedPtr session)
Returns an object for the default FieldIO method.
std::string SetUpOutput(const std::string outname, bool perRank, bool backup=false)
Set up the filesystem ready for output.
LibUtilities::CommSharedPtr m_comm
Communicator to use when writing parallel format.
FieldIO(LibUtilities::CommSharedPtr pComm, bool sharedFilesystem)
Constructor for FieldIO base class.
static void AddInfoTag(TagWriterSharedPtr root, const FieldMetaDataMap &fieldmetadatamap)
Add provenance information to the field metadata map.
virtual DataSourceSharedPtr v_ImportFieldMetaData(const std::string &filename, FieldMetaDataMap &fieldmetadatamap)=0
Import the metadata from a field file.
virtual std::string GetFileEnding() const
Helper function that determines default file extension.
void Import(const std::string &infilename, std::vector< FieldDefinitionsSharedPtr > &fielddefs, std::vector< std::vector< NekDouble > > &fielddata=NullVectorNekDoubleVector, FieldMetaDataMap &fieldinfomap=NullFieldMetaDataMap, const Array< OneD, int > &ElementIDs=NullInt1DArray)
Read field information from the file infilename.
Provides a generic Factory class.
Base class for writing hierarchical data (XML or HDF5).
virtual void SetAttr(const std::string &key, const std::string &val)=0
Set an attribute on the node.
virtual std::shared_ptr< TagWriter > AddChild(const std::string &name)=0
Create a child node.
static std::vector< unsigned int > NullUnsignedIntVector
void Import(const std::string &infilename, std::vector< FieldDefinitionsSharedPtr > &fielddefs, std::vector< std::vector< NekDouble > > &fielddata, FieldMetaDataMap &fieldinfomap, const Array< OneD, int > &ElementIDs)
This function allows for data to be imported from an FLD file when a session and/or communicator is n...
std::shared_ptr< TagWriter > TagWriterSharedPtr
std::shared_ptr< FieldIO > FieldIOSharedPtr
std::shared_ptr< DataSource > DataSourceSharedPtr
std::map< std::string, std::string > FieldMetaDataMap
LibUtilities::NekFactory< std::string, FieldIO, LibUtilities::CommSharedPtr, bool > FieldIOFactory
Datatype of the NekFactory used to instantiate classes.
std::shared_ptr< SessionReader > SessionReaderSharedPtr
static FieldMetaDataMap NullFieldMetaDataMap
static std::vector< std::vector< NekDouble > > NullVectorNekDoubleVector
std::shared_ptr< FieldDefinitions > FieldDefinitionsSharedPtr
FieldIOFactory & GetFieldIOFactory()
Returns the FieldIO factory.
static std::vector< NekDouble > NullNekDoubleVector
void Write(const std::string &outFile, std::vector< FieldDefinitionsSharedPtr > &fielddefs, std::vector< std::vector< NekDouble > > &fielddata, const FieldMetaDataMap &fieldinfomap, const bool backup)
This function allows for data to be written to an FLD file when a session and/or communicator is not ...
std::shared_ptr< Comm > CommSharedPtr
Pointer to a Communicator object.
static std::vector< LibUtilities::PointsType > NullPointsTypeVector
The above copyright notice and this permission notice shall be included.
static Array< OneD, int > NullInt1DArray
Metadata that describes the storage properties of field output.
std::vector< NekDouble > m_homogeneousLengths
Spatial lengths of each homogeneous direction.
int m_numHomogeneousDir
Number of homogeneous directions, in the range .
std::vector< LibUtilities::BasisType > m_basis
Vector of basis types for each of the coordinate directions.
bool m_pointsDef
Boolean determining whether points have been defined in output.
std::vector< std::string > m_fields
Vector of field names that this data encapsulates.
std::vector< unsigned int > m_homogeneousSIDs
IDs corresponding to homogeneous strip IDs.
std::vector< unsigned int > m_numPoints
Define number of points per direction.
std::vector< LibUtilities::PointsType > m_points
Define the type of points per direction.
bool m_uniOrder
Define order of the element group.
std::vector< unsigned int > m_homogeneousYIDs
IDs corresponding to y-direction homogeneous IDs.
std::vector< unsigned int > m_homogeneousZIDs
IDs corresponding to z-direction homogeneous IDs.
std::vector< unsigned int > m_numModes
Define number of modes per direction.
ShapeType m_shapeType
Shape type of this field data.
bool m_homoStrips
Boolean determining whether homogeneous strips are used.
FieldDefinitions(ShapeType shapeType, const std::vector< unsigned int > &elementIDs, const std::vector< LibUtilities::BasisType > &basis, bool uniOrder, const std::vector< unsigned int > &numModes, const std::vector< std::string > &fields, int NumHomoDir=0, const std::vector< NekDouble > &HomoLengths=NullNekDoubleVector, bool homoStrips=false, const std::vector< unsigned int > &HomoSIDs=NullUnsignedIntVector, const std::vector< unsigned int > &HomoZIDs=NullUnsignedIntVector, const std::vector< unsigned int > &HomoYIDs=NullUnsignedIntVector, const std::vector< LibUtilities::PointsType > &points=NullPointsTypeVector, bool pointsDef=false, const std::vector< unsigned int > &numPoints=NullUnsignedIntVector, bool numPointsDef=false)
Simple constructor to allocate all internal properties.
bool m_numPointsDef
Boolean determining whether number of points has been defined.
std::vector< unsigned int > m_elementIDs
Element IDs of the field data.
FieldDefinitions()
Default constructor.