/*! \file mesh.hpp \author Olga Abramkina \brief Declaration of class CMesh. */ #ifndef __XIOS_CMesh__ #define __XIOS_CMesh__ #include "array_new.hpp" #include "dht_auto_indexing.hpp" namespace xios { /// ////////////////////// Déclarations ////////////////////// /// class CMesh; ///-------------------------------------------------------------- /*! \class CMesh \brief CMesh class. */ class CMesh { public: CMesh(void); ~CMesh(void); int nbNodesGlo; int nbEdgesGlo; int node_start; int node_count; int edge_start; int edge_count; bool nodesAreWritten; bool edgesAreWritten; bool facesAreWritten; CArray node_lon; CArray node_lat; CArray edge_lon; CArray edge_lat; CArray edge_nodes; CArray face_lon; CArray face_lat; CArray face_nodes; CArray face_edges; CArray edge_faces; CArray face_faces; void createMesh(const CArray&, const CArray&, const CArray&, const CArray& ); void createMeshEpsilon(const MPI_Comm&, const CArray&, const CArray&, const CArray&, const CArray& ); void getGlobalNghbFaces(const int, const MPI_Comm&, const CArray&, const CArray&, const CArray&, CArray&); void getLocalNghbFaces(const int, const CArray&, const CArray&, const CArray&, CArray&, CArray&); static CMesh* getMesh(StdString, int); private: int nbNodes_; int nbEdges_; int nbFaces_; static std::map meshList; static std::map > domainList; CClientClientDHTSizet* pNodeGlobalIndex; // pointer to a map CClientClientDHTSizet* pEdgeGlobalIndex; // pointer to a map void getGloNghbFacesNodeType(const MPI_Comm&, const CArray&, const CArray&, const CArray&, CArray&); void getGloNghbFacesEdgeType(const MPI_Comm&, const CArray&, const CArray&, const CArray&, CArray&); void getLocNghbFacesNodeType(const CArray&, const CArray&, const CArray&, CArray&, CArray&); void getLocNghbFacesEdgeType(const CArray&, const CArray&, const CArray&, CArray&, CArray&); vector createHashes (const double, const double); size_t nodeIndex (double, double); // redundant in parallel version with epsilon precision boost::unordered_map hashed_map_nodes; // redundant in parallel version with epsilon precision boost::unordered_map , int> map_nodes; // redundant in parallel version with epsilon precision boost::unordered_map , int> map_edges; // redundant in parallel version with epsilon precision }; } // namespace xios #endif //__XIOS_CMesh__