Beispiel #1
0
PetscErrorCode PressurePoisson( UserContext *uc )
{
  Mat A;
  Vec b, px, py, p, u, v, ss, c;
  KSP ksp;
  PetscErrorCode ierr;
  
  
  PetscFunctionBegin;
  PetscLogEventBegin(EVENT_PressurePoisson,0,0,0,0);
  PetscLogEventRegister(&EVENT_PressurePoisson,"PressurePoisson", 0);
  
  /*  Assemble and Solve for pressure */
ierr = PetscPrintf(PETSC_COMM_WORLD, "***********************\nPRESSURE\n"); CHKERRQ(ierr);
  ierr = AssemblePressureMatrx( uc ); CHKERRQ(ierr);
  ierr = AssemblePressureRHS( uc ); CHKERRQ(ierr);
  ierr = SolvePressure( uc ); CHKERRQ(ierr);
  ierr = WriteResult( uc, uc->p, "p_pressure" ); CHKERRQ(ierr);
    
  /*  Assemble and Solve for Velocity  */
ierr = PetscPrintf(PETSC_COMM_WORLD, "***********************\nVELOCITY\n"); CHKERRQ(ierr);
  ierr = AssembleVelocityRHS( uc ); CHKERRQ(ierr);
  ierr = AssembleVelocityMatrix( uc ); CHKERRQ(ierr);
  
  ierr = KSPSetOperators(uc->ksp,uc->A, uc->A, SAME_PRECONDITIONER); CHKERRQ(ierr);
  ierr = KSPSolve(uc->ksp,uc->px,uc->u);CHKERRQ(ierr);
  ierr = KSPSolve(uc->ksp,uc->py,uc->v);CHKERRQ(ierr);
  ierr = WriteResult( uc, uc->u, "u_velocity" ); CHKERRQ(ierr);
  ierr = WriteResult( uc, uc->v, "v_velocity" ); CHKERRQ(ierr);

  ierr = ComputeShearStress(uc); CHKERRQ(ierr);
  ierr = WriteResult( uc, uc->ss,"shear_stress" ); CHKERRQ(ierr);
  ierr = ConservationTest(uc); CHKERRQ(ierr);
  
  /*  Output indexing  */
  PetscReal *idx;
  VecGetArray(uc->b,&idx);
  for( int i = 0; i < uc->numNodes; i++)
    idx[i] = i;
  VecRestoreArray(uc->b,&idx);
  WriteResult(uc, uc->b, "indexes");
  VecSet(uc->b, 0.);
  
  ierr = VecDestroy(uc->c); CHKERRQ(ierr);
  ierr = VecDestroy(uc->ss); CHKERRQ(ierr);
  ierr = MatDestroy(uc->A); CHKERRQ(ierr);
  ierr = KSPDestroy(uc->ksp); CHKERRQ(ierr);
  ierr = VecDestroy(uc->b); CHKERRQ(ierr);
  ierr = VecDestroy(uc->p); CHKERRQ(ierr);
  ierr = VecDestroy(uc->px); CHKERRQ(ierr);
  ierr = VecDestroy(uc->py); CHKERRQ(ierr);
  ierr = VecDestroy(uc->u); CHKERRQ(ierr);
  ierr = VecDestroy(uc->v); CHKERRQ(ierr);
  PetscLogEventEnd(EVENT_PressurePoisson,0,0,0,0);
  PetscFunctionReturn(0);
}
Beispiel #2
0
int main(int argc, char **argv)
{
  Args args(argc, argv, "DRIVER FILE");
  DebugReplay *replay = CreateDebugReplay(args);
  if (replay == NULL)
    return EXIT_FAILURE;

  args.ExpectEnd();

  Result result;
  Run(*replay, result);
  delete replay;

  const ContestStatistics olc_plus = SolveContest(Contest::OLC_PLUS);
  const ContestStatistics dmst = SolveContest(Contest::DMST);

  TextWriter writer("/dev/stdout", true);

  {
    JSON::ObjectWriter root(writer);

    WriteResult(root, result);
    root.WriteElement("phases", WritePhaseList,
                      flight_phase_detector.GetPhases());
    root.WriteElement("performance", WritePerformanceStats,
                      flight_phase_detector.GetTotals());
    root.WriteElement("contests", WriteContests, olc_plus, dmst);
  }
}
Beispiel #3
0
 virtual WriteResult writeObject(const osg::Object& obj,std::ostream& fout,const Options* options=NULL) const 
 {
     const osg::Node* node = dynamic_cast<const osg::Node*>(&obj);
     if (node)
         return writeNode(*node, fout, options);
     else 
         return WriteResult(WriteResult::FILE_NOT_HANDLED); 
 }
