vector< vector<int> > SpinAdapted::CSFUTIL::generate_partitions(int n) { //n is the irrep of the symmetry element. if (Symmetry::sizeofIrrep(n) == 1) { pout << "cannot generate partition of irrep which a single row "<<endl; exit(0); } vector<int> thispartition(1, n); vector< vector<int> > result(1, thispartition); if (n == 4 || n==5) { return result; } else { for (int irrep = 4; irrep <n ; irrep++) { int remainder = (IrrepSpace(n)+IrrepSpace(irrep))[0].getirrep(); vector< vector<int> > partitions = generate_partitions(irrep); for (int i=0; i<partitions.size(); i ++) { vector<int> ithpartition = partitions[i]; if (ithpartition[0] <= remainder) { vector<int>::iterator it = ithpartition.begin(); ithpartition.insert(it, remainder); result.push_back(ithpartition); } } } return result; } }
void separator_pool::renew_pool(MISConfig & config, graph_access & G, bool init, bool scores, population_mis & pop) { mis_log::instance()->print_pool_title(); mis_log::instance()->restart_building_pool_timer(); if (!init) { clear_partitions(); clear_separators(); clear_k_partitions(); clear_k_separators(); } generate_partitions(config, G); generate_separators(config, G); if (config.use_multiway_vc) generate_k_partitions(config, G); else generate_k_separators(config, G); if (scores) calculate_scores(config, G, pop); mis_log::instance()->print_separator(); }