From aca01fa6c403e8892f0f2f38758ed919a0ee7bff Mon Sep 17 00:00:00 2001 From: Bruno Seny <bruno.seny@student.uclouvain.be> Date: Tue, 24 Apr 2012 16:59:30 +0000 Subject: [PATCH] update multi-constraint partitioning --- Mesh/meshPartition.cpp | 6 +++--- Mesh/meshPartitionObjects.h | 29 +++-------------------------- Mesh/meshPartitionOptions.h | 6 ++++-- 3 files changed, 10 insertions(+), 31 deletions(-) diff --git a/Mesh/meshPartition.cpp b/Mesh/meshPartition.cpp index a0164a2caf..2b7eb1f544 100644 --- a/Mesh/meshPartition.cpp +++ b/Mesh/meshPartition.cpp @@ -443,7 +443,7 @@ int PartitionGraph(Graph &graph, meshPartitionOptions &options) metisOptions[2] = 1; metisOptions[3] = 1; metisOptions[4] = 0; - graph.fillWithMultipleWeights(options.ncon,options.getWeightMap()); + graph.fillWithMultipleWeights(options.ncon,options.getWeightMapV(), options.getWeightMapE()); METIS_mCPartGraphRecursive (&n,&options.ncon,&graph.xadj[graph.section[iSec]], &graph.adjncy[graph.section[iSec]], &graph.vwgts[graph.section[iSec]], &graph.adjwgts[graph.section[iSec]], &wgtflag, &numflag, @@ -459,9 +459,9 @@ int PartitionGraph(Graph &graph, meshPartitionOptions &options) metisOptions[3] = options.refine_algorithm; metisOptions[4] = 0; for(int u=0;u<options.ncon;u++){ - ubvec[u]=1.03; + ubvec[u]=1.3; } - graph.fillWithMultipleWeights(options.ncon,options.getWeightMap()); + graph.fillWithMultipleWeights(options.ncon,options.getWeightMapV(), options.getWeightMapE()); if (options.num_partitions > 1) { METIS_mCPartGraphKway (&n,&options.ncon,&graph.xadj[graph.section[iSec]], diff --git a/Mesh/meshPartitionObjects.h b/Mesh/meshPartitionObjects.h index 53f67cdefe..ac3e203043 100644 --- a/Mesh/meshPartitionObjects.h +++ b/Mesh/meshPartitionObjects.h @@ -154,29 +154,6 @@ class Graph // Translated vertex numbers start from 1 c2w[grVertMapIt->second.index] = i + 1; } - void computeLoads(int numParts, int numCon){ - loads=new fullMatrix<int> (numParts,numCon); - for(int i=0; i<numParts;i++){ - for(int j=0; j<partition.size(); j++){ - if(partition[j]==i){ - for(int k=0; k<numCon;k++){ - (*loads)(i, k)+=vwgts[j*numCon+k]; - } - } - } - } - } - void checkLoads(int numParts, int numCon){ - printf("******************************************************* \n"); - for(int i=0; i<numParts;i++){ - printf("------- PARTITION %d: [", i+1); - for(int j=0; j<numCon; j++){ - printf(" %d", (*loads)(i, j)); - } - printf("] -------\n"); - } - printf("******************************************************* \n"); - } void fillWeights(std::vector<int> wgts) { int num = 0; @@ -186,7 +163,7 @@ class Graph } } // Add multiple weights on vertices of the graph given in a map between original element Numbers and their corresponding vector of weights - void fillWithMultipleWeights(int ncon, std::map<int, std::vector<int> > weightMap) + void fillWithMultipleWeights(int ncon, std::map<int, std::vector<int> > vWeightMap, std::map<int, int> eWeightMap) { std::vector<MElement*>::iterator eIt; vwgts.resize(element.size()*ncon); @@ -194,10 +171,10 @@ class Graph int localElNum=0; for(eIt=element.begin();eIt !=element.end();eIt++){ for(int i=0; i<ncon; i++){ - vwgts[localElNum*ncon+i]=weightMap[(*eIt)->getNum()][i+1]; + vwgts[localElNum*ncon+i]=vWeightMap[(*eIt)->getNum()][i+1]; } for(int j=xadj[localElNum];j<xadj[localElNum+1];j++){ - adjwgts[j]+=weightMap[(*eIt)->getNum()][0]; + adjwgts[j]+=eWeightMap[(*eIt)->getNum()]; } localElNum+=1; } diff --git a/Mesh/meshPartitionOptions.h b/Mesh/meshPartitionOptions.h index a869cad665..da7925039d 100644 --- a/Mesh/meshPartitionOptions.h +++ b/Mesh/meshPartitionOptions.h @@ -81,7 +81,8 @@ class meshPartitionOptions // NODAL WEIGHT std::vector<int> nodalWeights; - std::map<int, std::vector<int> > weightMap; + std::map<int, std::vector<int> > vWeightMap; + std::map<int, int > eWeightMap; std::vector<int> tolerance; public: @@ -91,7 +92,8 @@ class meshPartitionOptions int getNumOfPartitions(){ return num_partitions; } void setNumConstraints(int numConst){ ncon = numConst; } int getNumConstraints(){ return ncon; } - std::map<int, std::vector<int> > &getWeightMap(){ return weightMap; } + std::map<int, std::vector<int> > &getWeightMapV(){ return vWeightMap; } + std::map<int, int > &getWeightMapE(){ return eWeightMap; } void setDefaults() { partitioner = 2; -- GitLab