コード例 #1
0
ファイル: csf.C プロジェクト: sanshar/StackBlock
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;
  }

}
コード例 #2
0
ファイル: separator_pool.cpp プロジェクト: sebalamm/KaMIS
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();
}