Beispiel #4
0
 virtual WriteResult writeNode(const osg::Node& node,const std::string& fileName,const Options* options =NULL) const 
 { 
     if (!acceptsExtension(osgDB::getFileExtension(fileName)))
         return WriteResult(WriteResult::FILE_NOT_HANDLED); 
         
     std::ofstream f(fileName.c_str());
     std::string materialFile = osgDB::getNameLessExtension(fileName) + ".mtl";
     OBJWriterNodeVisitor nv(f, osgDB::getSimpleFileName(materialFile));
     
     // we must cast away constness
     (const_cast<osg::Node*>(&node))->accept(nv);
     
     std::ofstream mf(materialFile.c_str());
     nv.writeMaterials(mf);
      
     return WriteResult(WriteResult::FILE_SAVED); 
 }
static void writeResults(FILE *fp, int topicId, const char *topicName, const ResultList *list)
{
  int top_k = list->results;
  const char *format = GetOptionalConfig("RESULTS-FORMAT", "%T Q0 %D %r %s Topsig-Exhaustive %h\\n");
  for (int i = 0; i < top_k; i++) {
    WriteResult(fp, format, topicId, topicName, list->docids[i], list->metadata[i].docname, i + 1, 1000000 - i, list->distances[i], list->metadata[i].uniqueTerms, list->metadata[i].documentCharLength, list->metadata[i].totalTerms, list->metadata[i].quality, list->metadata[i].offsetBegin, list->metadata[i].offsetEnd, list->metadata[i].unused7, list->metadata[i].unused8);
  }
}
Beispiel #6
0
 virtual WriteResult writeNode(const osg::Node& node,std::ostream& fout,const Options* =NULL) const 
 { 
     // writing to a stream does not support materials
     
     OBJWriterNodeVisitor nv(fout);
     
     // we must cast away constness
     (const_cast<osg::Node*>(&node))->accept(nv);
 
     return WriteResult(WriteResult::FILE_SAVED); 
 }
    virtual WriteResult writeNode(const osg::Node& node,std::ostream& fout,const Options* options=NULL) const
    {
        ObjOptionsStruct localOptions = parseOptions(options);
        fout.precision(localOptions.precision);

        // writing to a stream does not support materials

        OBJWriterNodeVisitor nv(fout);

        // we must cast away constness
        (const_cast<osg::Node*>(&node))->accept(nv);

        return WriteResult(WriteResult::FILE_SAVED);
    }
    virtual WriteResult writeObject(const osg::Object& obj,std::ostream& fout, const osgDB::ReaderWriter::Options* options) const
    {
        osgDB::Output foutput;
        foutput.setOptions(options);

        std::ios &fios = foutput;
        fios.rdbuf(fout.rdbuf());

        if (fout)
        {
            setPrecision(foutput,options);

            foutput.writeObject(obj);
            return WriteResult::FILE_SAVED;
        }
        return WriteResult("Unable to write to output stream");
    }
    virtual WriteResult writeObject(const osg::Object& obj,const std::string& fileName, const osgDB::ReaderWriter::Options* options) const
    {
        std::string ext = osgDB::getLowerCaseFileExtension(fileName);
        if (!acceptsExtension(ext)) return WriteResult::FILE_NOT_HANDLED;

        osgDB::Output fout(fileName.c_str());
        fout.setOptions(options);
        if (fout)
        {
            setPrecision(fout,options);

            fout.writeObject(obj);
            fout.close();
            return WriteResult::FILE_SAVED;
        }
        return WriteResult("Unable to open file for output");
    }
