35 #define MPICH_SKIP_MPICXX
36 #define OMPI_SKIP_MPICXX
81 const List<scalar>& cWeights,
88 word method(
"recursive");
92 idx_t numCells = xadj.size()-1;
95 List<idx_t> options(METIS_NOPTIONS);
96 METIS_SetDefaultOptions(options.data());
100 Field<real_t> processorWeights;
103 List<idx_t> cellWeights;
106 List<idx_t> faceWeights;
110 const scalar minWeights =
min(cWeights);
112 if (!cWeights.empty())
117 <<
"Illegal minimum weight " << minWeights
121 if (cWeights.size() != numCells)
124 <<
"Number of cell weights " << cWeights.size()
125 <<
" does not equal number of cells " << numCells
130 cellWeights.setSize(cWeights.size());
133 cellWeights[i] = idx_t(cWeights[i]/minWeights);
141 const dictionary& coeffDict = *coeffsDictPtr;
145 if (coeffDict.readIfPresent(
"method", method))
147 if (method !=
"recursive" && method !=
"k-way")
150 <<
"Method " << method <<
" in metisCoeffs in dictionary : "
152 <<
" should be 'recursive' or 'k-way'"
156 Info<<
"metisDecomp : Using Metis method " << method
160 if (coeffDict.readIfPresent(
"options", options))
162 if (options.size() != METIS_NOPTIONS)
165 <<
"Number of options in metisCoeffs in dictionary : "
167 <<
" should be " << METIS_NOPTIONS
171 Info<<
"metisDecomp : Using Metis options " << options
175 if (coeffDict.readIfPresent(
"processorWeights", processorWeights))
177 processorWeights /=
sum(processorWeights);
179 if (processorWeights.size() !=
nDomains_)
182 <<
"Number of processor weights "
183 << processorWeights.size()
184 <<
" does not equal number of domains " <<
nDomains_
194 ConstPrecisionAdaptor<idx_t, label, List> xadj_param(xadj);
195 ConstPrecisionAdaptor<idx_t, label, List> adjncy_param(adjncy);
198 decomp.resize(numCells);
199 PrecisionAdaptor<idx_t, label, List> decomp_param(decomp,
false);
204 if (method ==
"recursive")
206 METIS_PartGraphRecursive
210 xadj_param.constCast().data(),
211 adjncy_param.constCast().data(),
216 processorWeights.data(),
220 decomp_param.ref().data()
229 xadj_param.constCast().data(),
230 adjncy_param.constCast().data(),
235 processorWeights.data(),
239 decomp_param.ref().data()
251 metisLikeDecomp(typeName, decompDict, selectionType::NULL_DICT)
257 const dictionary& decompDict,
261 metisLikeDecomp(typeName, decompDict,
regionName, selectionType::NULL_DICT)