diff --git a/Mesh/meshPartition.cpp b/Mesh/meshPartition.cpp index a0164a2cafaf33905ac25dab70501c131658bafb..2b7eb1f544c2b610253737d23eaee7b39261c1d0 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 53f67cdefef407ff0febc19b8b966554af70c253..ac3e203043f08d74ed99eaad5ba32013c8260f72 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 a869cad6653278d038fb896bbfcc6ffa36915875..da7925039df38519b66dcd485d99456e4577419d 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;