00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef SST_CORE_PART_ZOLT
00014 #define SST_CORE_PART_ZOLT
00015
00016
00017 #ifdef HAVE_ZOLTAN
00018
00019 #include <sst/core/part/sstpart.h>
00020 #include <sst/core/output.h>
00021
00022
00023
00024
00025 #ifdef SST_CONFIG_HAVE_MPI
00026 #undef SST_CONFIG_HAVE_MPI
00027 #include <zoltan.h>
00028 #include <mpi.h>
00029 #define SST_CONFIG_HAVE_MPI
00030 #endif
00031
00032 using namespace SST;
00033 using namespace SST::Partition;
00034
00035 namespace SST {
00036 namespace Partition {
00037
00038
00039
00040
00041
00042
00043
00044 class SSTZoltanPartition : public SST::Partition::SSTPartitioner {
00045
00046 public:
00047
00048
00049
00050
00051 SSTZoltanPartition(int verbosity);
00052 ~SSTZoltanPartition();
00053
00054
00055
00056
00057
00058
00059
00060 void performPartition(PartitionGraph* graph);
00061
00062 bool requiresConfigGraph() { return false; }
00063
00064 bool spawnOnAllRanks() { return true; }
00065
00066 static SSTPartitioner* allocate(int total_ranks, int my_rank, int verbosity) {
00067 return new SSTZoltanPartition(verbosity);
00068 }
00069
00070 protected:
00071 void initZoltan();
00072 int rankcount;
00073 struct Zoltan_Struct * zolt_config;
00074 int rank;
00075
00076 static bool initialized;
00077 };
00078
00079 }
00080 }
00081
00082 #endif // End of HAVE_ZOLTAN
00083
00084 #endif