Beispiel #10
0
PetscErrorCode ConservationTest(UserContext *uc)
{
  PetscReal val[4], comp, *u, *v, *b, vx, vy,u1,u2,v1,v2;
  int i,j;
  Node *n;
  PetscInt *nei;
  PetscErrorCode ierr;
printf("***************************************************\n");
  PetscFunctionBegin;
  PetscLogEventBegin(EVENT_ConservationTest,0,0,0,0);
  PetscLogEventRegister(&EVENT_ConservationTest,"ConservationTest", 0);
  VecGetArray(uc->u, &u);
  VecGetArray(uc->v, &v);
  VecGetArray(uc->b, &b);
printf("***************************************************\n");
  for (i = 0; i < uc->numNodes; ++i)
  {
    /*
    for( j = 0; j < 4; j++ ) val[j] = 0.;
    if( u[i] < 0. ) { val[2] += u[i];}
    if( u[i] > 0. ) { val[1] -= u[i];}
    if( v[i] < 0. ) { val[3] += v[i];}
    if( v[i] > 0. ) { val[0] -= v[i];}
    for( j = 0; j < 4; j++ ) comp += val[i];*/
    n = &uc->nodes[i];
    if( n->numNei == 4 )
    {
      nei = &n->nei[0];
      vx = u[nei[1]] - u[nei[2]];
      vy = v[nei[0]] - v[nei[3]];
      u1 = u[nei[1]] - u[nei[2]];
      b[i] = vx + vy;
    } else {
      b[i] = 0.;
    }
  }
  printf("***************************************************\n");
  VecRestoreArray(uc->b, &b);
  VecRestoreArray(uc->v, &v);
  VecRestoreArray(uc->u, &u);
  printf("***************************************************\n");
  WriteResult(uc, uc->b, "conservation");
  PetscLogEventEnd(EVENT_ConservationTest,0,0,0,0);
  PetscFunctionReturn(0);
}
Beispiel #11
0
void SearchThread::SearchDir(const wxString& path, const SearchInfo& si, ProjectInfoHandler& infoHandler) {
    MMapBuffer buf;
    wxFileName filepath;
    vector<FileMatch> matches;

    wxArrayString dirs;
    wxArrayString filenames;
    infoHandler.GetDirAndFileLists(path, dirs, filenames);

    for (size_t f = 0; f < filenames.size(); ++f) {
        if (!m_isSearching) return;
        m_outputCrit.Enter();
        m_currentPath = path + filenames[f];
        m_outputCrit.Leave();
        filepath = m_currentPath;

        // Map the file to memory
        buf.Open(filepath);
        if (!buf.IsMapped()) {
            wxLogDebug(wxT(" Mapping failed!"));
            continue;
        }

        // Search the file
        DoSearch(buf, si, matches);
        if (matches.empty()) continue;

        // Show matches
        WriteResult(buf, filepath, matches);
        matches.clear();
    }

    for (size_t d = 0; d < dirs.size(); ++d) {
        const wxString dirpath = path + dirs[d] + wxFILE_SEP_PATH;
        SearchDir(dirpath, si, infoHandler);
    }
}
Beispiel #12
0
int main(int argc, const char **argv)

