![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 //-------------------------------------------------------------------------
00002 // Filename : NCHelperMPAS.hpp
00003 //
00004 // Purpose : Climate NC file helper for MPAS grid
00005 //
00006 // Creator : Danqing Wu
00007 //-------------------------------------------------------------------------
00008
00009 #ifndef NCHELPERMPAS_HPP
00010 #define NCHELPERMPAS_HPP
00011
00012 #include "NCHelper.hpp"
00013
00014 namespace moab
00015 {
00016 #ifdef MOAB_HAVE_MPI
00017 class ParallelComm;
00018 #endif
00019 //! Child helper class for MPAS grid
00020 class NCHelperMPAS : public UcdNCHelper
00021 {
00022 public:
00023 NCHelperMPAS( ReadNC* readNC, int fileId, const FileOptions& opts, EntityHandle fileSet );
00024 static bool can_read_file( ReadNC* readNC );
00025
00026 private:
00027 //! Implementation of NCHelper::init_mesh_vals()
00028 virtual ErrorCode init_mesh_vals();
00029 //! Implementation of NCHelper::check_existing_mesh()
00030 virtual ErrorCode check_existing_mesh();
00031 //! Implementation of NCHelper::create_mesh()
00032 virtual ErrorCode create_mesh( Range& faces );
00033 //! Implementation of NCHelper::get_mesh_type_name()
00034 virtual std::string get_mesh_type_name()
00035 {
00036 return "MPAS";
00037 }
00038
00039 //! Implementation of UcdNCHelper::read_ucd_variables_to_nonset_allocate()
00040 virtual ErrorCode read_ucd_variables_to_nonset_allocate( std::vector< ReadNC::VarData >& vdatas,
00041 std::vector< int >& tstep_nums );
00042 #ifdef MOAB_HAVE_PNETCDF
00043 //! Implementation of UcdNCHelper::read_ucd_variables_to_nonset_async()
00044 virtual ErrorCode read_ucd_variables_to_nonset_async( std::vector< ReadNC::VarData >& vdatas,
00045 std::vector< int >& tstep_nums );
00046 #else
00047 //! Implementation of UcdNCHelper::read_ucd_variables_to_nonset()
00048 virtual ErrorCode read_ucd_variables_to_nonset( std::vector< ReadNC::VarData >& vdatas,
00049 std::vector< int >& tstep_nums );
00050 #endif
00051
00052 #ifdef MOAB_HAVE_MPI
00053 //! Redistribute local cells after trivial partition (e.g. Zoltan partition, if applicable)
00054 ErrorCode redistribute_local_cells( int start_cell_index, ParallelComm * pco );
00055 #endif
00056
00057 //! Create local vertices
00058 ErrorCode create_local_vertices( const std::vector< int >& vertices_on_local_cells, EntityHandle& start_vertex );
00059
00060 //! Create local edges (optional)
00061 ErrorCode create_local_edges( EntityHandle start_vertex, const std::vector< int >& num_edges_on_local_cells );
00062
00063 //! Create local cells without padding (cells are divided into groups based on the number of
00064 //! edges)
00065 ErrorCode create_local_cells( const std::vector< int >& vertices_on_local_cells,
00066 const std::vector< int >& num_edges_on_local_cells,
00067 EntityHandle start_vertex,
00068 Range& faces );
00069
00070 //! Create local cells with padding (padded cells will have the same number of edges)
00071 ErrorCode create_padded_local_cells( const std::vector< int >& vertices_on_local_cells,
00072 EntityHandle start_vertex,
00073 Range& faces );
00074
00075 //! Create gather set vertices
00076 ErrorCode create_gather_set_vertices( EntityHandle gather_set, EntityHandle& gather_set_start_vertex );
00077
00078 //! Create gather set edges (optional)
00079 ErrorCode create_gather_set_edges( EntityHandle gather_set, EntityHandle gather_set_start_vertex );
00080
00081 //! Create gather set cells without padding (cells are divided into groups based on the number
00082 //! of edges)
00083 ErrorCode create_gather_set_cells( EntityHandle gather_set, EntityHandle gather_set_start_vertex );
00084
00085 //! Create gather set cells with padding (padded cells will have the same number of edges)
00086 ErrorCode create_padded_gather_set_cells( EntityHandle gather_set, EntityHandle gather_set_start_vertex );
00087
00088 private:
00089 int maxEdgesPerCell;
00090 int numCellGroups;
00091 bool createGatherSet;
00092 std::map< EntityHandle, int > cellHandleToGlobalID;
00093 Range facesOwned;
00094 };
00095
00096 } // namespace moab
00097
00098 #endif