![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 #ifndef READ_PARALLEL_HPP
00002 #define READ_PARALLEL_HPP
00003
00004 #include "moab/Forward.hpp"
00005 #include "moab/ReaderIface.hpp"
00006 #include "DebugOutput.hpp"
00007
00008 #include
00009
00010 namespace moab
00011 {
00012
00013 class ReadUtilIface;
00014 class ParallelComm;
00015 class Error;
00016
00017 class ReadParallel
00018 {
00019
00020 public:
00021 static ReaderIface* factory( Interface* );
00022
00023 //! load a file
00024 ErrorCode load_file( const char* file_name,
00025 const EntityHandle* file_set,
00026 const FileOptions& opts,
00027 const ReaderIface::SubsetList* subset_list = 0,
00028 const Tag* file_id_tag = 0 );
00029
00030 //! load multiple files
00031 ErrorCode load_file( const char** file_names,
00032 const int num_files,
00033 const EntityHandle* file_set,
00034 const FileOptions& opts,
00035 const ReaderIface::SubsetList* subset_list = 0,
00036 const Tag* file_id_tag = 0 );
00037
00038 ErrorCode load_file( const char** file_names,
00039 const int num_files,
00040 const EntityHandle* file_set,
00041 int parallel_mode,
00042 std::string& partition_tag_name,
00043 std::vector< int >& partition_tag_vals,
00044 bool distrib,
00045 bool partition_by_rank,
00046 std::vector< int >& pa_vec,
00047 const FileOptions& opts,
00048 const ReaderIface::SubsetList* subset_list,
00049 const Tag* file_id_tag,
00050 const int reader_rank,
00051 const bool cputime,
00052 const int resolve_dim,
00053 const int shared_dim,
00054 const int ghost_dim,
00055 const int bridge_dim,
00056 const int num_layers,
00057 const int addl_ents );
00058 //! Constructor
00059 ReadParallel( Interface* impl = NULL, ParallelComm* pc = NULL );
00060
00061 //! Destructor
00062 virtual ~ReadParallel() {}
00063
00064 static const char* parallelOptsNames[];
00065
00066 enum ParallelActions
00067 {
00068 PA_READ = 0,
00069 PA_READ_PART = 1,
00070 PA_BROADCAST = 2,
00071 PA_DELETE_NONLOCAL = 3,
00072 PA_CHECK_GIDS_SERIAL = 4,
00073 PA_GET_FILESET_ENTS = 5,
00074 PA_RESOLVE_SHARED_ENTS = 6,
00075 PA_EXCHANGE_GHOSTS = 7,
00076 PA_RESOLVE_SHARED_SETS = 8,
00077 PA_AUGMENT_SETS_WITH_GHOSTS = 9,
00078 PA_PRINT_PARALLEL = 10,
00079 PA_CREATE_TRIVIAL_PARTITION = 11,
00080 PA_CORRECT_THIN_GHOSTS = 12
00081 };
00082
00083 static const char* ParallelActionsNames[];
00084
00085 enum ParallelOpts
00086 {
00087 POPT_NONE = 0,
00088 POPT_BCAST,
00089 POPT_BCAST_DELETE,
00090 POPT_READ_DELETE,
00091 POPT_READ_PART,
00092 POPT_DEFAULT
00093 };
00094
00095 //! PUBLIC TO ALLOW TESTING
00096 ErrorCode delete_nonlocal_entities( std::string& ptag_name,
00097 std::vector< int >& ptag_vals,
00098 bool distribute,
00099 EntityHandle file_set );
00100
00101 ErrorCode delete_nonlocal_entities( EntityHandle file_set );
00102
00103 protected:
00104 ErrorCode create_partition_sets( std::string& ptag_name, EntityHandle file_set );
00105
00106 private:
00107 Interface* mbImpl;
00108
00109 // each reader can keep track of its own pcomm
00110 ParallelComm* myPcomm;
00111
00112 DebugOutput myDebug;
00113
00114 Error* mError;
00115 };
00116
00117 inline ErrorCode ReadParallel::load_file( const char* file_name,
00118 const EntityHandle* file_set,
00119 const FileOptions& opts,
00120 const ReaderIface::SubsetList* subset_list,
00121 const Tag* file_id_tag )
00122 {
00123 return load_file( &file_name, 1, file_set, opts, subset_list, file_id_tag );
00124 }
00125
00126 } // namespace moab
00127
00128 #endif