{
    IntMatrix_t **optab = NULL;
    int flags;
    SpinUpInfo_t SpInfo;

    if (Init(argc,argv) != 0)
    {
	MTX_ERROR("Initialization failed");
	return 1;
    }

    if (OpName != NULL)
	optab = &OpTable;

    SpinUpInfoInit(&SpInfo);
    if (MaxDim > 0)
	SpInfo.MaxSubspaceDimension = MaxDim;
    if (MaxTries > 0)
	SpInfo.MaxTries = MaxTries;

    flags = 0;

    /* Seed mode: SF_MAKE, SF_EACH, or SF_FIRST.
       ----------------------------------------- */
    if (TryOneVector)
	flags |= SF_FIRST;
    else if (TryLinearCombinations)
	flags |= SF_MAKE;
    else
	flags |= SF_EACH;

    /* Search mode: SF_CYCLIC, SF_SUB, or SF_COMBINE.
       ---------------------------------------------- */
    if (FindCyclicVector)
	flags |= SF_CYCLIC;
    else if (FindClosure)
	flags |= SF_COMBINE;
    else
	flags |= SF_SUB;

    /* Spin-up mode: SF_STD or nothing.
       -------------------------------- */
    if (Standard)
	flags |= SF_STD;

    if (!Permutations)
	Span = SpinUp(Seed,Rep,flags,optab,&SpInfo);
    else
	Span = SpinUpWithPermutations(Seed,ngen,Perm,flags,optab,&SpInfo);
    if (Span == NULL)
    {
	MTX_ERROR("Spin-up failed");
	return -1;
    }
    if (WriteResult() != 0)
	return 1;
    Cleanup();
    return 0;
}
Beispiel #13
0
int MatchCSA::MatchNetwork(){
/************************************************
通信連続対局
************************************************/
#ifdef WIN32
	HANDLE hTh_r;       // レシーブスレッド
	HANDLE hTh_e;       // 相手番思考スレッド
#else
	pthread_t tid_r;    // レシーブスレッド
	pthread_t tid_e;    // 相手番思考スレッド
#endif
	// スレッドを沸かしたかどうか
	bool bTh_r = false; // レシーブスレッド
	bool bTh_e = false; // 相手番思考スレッド

	bool started;

	int i;

	LoadConfig();

	for( i = 0 ; i < repeat ; i++ ){
		started = false;

		// 定刻まで待機
		cout << "Waiting.." << '\n';
		if( !Timer() ){
			// 打ち切り
			cout << "Stop!" << '\n';
			return 1;
		}

		// フラグを下げる。
		rflag = 0U;

		// 接続
		if( !Connect() ){
			return 0;
		}

		cout << "Connected." << '\n';

		// 受信スレッドを沸かす。
#ifdef WIN32
		if( INVALID_HANDLE_VALUE != ( hTh_r = (HANDLE)_beginthreadex( NULL, 0, ReceiveThread, (LPVOID)this, 0, NULL ) ) ){
#else
		if( 0 == pthread_create( &tid_r, NULL, ReceiveThread, (void*)this ) ){
#endif
			bTh_r = true;
		}

		// ログイン
		if( !Login() ){
			Disconnect();
			return 0;
		}

		cout << "Login OK." << '\n';

		// 対局条件取得
		if( !GetRecFlag( MATCH_CSA_SUMMARY ) ){
			goto lab_logout;
		}

#if USE_QUICKCOPY
		pcons->PresetTrees( pshogi );
#endif

		// 対局開始
		if( !SendAgree() ){
			goto lab_logout;
		}

		started = true;

		MutexLock();
		cout << "Start." << '\n';
		MutexUnlock();

		// 開始時刻
		start.setNow();
		end = start;

		while( 1 ){
			// 局面の表示
#if POSIX
			pshogi->PrintBan( true );
#else
			pshogi->PrintBan();
#endif

#ifndef NDEBUG
			// Debug用棋譜出力
			OutputFileCSA( "debug.csa" );
#endif

			if( pshogi->GetSengo() == info.sengo ){
				// 自分の手番
				THINK_INFO think_info;
				MOVE move;
				int ret;
				int l;

				memset( &think_info, 0, sizeof(THINK_INFO) );

				// 思考時間
				l = limit;

				// 時間制限あり
				if( atime.IsValidSetting() ){
					// 秒読みあり
					if( atime.GetReadingOffSeconds() > 0 ){
						// 秒読みも含めた残り時間を超えようとしている場合
						if( atime.GetUsableTime() <= (double)limit ){
							l = (int)( atime.GetUsableTime() - 1.0 );
						}
					}
					// 切れ負け
					else{
						// 持ち時間の20分の1を上限
						if( atime.GetRemainingTime() < limit * 20.0 ){
							l = (int)( atime.GetRemainingTime() / 20.0 ) + 1;
						}
					}
				}
				else{
					cout << "unlimited.\n";
				}

				// 乱数合議用正規乱数の偏差
				pcons->SetDeviation( deviation );

				// 探索
				if( limit_node != U64(0) ){
					pcons->SetNodeLimit( limit_node );
				}
				pcons->SetLimit( l );
				ret = pcons->SearchLimit( pshogi, pbook, &move, depth,
					&think_info, Think::SEARCH_DISP | Think::SEARCH_EASY );
				pcons->UnsetLimit();
				if( limit_node != U64(0) ){ // UnsetNodeLimitは無条件で読んでも良い。
					pcons->UnsetNodeLimit();
				}

#ifndef NDEBUG
				Debug::Print( "split=%u, split_failed=%u, unused_tree=%u\n",
					(unsigned)think_info.split, (unsigned)think_info.split_failed,
					(unsigned)think_info.unused_tree );
#endif

				// 時間切れなど
				if( rflag & MATCH_CSA_MASK_END ){
					SetResult();
					goto lab_logout;
				}

				// 投了
				if( ret == 0 || resign.bad( think_info ) ){
					SendToryo();
					SetResult( RES_LOSE );
					goto lab_logout;
				}

				if( pshogi->MoveD( move ) ){
					// 指し手の送信
					if( !SendMove( &think_info ) ){
						SetResult( RES_ERR );
						goto lab_logout;
					}
				}
				else{
					// 投了
					SendToryo();
					SetResult( RES_LOSE );
					goto lab_logout;
				}
			}
			else{
				// 相手の手番
				unsigned rec;

				// 相手番思考を開始
				// 思考スレッドを沸かす。
#if 1
				eflag = 0;
				if( enemyTurnSearch &&
#ifdef WIN32
					INVALID_HANDLE_VALUE != ( hTh_e = (HANDLE)_beginthreadex( NULL, 0, EnemyTurnSearchThread, (LPVOID)this, 0, NULL ) )
#else
					0 == pthread_create( &tid_e, NULL, EnemyTurnSearchThread, (void*)this )
#endif
				){
					bTh_e = true;
				}
#endif

				// 相手の手を待つ。
				rec = GetRecFlag( MATCH_CSA_MASK_MOVE | MATCH_CSA_MASK_END );

				// 相手番思考を終了
				// スレッドの終了を待つ。
#if 1
				eflag = 1;
				if( bTh_e ){
#ifdef WIN32
					WaitForSingleObject( hTh_e, INFINITE );
					CloseHandle( hTh_e );
#else
					pthread_join( tid_e, NULL );
#endif
					bTh_e = false;
				}
#endif

				if( rec & MATCH_CSA_MASK_MOVE ){
					// 相手の指し手の読み込み
					if( pshogi->InputLineCSA( MoveStrEnemy() ) ){
						InputTime( MoveStrEnemy() ); // 消費時間
					}
					else{
						// 反則手?
						if( GetRecFlag( MATCH_CSA_MASK_END ) ){
							// 反則などで終了
							goto lab_logout;
						}
						else{
							// 原因不明のトラブル(?)
							goto lab_logout;
						}
					}
				}
				else{
					// 終局 or 中断
					goto lab_logout;
				}
			}

			// 指し手の表示
			pshogi->PrintMove( true );
		}

lab_logout:
		// 相手番思考を終了
		eflag = 1;
		if( bTh_e ){
#ifdef WIN32
			WaitForSingleObject( hTh_e, INFINITE );
			CloseHandle( hTh_e );
#else
			pthread_join( tid_e, NULL );
#endif
			bTh_e = false;
		}

		// ログアウト
		Logout();

		cout << "Logout." << '\n';

		// 切断
		Disconnect();

		cout << "Disconnected." << '\n';

		// スレッドの終了を待つ。
		if( bTh_r ){
#ifdef WIN32
			WaitForSingleObject( hTh_r, INFINITE );
			CloseHandle( hTh_r );
#else
			pthread_join( tid_r, NULL );
#endif
			bTh_r = false;
		}

		// 終了時刻
		end.setNow();

		// 結果の記録
		if( started ){
			WriteResult( i );
		}
	}

	return 1;
}

#ifdef WIN32
unsigned __stdcall MatchCSA::EnemyTurnSearchThread( LPVOID p ){
#else
void* MatchCSA::EnemyTurnSearchThread( void* p ){
#endif
/************************************************
相手番で探索をするスレッド
************************************************/
	MatchCSA* pmatchCSA = (MatchCSA*)p;
	THINK_INFO info;

	pmatchCSA->pcons->EnemyTurnSearch( pmatchCSA->pshogi, NULL,
		MAX_DEPTH, &info, &pmatchCSA->eflag, Think::SEARCH_DISP );

#ifdef WIN32
	return 0;
#else
	return NULL;
#endif
}
Beispiel #14
0
int main(int argc, char **argv)
{
  unsigned full_max_points = 512,
           triangle_max_points = 1024,
           sprint_max_points = 64;

  Args args(argc, argv,
            "[options] DRIVER FILE\n"
            "Options:\n"
            "  --full-points=512        Maximum number of full trace points (default = 512)\n"
            "  --triangle-points=1024   Maximum number of triangle trace points (default = 1024)\n"
            "  --sprint-points=64       Maximum number of sprint trace points (default = 64)");

  const char *arg;
  while ((arg = args.PeekNext()) != nullptr && *arg == '-') {
    args.Skip();

    const char *value;
    if ((value = StringAfterPrefix(arg, "--full-points=")) != nullptr) {
      unsigned _points = strtol(value, NULL, 10);
      if (_points > 0)
        full_max_points = _points;
      else {
        fputs("The start parameter could not be parsed correctly.\n", stderr);
        args.UsageError();
      }

    } else if ((value = StringAfterPrefix(arg, "--triangle-points=")) != nullptr) {
      unsigned _points = strtol(value, NULL, 10);
      if (_points > 0)
        triangle_max_points = _points;
      else {
        fputs("The start parameter could not be parsed correctly.\n", stderr);
        args.UsageError();
      }

    } else if ((value = StringAfterPrefix(arg, "--sprint-points=")) != nullptr) {
      unsigned _points = strtol(value, NULL, 10);
      if (_points > 0)
        sprint_max_points = _points;
      else {
        fputs("The start parameter could not be parsed correctly.\n", stderr);
        args.UsageError();
      }

    } else {
      args.UsageError();
    }
  }

  DebugReplay *replay = CreateDebugReplay(args);
  if (replay == NULL)
    return EXIT_FAILURE;

  args.ExpectEnd();

  static Trace full_trace(0, Trace::null_time, full_max_points);
  static Trace triangle_trace(0, Trace::null_time, triangle_max_points);
  static Trace sprint_trace(0, 9000, sprint_max_points);

  Result result;
  Run(*replay, result, full_trace, triangle_trace, sprint_trace);
  delete replay;

  const ContestStatistics olc_plus = SolveContest(Contest::OLC_PLUS, full_trace, triangle_trace, sprint_trace);
  const ContestStatistics dmst = SolveContest(Contest::DMST, full_trace, triangle_trace, sprint_trace);

  TextWriter writer("/dev/stdout", true);

  {
    JSON::ObjectWriter root(writer);

    WriteResult(root, result);
    root.WriteElement("phases", WritePhaseList,
                      flight_phase_detector.GetPhases());
    root.WriteElement("performance", WritePerformanceStats,
                      flight_phase_detector.GetTotals());
    root.WriteElement("contests", WriteContests, olc_plus, dmst);
  }
}