/*
 * $Id: Mpi2Constants.java,v 1.9 2000/06/15 13:55:51 yamauchi Exp $
 *     (M\pi)^2 : global constants for (M\pi)^2
 *	Copyright 1999 By YAMAUCHI Hitoshi 山内 斉 
 *	@author YAMAUCHI Hitoshi 山内 斉
 *
 * 	Mpi2Constants  : global constants
 *
 *-- 1999年8月 3日(火)
 *-- 入試問題作成，配点決定，採点，配点調整まで私がやってもいいのだ
 *-- ろうか．口では入試ほど重大なものはないと言っておきながら，適当
 *-- にやれとはSはどこまでも腐っている．
 *-- T先生に相談したら彼がやるより君がやる方がまともになるから正しい判
 *-- 断だということだ．そこまで考えているとは思えんが．
 */

package jp.ac.tohoku.is.archi.mpi2.sysparam;

import jp.ac.tohoku.is.archi.mpi2.util.IntVec3;

/**
 * Mpi2Constants : global constants for (M\pi)^2
 */
public interface Mpi2Constants 
{
    /**
     * Version
     */
    public final static String VERSION = 
	"2000/1/4 (M\\pi)^2 initial version ";

    /**
     * Copyright
     */
    public final static String COPYRIGHT = 
	"Copyright (C) 1999-2000 YAMAUCHI Hitoshi, MAEDA Atusi";

    /**
     * 特殊な PE (Host) の ID 
     */
    public final static IntVec3 HostID      = new IntVec3(-1, -1, -1);
    public final static IntVec3 IllegalPEID = new IntVec3(-2, -2, -2);

    /**
     * 出力の際の行頭
     */
    public final static String NORMALHEAD  = "//";
    public final static String VERBOSEHEAD = "##";
    public final static String DEBUGHEAD   = "<<";
    public final static String OUTDATAHEAD = ";;";
    public final static String TRACE_STDOUT_HEAD = "TR: ";

    // material の名前の最大長さ
    // const int MAX_MATERIAL_NAME_LEN = 64;

    // image を save するための tmp file name のテンプレート
    public final static String TEMP_SAVEIMAGE_FILEPREFIX = "tempMpi2image";

    // material name の初期値(この名前は material の名前として使えない)
    // #define NULLMaterialName "This is NULL material, can not use."

    // 輝度の範囲 0 からいくつまでか
    public final static double MAX_INTENSITY	= 1.0;

    // 誤差の範囲とみなす値
    public final static double D_ERROR_RES	= 1e-5;

    // ラジオシティエネルギのデフォルト最小放射値
    public final static double DEFAULT_MIN_RAD_ENERGY		= 0.01; 

    // ヘミキューブの上面の一辺の解像度
    public final static int    DEFAULT_HEMRES			= 10; 

    // レイのデフォルト最大反射回数
    public final static int   DEFAULT_MAX_REFLECTION_RAY_NUM	= 3; 

    // レイの反射減衰率の最小値^2
    public final static double 	DEFAULT_MIN_REFLECTION_COEFF_NORM2 = 0.00001; 

    // 分散レイトレーシング法のレイ数の初期値(初期レイのみ)
    public final static int    	DEFAULT_DIST_RAY_NUM		= 1; 

    // レイトレーシング法における初期レイ発生数係数 (通信量の何倍かの値)
    public final static int 	GEN_FRAYS_FACTOR_BY_COMMUN	= 2;

    // 角錐の解像度
    public final static int 	DEFAULT_FRUSTUM_RES		= 2;

    // 受信バッファ数
    public final static int	MAX_RECV_BUFFNUM		= 8;

    // 通信遅延を考慮し、retry する。その回数とリトライ間隔(μ秒)
    // SP2 の HPS の割り込みが 400 msec らしい = 400*1e3 = 4e5 micro sec.
    public final static int 	MAX_RETRY_NUM_WAIT_BARRIER	= 36;
    public final static int 	MAX_RETRY_NUM_CALC		= 16;
    // TCP/IP 版 : millisec
    public final static int 	RETRY_WAIT_TIME			= 500;
    // HPC 版
    // public final static int 	RETRY_WAIT_TIME			= 100;

    // 監視の休止時間(通信遅延を考慮した値:いいかげんな値)(μ秒)
    // SP2 の High Performance Switch の割り込みが 400 msec らしいのでそれ
    // を考慮した値 しかしこれはエラー回復のための間隔で実際はもっと小さい
    //public final static int 	POLLING_SLEEP_TIME		= 200000; 
    public final static int 	POLLING_SLEEP_TIME		= 1; 

    // 輝度情報を最大いくつまとめて送信するか FIXHERE
    public final static int 	MAX_INTVER_NUM_AT_ONCE		= 64;

    // 送信閾値サイズの何倍のサイズのバッファを用意するか
    public final static int BUFSIZE_FACTOR_BY_THREASH = 3;
    
    // time display precision for gettimeofday
    public final static int TIMEOFDAYPREC = 16;

    public final static boolean REDUCE_VERBOSE_INFO		= false;
}
