diff --git a/doc/CodingGuidelines b/doc/CodingGuidelines index 3a03572fa6dc568084cf9e3002062552fb7b0861..724365f30e39a648a9f6d50a6468dba02a2ad70e 100644 --- a/doc/CodingGuidelines +++ b/doc/CodingGuidelines @@ -10,10 +10,10 @@ Many items from this list are taken from Stroustrup, Sutter, and Meyers books. Objectives: 1) Improve collaboration: - 1.a. Reduce new code development and integration times for developers and users, by making code easy to understand - 1.b. Allocate more time for discussion and pathfinding rather than understanding developers' coding - 1.c. Expand developers and users base - + 1.a. Reduce new code development and integration times for developers and users, by making code easy to understand + 1.b. Allocate more time for discussion and pathfinding rather than understanding developers' coding + 1.c. Expand developers and users base + 2) Execute new ideas faster 3) Allocate more time to research and publication from new ideas @@ -47,23 +47,23 @@ Text style for readability (Coding format setup in Eclipse with Window > Prefere 5) Brackets: use an extra space for brackets - Do: - if( number < 1 ) - { - number = 4; - ... - } - - Don't: - if( number < 1 ){ - number = 4; ..... + Do: + if( number < 1 ) + { + number = 4; + ... + } + + Don't: + if( number < 1 ){ + number = 4; ..... .....} - + 6) Prefer the keyword "using" over "typedef". Only rename complex types, do not rename standard types (int, double, std::vector) Don't: typedef std::vector<std::vector<double>> Vector2D; Do: using std::vector<std::vector<double>> = Vector2D; - + Documentation/Comments 1) Use Doxygen as the official API documentation tool. Eclipse has a template autocomplete option for function declarations. diff --git a/include/ADIOS.h b/include/ADIOS.h new file mode 100644 index 0000000000000000000000000000000000000000..cf471d2b4bdda689ef5109c47d496b5f9331cf60 --- /dev/null +++ b/include/ADIOS.h @@ -0,0 +1,86 @@ +/* + * ADIOS.h + * + * Created on: Oct 3, 2016 + * Author: wfg + */ + +#ifndef ADIOS_H_ +#define ADIOS_H_ + +#include <string> +#include <memory> + +//#ifdef USE_MPI +#include <mpi.h> +//#endif + +#include "SMetadata.h" + + +namespace adios +{ +/** + * Class ADIOS, interface between user call and ADIOS library + */ +class ADIOS +{ + +public: // can be accessed by anyone + + std::string m_XMLConfigFile; ///< XML File to be read containing configuration information + bool m_IsUsingMPI = false; ///< bool flag false: sequential, true: parallel MPI, to be checked instead of communicator + std::unique_ptr<CFile> m_File; + + ADIOS( ); ///< empty constructor, to be defined. Since we have an empty constructor we can't have const variables not defined by this constructor + + /** + * Serial constructor for XML config file + * @param xmlConfigFile passed to m_XMLConfigFile + */ + ADIOS( const std::string xmlConfigFile ); + + //#ifdef USE_MPI //MPI only section + MPI_Comm* m_MPIComm = nullptr; ///< only used as reference to MPI communicator passed from parallel constructor, using pointer instead of reference as null is a possible value + /** + * Parallel constructor for XML config file and MPI + * @param xmlConfigFile passed to m_XMLConfigFile + * @param mpiComm MPI communicator ...const to be discussed + */ + ADIOS( const std::string xmlConfigFile, const MPI_Comm& mpiComm ); + + /** + * Parallel MPI communicator without XML config + * @param mpiComm MPI communicator passed to m_MPIComm ...const to be discussed + */ + ADIOS( const MPI_Comm& mpiComm ); + //#endif //MPI only section + + virtual ~ADIOS( ); ///< virtual destructor overriden by children's own destructors + + virtual void Init( ) = 0; ///< calls to read XML file among other initialization tasks + +private: + + SMetadata m_Metadata; ///< contains all metadata information from XML Config File + bool m_IsUsingMPI = false; ///< bool flag false: sequential, true: parallel MPI, to be checked instead of communicator + + void InitNoMPI( ); ///< called from Init, initialize Serial + + //#ifdef USE_MPI + void InitMPI( ); ///< called from Init, initialize parallel MPI + //#endif + + void ReadXMLConfigFile( ); ///< populates SMetadata by reading the XML Config File + + +}; + + + +} //end namespace + + + + +#endif /* ADIOS_H_ */ diff --git a/include/CADIOS.h b/include/CADIOS.h deleted file mode 100644 index 6222bce3851fb30e4653b02708306fe854a1ca1d..0000000000000000000000000000000000000000 --- a/include/CADIOS.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * CADIOS.h - * - * Created on: Sep 29, 2016 - * Author: William F Godoy - */ - -#ifndef CADIOS_H_ -#define CADIOS_H_ - -#include <string> -#include <mpi.h> -#include <memory> // unique_ptr - -#include "include/SMetadata.h" - -namespace adios -{ -/** - * Class CADIOS, interface between user call and ADIOS library - */ -class CADIOS -{ - -public: // can be accessed by anyone - - std::string m_XMLConfigFile; ///< XML File to be read containing configuration information - bool m_IsUsingMPI = false; ///< bool flag false: sequential, true: parallel MPI, to be checked instead of communicator - MPI_Comm* m_MPIComm = nullptr; ///< only used as reference to MPI communicator passed from parallel constructor, using pointer instead of reference as null is a possible value - - CADIOS( ); ///< empty constructor, to be defined. Since we have an empty constructor we can't have const variables not defined by this constructor - - /** - * Serial constructor for XML config file - * @param xmlConfigFile passed to m_XMLConfigFile - */ - CADIOS( const std::string xmlConfigFile ); - - /** - * Parallel constructor for XML config file and MPI - * @param xmlConfigFile passed to m_XMLConfigFile - * @param mpiComm MPI communicator ...const to be discussed - */ - CADIOS( const std::string xmlConfigFile, const MPI_Comm& mpiComm ); - - ~CADIOS( ); ///< virtual destructor overriden by children's own destructors - - void Init( ); ///< calls to read XML file among other initialization tasks - -private: - - SMetadata m_Metadata; ///< contains all metadata information from XML Config File - - void InitSerial( ); ///< called from Init, initialize Serial - void InitMPI( ); ///< called from Init, initialize parallel MPI - - void ReadXMLConfigFile( ); ///< populates SMetadata by reading the XML Config File - - -}; - - - - - - - -} - -#endif /* CADIOS_H_ */ diff --git a/include/CFile.h b/include/CFile.h new file mode 100644 index 0000000000000000000000000000000000000000..3402acb79423e32bef220ee72ac896539bf631ad --- /dev/null +++ b/include/CFile.h @@ -0,0 +1,52 @@ +/* + * CFile.h + * + * Created on: Oct 3, 2016 + * Author: wfg + */ + +#ifndef CFILE_H_ +#define CFILE_H_ + +#include <string> + +#include "SMetadata.h" + +namespace adios +{ + +class CFile +{ + +public: + + const std::string m_FileName; ///< serial: file name, MPI: prefix for file name + const std::string m_FileType; ///< netCDF, PHDF5, POSIX + const bool m_IsUsingMPI; ///< true: Communicator is passed, false: serial process (might include threads) + const SMetadata& m_Metadata; ///< reference to metadata info + + CFile( const std::string fileName, const std::string fileType, const SMetadata& metadata, const bool isUsingMPI ): + m_FileName{ fileName }, + m_FileType{ fileType }, + m_Metadata{ metadata }, + m_IsUsingMPI{ isUsingMPI } + { } + + virtual ~CFile( ) { }; + + virtual void Open( const std::string fileName, const std::string groupName, const std::string accessMode ) = 0; + + virtual unsigned long int GroupSize( const std::string fileName, const std::string groupName ) const = 0; + + virtual void Write( const std::string fileName, const std::string variableName ) = 0; + + virtual void Close( ) = 0; + +}; + + +} //end namespace + + + +#endif /* CFILE_H_ */ diff --git a/include/SMetadata.h b/include/SMetadata.h index b4044cd4b1d453b5363bb5f86085c6328d58bf47..6d30dedf5f3537a14bc532d07bed6ca891d132a3 100644 --- a/include/SMetadata.h +++ b/include/SMetadata.h @@ -16,6 +16,8 @@ namespace adios struct SMetadata { std::string hostLanguage; ///< Supported: C, C++, Fortran + ///add more Metadata? + @@ -23,6 +25,6 @@ struct SMetadata }; -} +} //end namespace #endif /* SMETADATA_H_ */ diff --git a/include/file_mpi/CFileMPI.h b/include/file_mpi/CFileMPI.h new file mode 100644 index 0000000000000000000000000000000000000000..8c58e93fb03c85d2cb3c5c79bab69972b4c43a25 --- /dev/null +++ b/include/file_mpi/CFileMPI.h @@ -0,0 +1,48 @@ +/* + * CFileMPI.h + * + * Created on: Oct 3, 2016 + * Author: wfg + */ + +#ifndef CFILEMPI_H_ +#define CFILEMPI_H_ + +#include <mpi.h> + +#include "CFile.h" + + +namespace adios +{ + +class CFileMPI : public CFile +{ + +public: + + MPI_Comm* m_MPIComm; + + CFileMPI( const std::string fileName, const std::string fileType, const SMetadata& metadata, const MPI_Comm& mpiComm ): + CFile( fileName, fileType, metadata, true ), + m_MPIComm{ mpiComm } + { } + + virtual ~CFileMPI( ) { }; + + virtual void Open( const std::string fileName, const std::string groupName, const std::string accessMode ); + + virtual unsigned long int GroupSize( const std::string fileName, const std::string groupName ) const = 0; + + virtual void Write( const std::string fileName, const std::string variableName ) = 0; + + virtual void Close( ) = 0; + +}; + + +} //end namespace + + + +#endif /* CFILEMPI_H_ */ diff --git a/include/file_nompi/CFileNoMPI.h b/include/file_nompi/CFileNoMPI.h new file mode 100644 index 0000000000000000000000000000000000000000..9a86f7d5c50120b9754c5b57a9dd116eb61a3ddb --- /dev/null +++ b/include/file_nompi/CFileNoMPI.h @@ -0,0 +1,44 @@ +/* + * CFileNoMPI.h + * + * Created on: Oct 3, 2016 + * Author: wfg + */ + +#ifndef CFILENOMPI_H_ +#define CFILENOMPI_H_ + + +#include "CFile.h" + + +namespace adios +{ + +class CFileNoMPI : public CFile +{ + +public: + + CFileNoMPI( const std::string fileName, const std::string fileType, const SMetadata& metadata ): + CFile( fileName, fileName, metadata, false ) + { }; + + virtual ~CFileNoMPI( ){ }; + + virtual void Open( const std::string fileName, const std::string groupName, const std::string accessMode ) = 0; + + virtual unsigned long int GroupSize( const std::string fileName, const std::string groupName ) const = 0; + + virtual void Write( const std::string fileName, const std::string variableName ) = 0; + + virtual void Close( ) = 0; + +}; + + +} //end namespace + + + +#endif /* CFILENOMPI_H_ */ diff --git a/src/CADIOS.cpp b/src/ADIOS.cpp similarity index 100% rename from src/CADIOS.cpp rename to src/ADIOS.cpp