61 using Teuchos::ArrayRCP;
70 ArrayRCP<ArrayRCP<zzpart_t> > &
idList, ArrayRCP<ArrayRCP<zscalar_t> > &sizeList)
72 ArrayRCP<zzpart_t> *idArrays =
new ArrayRCP<zzpart_t> [wdim];
73 ArrayRCP<zscalar_t> *sizeArrays =
new ArrayRCP<zscalar_t> [wdim];
75 for (
int w=0; w < wdim; w++){
76 idArrays[w] = arcp(ids[w], 0, lens[w],
false);
77 sizeArrays[w] = arcp(sizes[w], 0, lens[w],
false);
80 idList = arcp(idArrays, 0, wdim,
true);
81 sizeList = arcp(sizeArrays, 0, wdim,
true);
84 int main(
int argc,
char *argv[])
86 Teuchos::GlobalMPISession session(&argc, &argv);
87 RCP<const Comm<int> > comm = Teuchos::DefaultComm<int>::getComm();
88 int nprocs = comm->getSize();
89 int rank = comm->getRank();
96 int numIdsPerProc = 10;
97 int maxNumWeights = 3;
98 int maxNumPartSizes = nprocs;
99 int *lengths =
new int [maxNumWeights];
103 for (
int w=0; w < maxNumWeights; w++){
104 idLists[w] =
new zzpart_t [maxNumPartSizes];
105 sizeLists[w] =
new zscalar_t [maxNumPartSizes];
116 for (
int i=0, x=rank*numIdsPerProc; i < numIdsPerProc; i++)
124 int numGlobalParts = nprocs;
127 ArrayRCP<ArrayRCP<zzpart_t> > ids;
128 ArrayRCP<ArrayRCP<zscalar_t> > sizes;
130 memset(lengths, 0,
sizeof(
int) * maxNumWeights);
133 idLists[0][0] = rank;
134 sizeLists[0][0] = rank%2 + 1.0;
136 makeArrays(1, lengths, idLists, sizeLists, ids, sizes);
142 for (
int i=0; i < numGlobalParts; i++){
143 normalizedPartSizes[i] = 1.0;
144 if (i % 2) normalizedPartSizes[i] = 2.0;
145 sumSizes += normalizedPartSizes[i];
147 for (
int i=0; i < numGlobalParts; i++)
148 normalizedPartSizes[i] /= sumSizes;
153 RCP<Zoltan2::PartitioningSolution<idInput_t> > solution;
160 ids.view(0,nWeights),
161 sizes.view(0,nWeights)));
163 catch (std::exception &e){
171 if (solution->getTargetGlobalNumberOfParts() != size_t(numGlobalParts))
174 if (!
fail && solution->getLocalNumberOfParts() != 1)
177 if (!
fail && !solution->oneToOnePartDistribution())
180 if (!
fail && solution->getPartDistribution() != NULL)
183 if (!
fail && solution->getProcDistribution() != NULL)
187 ((nprocs>1 && solution->criteriaHasUniformPartSizes(0)) ||
188 (nprocs==1 && !solution->criteriaHasUniformPartSizes(0))) )
192 for (
int partId=0; !
fail && partId < numGlobalParts; partId++){
193 zscalar_t psize = solution->getCriteriaPartSize(0, partId);
195 if ( psize < normalizedPartSizes[partId] -
epsilon ||
196 psize > normalizedPartSizes[partId] +
epsilon )
201 delete [] normalizedPartSizes;
211 for (
int i=0; i < numIdsPerProc; i++){
212 partAssignments[i] = myGids[i] % numGlobalParts;
214 ArrayRCP<zzpart_t> partList = arcp(partAssignments, 0, numIdsPerProc);
217 solution->setParts(partList);
219 catch (std::exception &e){
232 const zzpart_t *parts = solution->getPartListView();
233 for (
int i=0; !
fail && i < numIdsPerProc; i++){
234 if (parts[i] !=
zzpart_t(myGids[i] % numGlobalParts))
245 std::cout <<
"PASS" << std::endl;
259 for (
int w=0; w < maxNumWeights; w++){
260 delete [] idLists[w];
261 delete [] sizeLists[w];
int globalFail(const RCP< const Comm< int > > &comm, int fail)
A simple class that can be the User template argument for an InputAdapter.
#define TEST_FAIL_AND_EXIT(comm, ok, s, code)
Defines the PartitioningSolution class.
int main(int argc, char *argv[])
idInput_t::part_t zzpart_t
common code used by tests
This class represents a collection of global Identifiers and their associated weights, if any.
list idList
Match up parameters to validators.
void makeArrays(int wdim, int *lens, zzpart_t **ids, zscalar_t **sizes, ArrayRCP< ArrayRCP< zzpart_t > > &idList, ArrayRCP< ArrayRCP< zscalar_t > > &sizeList)
A PartitioningSolution is a solution to a partitioning problem.
The user parameters, debug, timing and memory profiling output objects, and error checking methods...
static const std::string fail
InputTraits< User >::part_t part_t
Defines the BasicIdentifierAdapter class.
void printFailureCode(const RCP< const Comm< int > > &comm, int fail)
Zoltan2::BasicIdentifierAdapter< zzuser_t > idInput_t
Zoltan2::BasicUserTypes< zscalar_t, zlno_t, zgno_t > zzuser_t