Esempio n. 1
0
void *t_fun(void *arg) {
  struct s *s; 
  s = get_s();
  pthread_mutex_lock(&s->mutex);
  s->datum = 5; // NORACE
  pthread_mutex_lock(&s->mutex);
  return NULL;
}
Esempio n. 2
0
	int get_s(int u, int f) {
		int r = 1;
		for (int i = h[u]; i != -1; i = nxt[i]) {
			int v = to[i];
			if (!vis[v] && v != f)
				r += get_s(v, u);
		}
		return r;
	}
Esempio n. 3
0
Timer::Caller Timer::call( const Function& func , double interval , bool repeat )
{
	// push function without paused time
	TimeFunc*tf = new TimeFunc(	get_s()-mms_to_s(paused_time_mms)+interval,
					repeat?interval:0,
					func);
	to_call.push(tf);
	return Caller(&(tf->state));
}
Esempio n. 4
0
File: setup.c Progetto: andypea/MILC
/* SETUP ROUTINES */
int initial_set(){
  int prompt,status;
#ifdef FIX_NODE_GEOM
  int i;
#endif
  /* On node zero, read lattice size and send to others */
  if(mynode()==0){
    /* print banner */
    printf("SU3 clover valence fermions\n");
    printf("MIMD version 7 $Name:  $\n");
    printf("Machine = %s, with %d nodes\n",machine_type(),numnodes());
    time_stamp("start");
    
    status = get_prompt(stdin,  &prompt );
    
    IF_OK status += get_i(stdin,prompt,"nx", &param.nx );
    IF_OK status += get_i(stdin,prompt,"ny", &param.ny );
    IF_OK status += get_i(stdin,prompt,"nz", &param.nz );
    IF_OK status += get_i(stdin,prompt,"nt", &param.nt );
#ifdef FIX_NODE_GEOM
    IF_OK status += get_vi(stdin, prompt, "node_geometry", 
			   param.node_geometry, 4);
#ifdef FIX_IONODE_GEOM
    IF_OK status += get_vi(stdin, prompt, "ionode_geometry", 
			   param.ionode_geometry, 4);
#endif
#endif
    IF_OK status += get_s(stdin, prompt,"job_id",param.job_id);
    
    if(status>0) param.stopflag=1; else param.stopflag=0;
  } /* end if(mynode()==0) */

  /* Node 0 broadcasts parameter buffer to all other nodes */
  broadcast_bytes((char *)&param,sizeof(param));

  if( param.stopflag != 0 )
    normal_exit(0);

  nx=param.nx;
  ny=param.ny;
  nz=param.nz;
  nt=param.nt;
  
#ifdef FIX_NODE_GEOM
  for(i = 0; i < 4; i++)
    node_geometry[i] = param.node_geometry[i];
#ifdef FIX_IONODE_GEOM
  for(i = 0; i < 4; i++)
    ionode_geometry[i] = param.ionode_geometry[i];
#endif
#endif

  this_node = mynode();
  number_of_nodes = numnodes();
  volume=nx*ny*nz*nt;
  return(prompt);
}
    /*!
     *  \brief  指定した連想配列群に静的APIを追加する
     *  \param[in]  line      行番号
     *  \param[in]  arg_list  マクロ実引数リスト
     *  \param[in]  p_ctx     マクロコンテキスト
     *  \retval     マクロ返却値
     *  API.で始まる連想配列群を、必要に応じて適切に変換を行った上で、別のプレフィックスで始まる
     *  連想配列群に追加する。想定する使用方法としては、特定のソフトウェア部品で理解可能な静的API
     *  に関しては、追加を行わないか、他の静的APIに置き換えて追加を行う。理解できない静的APIに関して
     *  はそのまま追加を行う。
     *  この関数の第一引数にはAPI.で始まる連想配列の連番を、第二引数には追加先に連想配列群の
     *  プレフィックスを、第三引数には対象とする静的API名を、第四引数には追加するパラメータシンボルの
     *  並びを、第五引数にはパラメータの並びを指定する。     
     */
    var_t bf_addapi( text_line const& line, std::vector< var_t > const& arg_list, context* p_ctx )
    {
      element e;
      if ( macro_processor::check_arity( line, arg_list.size(), 5, "ADDAPI" ) )
      {
        itronx::factory* factory = get_global< itronx::factory* >( "factory" );
        std::map< std::string, itronx::static_api::info > const* info_map = factory->get_static_api_info_map();

        std::tr1::int64_t order = get_i( arg_list[ 0 ], p_ctx );  // 元の静的APIの連番
        std::string list_name = get_s( arg_list[ 1 ], p_ctx );    // 出力先リストの識別名
        std::string api_name = get_s( arg_list[ 2 ], p_ctx );     // 静的API名
        var_t params = arg_list[ 3 ]; // パラメータシンボルの並び
        var_t args = arg_list[ 4 ];   // パラメータの並び

        std::map< std::string, itronx::static_api::info >::const_iterator it = info_map->find( api_name );
        if ( it != info_map->end() )
        {
          itronx::static_api::info info = it->second;
          std::string str_order = boost::lexical_cast< std::string >( order );
          p_ctx->var_map[ list_name + ".TEXT_LINE[" + str_order + "]" ] = p_ctx->var_map[ "API.TEXT_LINE[" + str_order + "]" ]; 
          e.s = api_name;
          p_ctx->var_map[ list_name + ".NAME[" + str_order + "]" ] = var_t( 1, e );
          e.s = info.type;
          p_ctx->var_map[ list_name + ".TYPE[" + str_order + "]" ] = var_t( 1, e );
          p_ctx->var_map[ list_name + ".PARAMS[" + str_order + "]" ] = params;
          p_ctx->var_map[ list_name + ".ARGS[" + str_order + "]" ] = args;

          e.s.clear();
          if ( !p_ctx->var_map[ list_name + ".ORDER_LIST" ].empty() )
          {
            e.i = *p_ctx->var_map[ list_name + ".ORDER_LIST" ].back().i + 1;
          }
          else
          {
            e.i = 1;
          }
          p_ctx->var_map[ list_name + ".ORDER_LIST" ].push_back( e );

          e.s.clear();
          e.i = 1;
        }
      }
      return var_t( 1, e );
    }
Esempio n. 6
0
/*!
 *  \brief  テキストの翻訳
 *  \param[in]  line      行番号
 *  \param[in]  arg_list  マクロ実引数リスト
 *  \param[in]  p_ctx     マクロコンテキスト
 *  \retval     マクロ返却値
 *  第1マクロ実引数で指定した文字列を翻訳する。
 */
var_t bf_gettext( text_line const& line, std::vector< var_t > const& arg_list, context const* p_ctx )
{
    element e;
    if ( macro_processor::check_arity( line, arg_list.size(), 1, "GETTEXT" ) )
    {
        std::string message = get_s( arg_list[0], p_ctx );
        e.s = gettext( message );
    }
    return var_t( 1, e );
}
Esempio n. 7
0
/*!
 *  \brief  変数のトレース
 *  \param[in]  line      行番号
 *  \param[in]  arg_list  マクロ実引数リスト
 *  \param[in]  p_ctx     マクロコンテキスト
 *  \retval     マクロ返却値
 *  第1マクロ実引数で指定した変数の内容をトレースする。
 *  第2マクロ実引数を指定した場合、その文字列属性で指定したファイルにトレース内容を追記する。
 *  ファイル名として、"stdout"を指定した場合は標準出力、"stderr"を指定した場合は標準エラーに出力する。
 *  ファイル名を省略した場合は"stderr"を指定したものとして振舞う。
 */
var_t bf_trace( text_line const& line, std::vector< var_t > const& arg_list, context const* p_ctx )
{
    std::size_t arity = arg_list.size();

    if ( arity < 1 )
    {
        error( line, _( "too few arguments for `%1%\'" ), "TRACE" );
    }
    else if ( arity > 2 )
    {
        error( line, _( "too many arguments for `%1%\'" ), "TRACE" );
    }

    var_t value( arg_list[ 0 ] );

    std::string trace_str = "{ ";
    for ( var_t::const_iterator iter( value.begin() ), last( value.end() );
            iter != last;
            ++iter )
    {
        trace_str += "\"" + iter->s + "\"(";
        if ( iter->i ) // 値属性があれば...
        {
            trace_str += boost::lexical_cast< std::string >( *iter->i );
        }
        trace_str += "), ";
    }
    trace_str += " }\n";

    std::string filename( "stderr" );
    if ( arity == 2 )
    {
        filename = get_s( arg_list[ 1 ], p_ctx );
    }
    if ( filename == "stdout" )
    {
        fputs( trace_str.c_str(), stdout );
    }
    else if ( filename == "stderr" )
    {
        fputs( trace_str.c_str(), stderr );
    }
    else
    {
        std::FILE* stream = std::fopen( filename.c_str(), "a" );
        if ( stream != 0 )
        {
            fputs( trace_str.c_str(), stream );
            std::fclose( stream );
        }
    }

    element e;
    return var_t( 1, e );
}
Esempio n. 8
0
/* read in parameters and coupling constants	*/
int readin(int prompt) {
  /* read in parameters for su3 monte carlo	*/
  /* argument "prompt" is 1 if prompts are to be given for input	*/
  
  int status, jflav;

  /* On node zero, read parameters and send to all other nodes */
  if(this_node==0){
    
    printf("\n\n");
    status=0;

    IF_OK status += get_i(stdin, prompt, "number_of_random_sources",
			  &param.nrand);

   if(param.nrand < 2){
      fprintf(stderr, "ERROR: need more than 1 random source to compute correlations\n");
      status++;
    }

    IF_OK status += get_i(stdin, prompt, "number_of_flavors",
			  &param.nflav);

    for(jflav = 0; jflav < param.nflav; jflav++){
      IF_OK status += get_f(stdin, prompt, "charge", &param.charges[jflav]);
      IF_OK status += get_s(stdin, prompt, "file", param.fname[jflav]);
    }

    IF_OK status += get_s(stdin, prompt, "save_corr", param.corrfile);
    
    /* End of input fields */
    if( status > 0)param.stopflag=1; else param.stopflag=0;
  } /* end if(this_node==0) */
  
  
  broadcast_bytes((char *)&param,sizeof(param));

  if( param.stopflag != 0 )return param.stopflag;

  if(prompt==2)return 0;

} /* setup.c */
Esempio n. 9
0
static char char_at(obj* self, va_list* args) {
	int i = va_arg(*args, int);

	if (i < 0) {
		LOG_CRITICAL("Attempt to access index %d of string with length %d", i, get_d(self, "length"));
		abort();
	} else if (i >= get_d(self, "length")) {
		LOG_CRITICAL("Attempt to access index %d of string with length %d", i, get_d(self, "length"));
		abort();
	}

	return get_s(self, "value")[i];
}
Esempio n. 10
0
/* --------------------------------------------------------------- */
void R_sqlopen( const int func )
{
	const char *filename;

	if (ARGN!=1) Lerror(ERR_INCORRECT_CALL,0);
	get_s(1); LASCIIZ(*ARG1);
	filename = LSTR(*ARG1);

	if (sqldb!=NULL) sqlite3_close(sqldb);

	Licpy(ARGR, sqlite3_open(LSTR(*ARG1), &sqldb));
	sqlstmt = NULL;
} /* R_sqliteopen */
Esempio n. 11
0
int randr_init() {
	Rect r;
	int i = 0, n = 0;
	char *ptr, *output, *str = NULL;
	/* try to put presentation on the first available specified output: */
	if (get_s(videoOut)) {
		str = strdup(get_s(videoOut));
		output = strtok_r(str, ", ", &ptr);
		n = _screen_info(output, 0, &r);
		while ( !(r.w && r.h) && (output=strtok_r(NULL, ", ", &ptr)) )
			_screen_info(output, 0, &r);
	}
	/* if that failed, get the first available output: */
	else {
		n = _screen_info(NULL, i = 1, &r);
		while (!(r.w && r.h) && (++i) < n) _screen_info(NULL, i, &r);
	}
	/* if no output can be found, return 1, otherwise set pres variables */
	if (!(r.w && r.h)) {
		if (str) free(str);
		return 1;
	}
	set(presX, r.x); set(presY, r.y); set(presW, r.w); set(presH, r.h);
	/* try to put notes on the next available specified output: */
	r.x = r.y = r.w = r.h = 0;
	if (str && output) {
		while ( !(r.w && r.h) && (output=strtok_r(NULL, ", ", &ptr)) )
			_screen_info(output, 0, &r);
		free(str);
	}
	/* if that failed, get the next available output (if any): */
	while (!(r.w && r.h) && (++i) < n) _screen_info(NULL, i, &r);
	if (!(r.w && r.h)) return 0;
	set(noteX, r.x); set(noteY, r.y);
	return 0;
}
Esempio n. 12
0
int main () {
    int *d;
    struct s *s;
    pthread_t id;
    pthread_mutex_t *m;

    s = get_s();
    m = &s->mutex;
    d = &s->datum;

    pthread_create(&id,NULL,t_fun,NULL);
    *d = 8; //RACE

    return 0;
}
Esempio n. 13
0
	void dfs(int u) {


		int s = get_s(u, -1);
		t = INF, d = u;
		get_d(u, -1, s);
		//fprintf(stderr, "%d %d\n", u, d);
		calc(d);

		vis[d] = 1;
		for (int i = h[d]; i != -1; i = nxt[i]) {
			int v = to[i];
			if (!vis[v])
				dfs(v);
		}
	}
Esempio n. 14
0
/*!
 *  \brief  値の生成
 *  \param[in]  line      行番号
 *  \param[in]  arg_list  マクロ実引数リスト
 *  \param[in]  p_ctx     マクロコンテキスト
 *  \retval     マクロ返却値
 *  第1マクロ実引数をテキスト、第2マクロ実引数を数値として、値を生成する。
 */
var_t bf_value( text_line const& line, std::vector< var_t > const& arg_list, context const* p_ctx )
{
    element e;
    if ( macro_processor::check_arity( line, arg_list.size(), 2, "VALUE" ) )
    {
        if ( !arg_list[0].empty() )
        {
            e.s = get_s( arg_list[0], p_ctx );
        }
        if ( !arg_list[1].empty() )
        {
            e.i = get_i( arg_list[1], p_ctx );
        }
    }
    return var_t( 1, e );
}
Esempio n. 15
0
/*!
 *  \brief  マクロ実引数の書式化
 *  \param[in]  line      行番号
 *  \param[in]  arg_list  マクロ実引数リスト
 *  \param[in]  p_ctx     マクロコンテキスト
 *  \retval     マクロ返却値
 *  第1マクロ実引数で指定した初期化文字列によって、第2マクロ実引数以降を書式化する。
 *  書式化文字列は、%nが使えないことを除き、printf関数のスーパーセットである。
 *  正確な仕様は、boost::formatを参照のこと。
 */
var_t bf_format( text_line const& line, std::vector< var_t > const& arg_list, context const* p_ctx )
{
    element e;
    std::size_t arity = arg_list.size();
    if ( arity < 1 )
    {
        error( line, _( "too few arguments for `%1%\'" ), "FORMAT" );
    }
    boost::format fmt( get_s( arg_list[0], p_ctx ) );
    for ( std::size_t i = 1; i < arity; i++ )
    {
        std::pair< var_t const*, context const* > arg( &arg_list[i], p_ctx );
        fmt % arg;
    }
    e.s = fmt.str();
    return var_t( 1, e );
}
Esempio n. 16
0
int t11(){
	int x, *q;
	char *y, *w;
	struct s z;
	struct s *a, *b;

	q = &a->i;
	y = a->cp;
	z.i = 8;
	*(get_s()) = a;

	assert(q == &a->i); // ???
	assert(y == a->cp); // UNKNOWN
	assert(z.i == 8);

	return 0;
}
Esempio n. 17
0
int main () {
  int *d, *l;
  struct s *s;
  pthread_t id;
  pthread_mutex_t *m;

  s = get_s();
  m = &s->mutex;
  d = &s->data;

  pthread_create(&id,NULL,t_fun,NULL);

  pthread_mutex_lock(m);
  *d = 8; // RACE
  pthread_mutex_unlock(m);

  return 0;
}
Esempio n. 18
0
int xlib_init() {
	scr = DefaultScreen(dpy);
	root = DefaultRootWindow(dpy);
#ifdef module_randr
	randr_init();
#else
	set(presX, 0); set(presY, 0);
	set(presW, DisplayWidth(dpy,scr));
	set(presH, DisplayHeight(dpy,scr));
#endif /* moudle_randr */
	XSetWindowAttributes wa;
	wa.background_pixel = 0x000000;
	wa.backing_store = Always;
	wa.event_mask = ButtonPressMask | KeyPressMask | PointerMotionMask;
	topWin = XCreateWindow(dpy, root, get_d(presX), get_d(presY), get_d(presW),
			get_d(presH), 0, DefaultDepth(dpy,scr), InputOutput,
			DefaultVisual(dpy,scr), CWBackPixel | CWBackingStore | CWEventMask, &wa);
	presWin = XCreateWindow(dpy, topWin, 0, 0, get_d(presW), get_d(presH), 0,
			DefaultDepth(dpy,scr), InputOutput, DefaultVisual(dpy,scr),
			CWBackingStore | CWEventMask, &wa);
	XClassHint hint;
	hint.res_name = "Presentation";
	hint.res_class = "Slider";
	XSetClassHint(dpy, topWin, &hint);
	XStoreName(dpy, topWin, "Slider");
	XMapWindow(dpy, topWin); // TODO where is it?
	XMapWindow(dpy, presWin);
	/* override placement of annoying WMs */
	XMoveWindow(dpy, topWin, get_d(presX), get_d(presY));
	/* other init functions */
	if (command_init()) return xlib_free(1);
	if (render_init(get_s(presFile))) return xlib_free(2);
//	render_init(get_s(noteFile));
#ifdef module_cursor
	if (cursor_init(presWin)) return xlib_free(3);
#endif
#ifdef module_sorter
	if (sorter_init(topWin)) return xlib_free(4);
#endif
	render_set_fader(presWin, 1);
	command(cmdFullscreen, NULL);
	return 0;
}
    /*!
     *  \brief  変数群の交換
     *  \param[in]  line      行番号
     *  \param[in]  arg_list  マクロ実引数リスト
     *  \param[in]  p_ctx     マクロコンテキスト
     *  \retval     マクロ返却値
     *  第一引数で指定したプレフィックスで始まる変数群を削除する。’SWAPPREFIX’関数で交換したあと、
     *  不要になった変数群はこの関数で削除しておくことが望ましい。
     */
    var_t bf_cleanvars( text_line const& line, std::vector< var_t > const& arg_list, context* p_ctx )
    {
      if ( macro_processor::check_arity( line, arg_list.size(), 1, "CLEANVARS" ) )
      {
        std::string prefix = get_s( arg_list[ 0 ], p_ctx ) + ".";    // 変数の接頭辞
        std::size_t n = prefix.size();
        std::map< std::string, var_t > temp_map;

        for ( std::map< std::string, var_t >::const_iterator iter = p_ctx->var_map.begin(), last =p_ctx->var_map.end();
              iter != last;
              ++iter )
        {
          if ( std::strncmp( iter->first.c_str(), prefix.c_str(), n ) != 0 )
          {
            temp_map.insert( *iter );
          }
        }
        p_ctx->var_map.swap( temp_map );
      }
      return var_t();
    }
Esempio n. 20
0
/* SETUP ROUTINES */
int initial_set(){
  int prompt,status;
  /* On node zero, read lattice size, seed, and send to others */
  if(mynode()==0){
    /* print banner */
    printf("Heavy-light spectroscpy with Kogut-Susskind light fermions\n");
    printf("MIMD version 7\n");
    printf("Machine = %s, with %d nodes\n",machine_type(),numnodes());
    time_stamp("start");
    status = get_prompt(stdin,  &prompt );
    IF_OK status += get_i(stdin, prompt,"nx", &par_buf.nx );
    IF_OK status += get_i(stdin, prompt,"ny", &par_buf.ny );
    IF_OK status += get_i(stdin, prompt,"nz", &par_buf.nz );
    IF_OK status += get_i(stdin, prompt,"nt", &par_buf.nt );
    IF_OK status += get_s(stdin, prompt,"job_id",par_buf.job_id);
    
    if(status>0) par_buf.stopflag=1; else par_buf.stopflag=0;
  } /* end if(mynode()==0) */
  
  /* Node 0 broadcasts parameter buffer to all other nodes */
  broadcast_bytes((char *)&par_buf,sizeof(par_buf));
  
  if( par_buf.stopflag != 0 )
    normal_exit(0);
  
  nx=par_buf.nx;
  ny=par_buf.ny;
  nz=par_buf.nz;
  nt=par_buf.nt;
  strcpy(job_id,par_buf.job_id);
  
  this_node = mynode();
  number_of_nodes = numnodes();
  volume=nx*ny*nz*nt;
  total_iters=0;
  return(prompt);
}
Esempio n. 21
0
/*!
 *  \brief  順序リストの整列
 *  \param[in]  line      行番号
 *  \param[in]  arg_list  マクロ実引数リスト
 *  \param[in]  p_ctx     マクロコンテキスト
 *  \retval     マクロ返却値
 *  第1マクロ実引数として与えた順序付きリストの各要素を、第2マクロ実引数の添え字とした場合の変数を評価し、
 *  その評価結果に基づき昇順に整列する。
 *
 *  \example
 *  $FOO[1] = 20$
 *  $FOO[2] = 10$
 *  $FOO[3] = 30$
 *  $SORT({ 1,2,3 }, "FOO")$
 *  → { 2,1,3 }
 *  \endexample
 */
var_t bf_sort( text_line const& line, std::vector< var_t > const& arg_list, context const* p_ctx )
{
    var_t result;
    if ( macro_processor::check_arity( line, arg_list.size(), 2, "SORT" ) )
    {
        var_t list( arg_list[0] );
        std::string field( get_s( arg_list[1], p_ctx ) );
        std::vector< std::pair< element, std::tr1::int64_t > > temp;

        for ( var_t::const_iterator iter( list.begin() ), last( list.end() ); iter != last; ++iter )
        {
            std::tr1::int64_t order = iter->i.get();
            std::string name( ( boost::format( "%s[%d]" ) % field % order ).str() );
            std::map< std::string, var_t >::const_iterator m_iter( p_ctx->var_map.find( name ) );
            if ( m_iter == p_ctx->var_map.end() )
            {
                return var_t();
            }
            if ( !m_iter->second.empty() )
            {
                temp.push_back( std::make_pair( m_iter->second.front(), order ) );
            }
        }

        std::stable_sort( temp.begin(), temp.end() );

        for ( std::vector< std::pair< element, std::tr1::int64_t > >::const_iterator iter( temp.begin() ), last( temp.end() );
                iter != last;
                ++iter )
        {
            element e;
            e.i = iter->second;
            result.push_back( e );
        }
    }
    return result;
}
Esempio n. 22
0
void append(obj* self, va_list* args) {
	char* part_two = va_arg(*args, char*);
	char* part_one = get_s(self, "value");
	char* joined;

	int part_one_length = strlen(part_one);
	int part_two_length = strlen(part_two);
	int capacity = get_d(self, "capacity");

	if (part_one_length + part_two_length + 1 > capacity) {
		int new_capacity = (capacity * 2) + part_two_length + 1;
		joined = calloc(new_capacity, sizeof(char));
		assert(joined);
		strncpy(joined, part_one, part_one_length);
		set_d(self, "capacity", new_capacity);
	}
 	
	strncat(joined, part_two, part_two_length);
	set_s(self, "value", joined);

	set_d(self, "length", part_one_length + part_two_length);

	free(joined);
}
Esempio n. 23
0
/* Since we are operating in binary mode, the return value from control
 * is irrelevant, as long as it is not negative.
 */
static int control(ErlDrvData drv_data, unsigned int command, char *buf, 
		   int len, char **rbuf, int rlen)
{
    int r;
    char* s;

    s = get_s(buf, len);
    switch (command) {
    case DRV_CONNECT:
        r = do_connect(s, (our_data_t*)drv_data);
        break;
    case DRV_DISCONNECT:
	r = do_disconnect((our_data_t*)drv_data);
	break;
    case DRV_SELECT:
	r = do_select(s, (our_data_t*)drv_data);
	break;
    default:
	r = -1;
	break;
    }
    free_s(s);
    return r;
}
Esempio n. 24
0
/*!
 *  \brief  環境変数の取得
 *  \param[in]  line      行番号
 *  \param[in]  arg_list  マクロ実引数リスト
 *  \param[in]  p_ctx     マクロコンテキスト
 *  \retval     マクロ返却値
 *  第1マクロ実引数で指定した環境変数の値を返す。
 */
var_t bf_environ( text_line const& line, std::vector< var_t > const& arg_list, context const* p_ctx )
{
    element e;
    if ( macro_processor::check_arity( line, arg_list.size(), 1, "ENVIRON" ) )
    {
        std::string name = get_s( arg_list[0], p_ctx );
        char const* env = std::getenv( name.c_str() );
        if ( env == 0 )
        {
            return var_t();
        }
        e.s = env;
        errno = 0;
        char* endptr;
        if ( std::tr1::int64_t value = std::strtol( env, &endptr, 0 ) )
        {
            if ( *endptr == '\0' && errno == 0 )
            {
                e.i = value;
            }
        }
    }
    return var_t( 1, e );
}
Esempio n. 25
0
damgard_jurik_ciphertext_t* damgard_jurik::encrypt(damgard_jurik_plaintext_t* pt) {
    return encrypt(pt, get_s(pt));
}
Esempio n. 26
0
/* read in parameters and coupling constants	*/
int
readin(int prompt)
{
  /* read in parameters for su3 monte carlo	*/
  /* argument "prompt" is 1 if prompts are to be given for input	*/

  int i, status, current_index;
#ifdef CHECK_INVERT
  char invert_string[16];
#endif

  /* On node zero, read parameters and send to all other nodes */
  if(this_node==0) {

    printf("\n\n");
    status=0;

    /* find out what kind of starting lattice to use */
    IF_OK status += ask_starting_lattice(stdin,  prompt, &(par_buf.startflag),
					  par_buf.startfile );

    IF_OK status += get_f(stdin, prompt,"u0", &par_buf.u0 );

    /* find out what to do with lattice at end */
    IF_OK status += ask_ending_lattice(stdin,  prompt, &(par_buf.saveflag),
					par_buf.savefile );
    IF_OK status += ask_ildg_LFN(stdin,  prompt, par_buf.saveflag,
				  par_buf.stringLFN );

    /* find out what to do with longlinks at end */
    IF_OK status += ask_ending_lattice(stdin,  prompt, &(par_buf.savelongflag),
				       par_buf.savelongfile );
    
    /* find out what to do with fatlinks at end */
    IF_OK status += ask_ending_lattice(stdin,  prompt, &(par_buf.savefatflag),
				       par_buf.savefatfile );

    /* Inversion parameters */
    IF_OK status += get_i(stdin, prompt,"number_of_masses", &par_buf.nmass );

    /* maximum no. of conjugate gradient iterations */
    IF_OK status += get_i(stdin, prompt,"max_cg_iterations", &par_buf.qic[0].max );

    /* maximum no. of conjugate gradient restarts */
    IF_OK status += get_i(stdin, prompt,"max_cg_restarts", &par_buf.qic[0].nrestart );
    
    /* find out what kind of color vector source to use */
#ifdef CHECK_INVERT
    IF_OK status += ask_color_vector( prompt, &(par_buf.srcflag[0]),
				      par_buf.srcfile[0] );
#endif
    IF_OK for(i = 0; i < par_buf.nmass; i++){
    
#ifndef CHECK_INVERT
      IF_OK status += ask_color_vector( prompt, &(par_buf.srcflag[i]),
					par_buf.srcfile[i] );
      IF_OK if(par_buf.srcflag[i] != par_buf.srcflag[0]){
	node0_printf("Must reload all or save all alike.");
	status++;
      }
#endif
      IF_OK status += get_f(stdin, prompt,"mass", &par_buf.ksp[i].mass );
#if FERM_ACTION == HISQ || FERM_ACTION == HYPISQ
      IF_OK status += get_f(stdin, prompt, "naik_term_epsilon", 
			    &par_buf.ksp[i].naik_term_epsilon);
      IF_OK {
	if(i == 0){
	  if(par_buf.ksp[i].naik_term_epsilon != 0.0){
	    node0_printf("First Naik term epsilon must be zero.");
	    status++;
	  }
	} else {
	  if(par_buf.ksp[i].naik_term_epsilon > par_buf.ksp[i-1].naik_term_epsilon){
	    node0_printf("Naik term epsilons must be in descending order.");
	    status++;
	  }
	}
      }

#else
      par_buf.ksp[i].naik_term_epsilon = 0.0;
#endif

      par_buf.qic[i].min = 0;
      par_buf.qic[i].start_flag = 0;
      par_buf.qic[i].nsrc = 1;
      par_buf.qic[i].max = par_buf.qic[0].max;
      par_buf.qic[i].nrestart = par_buf.qic[0].nrestart;
      par_buf.qic[i].prec = PRECISION;
      par_buf.qic[i].parity = EVENANDODD;
      /* error for propagator conjugate gradient */
      IF_OK status += get_f(stdin, prompt, "error_for_propagator", 
			    &par_buf.qic[i].resid);
      IF_OK status += get_f(stdin, prompt, "rel_error_for_propagator", 
			    &par_buf.qic[i].relresid );
#ifdef CHECK_INVERT
      /* find out what kind of color vector result to use */
      IF_OK status += ask_color_vector( prompt, &(par_buf.ansflag[i]),
					par_buf.ansfile[i] );
      IF_OK if(par_buf.ansflag[i] != par_buf.ansflag[0]){
	node0_printf("Must reload all or save all alike.");
	status++;
      }
#endif
    }
#ifndef CHECK_INVERT
    /* find out what kind of color matrix momentum to use */
    IF_OK status += ask_color_matrix( prompt, &(par_buf.ansflag[0]),
				      par_buf.ansfile[0] );
#endif


#ifdef CHECK_INVERT
    /* find out which inversion to check */
    IF_OK status += get_s(stdin,  prompt, "invert", invert_string);
    if(status == 0){
      if(strcmp(invert_string,"M")==0)
	par_buf.inverttype = INVERT_M;
      else if(strcmp(invert_string,"MdaggerM")==0)
	par_buf.inverttype = INVERT_MdaggerM;
      else{
	printf("Unrecognized invert string %s\n",invert_string);
	status++;
      }
    }
#endif

    if( status > 0)par_buf.stopflag=1; else par_buf.stopflag=0;
  } /* end if(this_node==0) */
Esempio n. 27
0
/* SETUP ROUTINES */
static int initial_set(void){
  int prompt,status;
#ifdef FIX_NODE_GEOM
  int i;
#endif

  /* On node zero, read lattice size and send to others */
  if(mynode()==0){
    /* print banner */
    printf("Radial correlator code\n");
    printf("MIMD version %s\n",MILC_CODE_VERSION);
    printf("Machine = %s, with %d nodes\n",machine_type(),numnodes());
    gethostname(hostname, 128);
    printf("Host(0) = %s\n",hostname);
    printf("Username = %s\n", getenv("USER"));
    time_stamp("start");
    get_utc_datetime(utc_date_time);

    status = get_prompt(stdin,  &prompt );
    IF_OK status += get_i(stdin,prompt,"nx", &param.nx );
    IF_OK status += get_i(stdin,prompt,"ny", &param.ny );
    IF_OK status += get_i(stdin,prompt,"nz", &param.nz );
    IF_OK status += get_i(stdin,prompt,"nt", &param.nt );
#ifdef FIX_NODE_GEOM
    IF_OK status += get_vi(stdin, prompt, "node_geometry", 
			   param.node_geometry, 4);
#ifdef FIX_IONODE_GEOM
    IF_OK status += get_vi(stdin, prompt, "ionode_geometry", 
			   param.ionode_geometry, 4);
#endif
#endif
    IF_OK status += get_s(stdin, prompt,"job_id",param.job_id);
    if(status>0) param.stopflag=1; else param.stopflag=0;
  } /* end if(mynode()==0) */

  /* Node 0 broadcasts parameter buffer to all other nodes */
  broadcast_bytes((char *)&param,sizeof(param));

  if( param.stopflag != 0 )
    normal_exit(0);

  if(prompt==2)return prompt;

  nx=param.nx;
  ny=param.ny;
  nz=param.nz;
  nt=param.nt;

#ifdef FIX_NODE_GEOM
  for(i = 0; i < 4; i++)
    node_geometry[i] = param.node_geometry[i];
#ifdef FIX_IONODE_GEOM
  for(i = 0; i < 4; i++)
    ionode_geometry[i] = param.ionode_geometry[i];
#endif
#endif

  this_node = mynode();
  number_of_nodes = numnodes();
  volume=nx*ny*nz*nt;

  return(prompt);
}
Esempio n. 28
0
int readin(int prompt)  {
  
  /* argument "prompt" is 1 if prompts are to be given for input	*/
  
  int status,i;
  
  /* On node zero, read parameters and send to all other nodes */
  if(this_node==0){
    
    status=0;
    
    /* find out what kind of starting lattice to use */
    IF_OK status += ask_starting_lattice(stdin,  prompt, &(par_buf.startflag),
					  par_buf.startfile );
    
    /* find out what to do with lattice at end */
    IF_OK status += ask_ending_lattice(stdin,  prompt, &(par_buf.saveflag),
					par_buf.savefile );
    IF_OK status += ask_ildg_LFN(stdin,  prompt, par_buf.saveflag,
				  par_buf.stringLFN );
    
    /* Get ensemble values for NERSC archive */
    IF_OK if (par_buf.saveflag == SAVE_SERIAL_ARCHIVE)
      status += get_s(stdin,  prompt,"ensemble_id", par_buf.ensemble_id );
    IF_OK if (par_buf.saveflag == SAVE_SERIAL_ARCHIVE)
      status += get_i(stdin,  prompt,"sequence_number", 
		       &par_buf.sequence_number );
    /* Number of kappas */
    
    IF_OK status += get_i(stdin, prompt,"number_of_kappas", &par_buf.num_kap );
    if( par_buf.num_kap>MAX_KAP ){
      printf("num_kap = %d must be <= %d!\n", par_buf.num_kap, MAX_KAP);
      status++;
    }
    
    /* To be safe initialize the following to zero */
    for(i=0;i<MAX_KAP;i++){
      kap[i] = 0.0;
    }
    
    for(i=0;i<par_buf.num_kap;i++){
      IF_OK status += ask_starting_wprop(stdin, prompt, 
					 &par_buf.startflag_w[i], 
					 par_buf.startfile_w[i]);
      /* Save the string to create the FNAL file name */
      IF_OK status += get_s(stdin, prompt,"kappa", par_buf.kap_label[i] );
      IF_OK par_buf.kap[i] = atof(par_buf.kap_label[i]);
      IF_OK status += get_s(stdin, prompt,"source_label", 
			    par_buf.src_label_w[i] );       
      IF_OK status += get_f(stdin, prompt,"d1", &par_buf.d1[i] );
    }
    
    IF_OK status += get_i(stdin, prompt,"number_of_smearings", &par_buf.num_smear );
    /* We always have a point sink */
    par_buf.num_smear++;
    strcpy(par_buf.sink_label[0],"d");
    par_buf.smearfile[0][0] = '\0';

    for(i=1;i<par_buf.num_smear;i++){
      IF_OK status += get_s(stdin, prompt,"sink_label", par_buf.sink_label[i] );       
      IF_OK status += get_s(stdin, prompt,"smear_func_file", par_buf.smearfile[i]);
    }

    IF_OK status += ask_starting_ksprop (stdin, prompt, 
					 &par_buf.ks_prop_startflag,
					 par_buf.start_ks_prop_file);
    IF_OK status += get_s(stdin, prompt,"mass", 
			  par_buf.mass_label );       
    IF_OK par_buf.mass = atof(par_buf.mass_label);
    /* What file for the resulting correlators? */
    
    IF_OK status += ask_corr_file( stdin, prompt, &par_buf.saveflag_c,
				   par_buf.savefile_c);

    IF_OK status += get_i(stdin, prompt, "log_correlators", 
			  &par_buf.log_correlators);

    if( status > 0)par_buf.stopflag=1; else par_buf.stopflag=0;

  } /* end if(this_node==0) */
Esempio n. 29
0
/* read in parameters and coupling constants	*/
int readin(int prompt) {
  /* read in parameters for su3 monte carlo	*/
  /* argument "prompt" is 1 if prompts are to be given for input	*/
  
  int status;
  int i, k, npbp_masses;
#ifdef PRTIME
  double dtime;
#endif

  STARTTIME;

  /* On node zero, read parameters and send to all other nodes */
  if(this_node==0){
    
    printf("\n\n");
    status=0;

    /*------------------------------------------------------------*/
    /* Gauge configuration section                                */
    /*------------------------------------------------------------*/

    IF_OK status += ask_starting_lattice(stdin,  prompt, &param.startflag,
	param.startfile );
    IF_OK status += get_f(stdin, prompt,"u0", &param.u0 );

    /* find out what to do with lattice at end */
    IF_OK status += ask_ending_lattice(stdin,  prompt, &(param.saveflag),
				       param.savefile );
    IF_OK status += ask_ildg_LFN(stdin,  prompt, param.saveflag,
				  param.stringLFN );

    /* Provision is made to build covariant sources from smeared
       links */
    /* APE smearing parameters (if needed) */
    /* Zero suppresses APE smearing */
    IF_OK status += get_f(stdin, prompt, "staple_weight", 
			  &param.staple_weight);
    IF_OK status += get_i(stdin, prompt, "ape_iter",
			  &param.ape_iter);

#if EIGMODE == EIGCG
    /* for eigcg */
    /* restart for Lanczos */
    IF_OK status += get_i(stdin, prompt,"restart_lanczos", &param.eigcgp.m);

    /* number of eigenvectors per inversion */
    IF_OK status += get_i(stdin, prompt,"Number_of_eigenvals", &param.eigcgp.Nvecs);

    if(param.eigcgp.m <= 2*param.eigcgp.Nvecs){
      printf("restart_lanczos should be larger than 2*Number_of_eigenvals!\n");
      status++;
    }

    /* maximum number of eigenvectors */
    IF_OK status += get_i(stdin, prompt,"Max_Number_of_eigenvals",
			  &param.eigcgp.Nvecs_max);

    /* eigenvector input */
    IF_OK status += ask_starting_ks_eigen(stdin, prompt, &param.ks_eigen_startflag,
					  param.ks_eigen_startfile);

    /* eigenvector output */
    IF_OK status += ask_ending_ks_eigen(stdin, prompt, &param.ks_eigen_saveflag,
					param.ks_eigen_savefile);

    param.eigcgp.Nvecs_curr = 0;
    param.eigcgp.H = NULL;
#endif

#if EIGMODE == DEFLATION
    /*------------------------------------------------------------*/
    /* Dirac eigenpair calculation                                */
    /*------------------------------------------------------------*/

    /* number of eigenvectors */
    IF_OK status += get_i(stdin, prompt,"Number_of_eigenvals", &param.Nvecs);

    /* max  Rayleigh iterations */
    IF_OK status += get_i(stdin, prompt,"Max_Rayleigh_iters", &param.MaxIter);

    /* Restart  Rayleigh every so many iterations */
    IF_OK status += get_i(stdin, prompt,"Restart_Rayleigh", &param.Restart);

    /* Kalkreuter iterations */
    IF_OK status += get_i(stdin, prompt,"Kalkreuter_iters", &param.Kiters);

     /* Tolerance for the eigenvalue computation */
    IF_OK status += get_f(stdin, prompt,"eigenval_tolerance", &param.eigenval_tol);

     /* error decrease per Rayleigh minimization */
    IF_OK status += get_f(stdin, prompt,"error_decrease", &param.error_decr);

    /* eigenvector input */
    IF_OK status += ask_starting_ks_eigen(stdin, prompt, &param.ks_eigen_startflag,
					  param.ks_eigen_startfile);

    /* eigenvector output */
    IF_OK status += ask_ending_ks_eigen(stdin, prompt, &param.ks_eigen_saveflag,
					param.ks_eigen_savefile);
#endif

    /*------------------------------------------------------------*/
    /* Chiral condensate and related quantities                   */
    /*------------------------------------------------------------*/

    IF_OK status += get_i(stdin,prompt,"number_of_sets", &param.num_set);
    if( param.num_set>MAX_SET ){
      printf("num_set = %d must be <= %d!\n", param.num_set, MAX_SET);
      status++;
    }

    npbp_masses = 0;
    IF_OK for(k = 0; k < param.num_set; k++){
      int max_cg_iterations, max_cg_restarts, prec_pbp;
      Real error_for_propagator, rel_error_for_propagator;
#ifdef CURRENT_DISC
      int max_cg_iterations_sloppy, max_cg_restarts_sloppy, prec_pbp_sloppy;
      Real error_for_propagator_sloppy, rel_error_for_propagator_sloppy;
#endif

      /* Number of stochastic sources */
      IF_OK status += get_i(stdin, prompt, "npbp_reps", &param.npbp_reps[k] );

#ifdef CURRENT_DISC
      /* For some applications.  Random source count between writes */
      IF_OK status += get_i(stdin, prompt, "nwrite", &param.nwrite[k] );
      IF_OK status += get_i(stdin, prompt, "source_spacing", &param.thinning[k] );
      /* For truncated solver Take difference of sloppy and precise?*/
      char savebuf[128];
      IF_OK status += get_s(stdin, prompt, "take_truncate_diff", savebuf);
      IF_OK {
	if(strcmp(savebuf,"no") == 0)param.truncate_diff[k] = 0;
	else if(strcmp(savebuf,"yes") == 0)param.truncate_diff[k] = 1;
	else {
	  printf("Unrecognized response %s\n",savebuf);
	  printf("Choices are 'yes' and 'no'\n");
	  status++;
	}
      }
#endif

      /* The following parameters are common to the set and will be copied
	 to each member */

      /* maximum no. of conjugate gradient iterations */
      IF_OK status += get_i(stdin,prompt,"max_cg_iterations", 
			    &max_cg_iterations );
      
      /* maximum no. of conjugate gradient restarts */
      IF_OK status += get_i(stdin,prompt,"max_cg_restarts", 
			    &max_cg_restarts );

      IF_OK status += get_i(stdin, prompt, "prec_pbp", 
			    &prec_pbp );

#ifdef CURRENT_DISC
      /* If we are taking the difference between a sloppy and a precise solve,
	 get the sloppy solve parameters */
      if(param.truncate_diff[k]){
	Real error_for_propagator_sloppy, rel_error_for_propagator_sloppy;

	/* The following parameters are common to the set and will be copied
	   to each member */
	
	/* maximum no. of conjugate gradient iterations */
	IF_OK status += get_i(stdin,prompt,"max_cg_iterations_sloppy", 
			      &max_cg_iterations_sloppy );
	
	/* maximum no. of conjugate gradient restarts */
	IF_OK status += get_i(stdin,prompt,"max_cg_restarts_sloppy", 
			      &max_cg_restarts_sloppy );
	
	IF_OK status += get_i(stdin, prompt, "prec_pbp_sloppy", 
			      &prec_pbp_sloppy );
	
      }
#endif

      /* Number of pbp masses in this set */
      IF_OK status += get_i(stdin, prompt, "number_of_pbp_masses",
			    &param.num_pbp_masses[k]);
      if(param.num_pbp_masses[k] > MAX_MASS_PBP){
	printf("Number of masses exceeds dimension %d\n",MAX_MASS_PBP);
	status++;
      }

      /* Indexing range for set */
      param.begin_pbp_masses[k] = npbp_masses;
      param.end_pbp_masses[k] = npbp_masses + param.num_pbp_masses[k] - 1;
      if(param.end_pbp_masses[k] > MAX_PBP_MASSES){
	printf("Total number of masses must be <= %d!\n", MAX_PBP_MASSES);
	status++;
      }

      IF_OK for(i = 0; i < param.num_pbp_masses[k]; i++){
    
	/* PBP mass parameters */
	
	IF_OK status += get_s(stdin, prompt,"mass", param.mass_label[npbp_masses] );
	IF_OK param.ksp_pbp[npbp_masses].mass = atof(param.mass_label[npbp_masses]);
#if ( FERM_ACTION == HISQ || FERM_ACTION == HYPISQ )
	IF_OK status += get_f(stdin, prompt,"naik_term_epsilon", 
			      &param.ksp_pbp[npbp_masses].naik_term_epsilon );
#else
	IF_OK param.ksp_pbp[npbp_masses].naik_term_epsilon = 0.0;
#endif
	/* error for staggered propagator conjugate gradient */
	IF_OK status += get_f(stdin, prompt,"error_for_propagator", 
			      &error_for_propagator );
	IF_OK status += get_f(stdin, prompt,"rel_error_for_propagator", 
			      &rel_error_for_propagator );
	
#ifdef CURRENT_DISC
	if(param.truncate_diff[k]){
	  /* error for staggered propagator conjugate gradient */
	  IF_OK status += get_f(stdin, prompt,"error_for_propagator_sloppy", 
				&error_for_propagator_sloppy );
	  IF_OK status += get_f(stdin, prompt,"rel_error_for_propagator_sloppy", 
				&rel_error_for_propagator_sloppy );
	}

	IF_OK status += get_s(stdin, prompt, "save_file", param.pbp_filenames[npbp_masses] );
#endif

	/* The set to which this pbp_mass belongs */
	IF_OK param.set[npbp_masses] = k;

	/* maximum no. of conjugate gradient iterations */
	param.qic_pbp[npbp_masses].max = max_cg_iterations;
      
	/* maximum no. of conjugate gradient restarts */
	param.qic_pbp[npbp_masses].nrestart = max_cg_restarts;
      
	/* precision */
	param.qic_pbp[npbp_masses].prec = prec_pbp;

	/* errors */
	param.qic_pbp[npbp_masses].resid = error_for_propagator;
	param.qic_pbp[npbp_masses].relresid = rel_error_for_propagator;

	param.qic_pbp[npbp_masses].parity = EVENANDODD;
	param.qic_pbp[npbp_masses].min = 0;
	param.qic_pbp[npbp_masses].start_flag = 0;
	param.qic_pbp[npbp_masses].nsrc = 1;

#ifdef CURRENT_DISC
      /* If we are taking the difference between a sloppy and a precise solve,
	 get the sloppy solve parameters */
	if(param.truncate_diff[k]){
	  
	  /* maximum no. of conjugate gradient iterations */
	  param.qic_pbp_sloppy[npbp_masses].max = max_cg_iterations_sloppy;
	  
	  /* maximum no. of conjugate gradient restarts */
	  param.qic_pbp_sloppy[npbp_masses].nrestart = max_cg_restarts_sloppy;
	  
	  /* precision */
	  param.qic_pbp_sloppy[npbp_masses].prec = prec_pbp_sloppy;
	  
	  /* errors */
	  param.qic_pbp_sloppy[npbp_masses].resid = error_for_propagator_sloppy;
	  param.qic_pbp_sloppy[npbp_masses].relresid = rel_error_for_propagator_sloppy;
	  
	  param.qic_pbp_sloppy[npbp_masses].parity = EVENANDODD;
	  param.qic_pbp_sloppy[npbp_masses].min = 0;
	  param.qic_pbp_sloppy[npbp_masses].start_flag = 0;
	  param.qic_pbp_sloppy[npbp_masses].nsrc = 1;
	  
	}
	
#endif
	
	npbp_masses++;
      }
    }
    
    /* End of input fields */
    if( status > 0)param.stopflag=1; else param.stopflag=0;
  } /* end if(this_node==0) */
Esempio n. 30
0
/* SETUP ROUTINES */
static int 
initial_set(){
  int prompt,status;
#ifdef FIX_NODE_GEOM
  int i;
#endif
  /* On node zero, read lattice size and send to others */
  if(mynode()==0){
    /* print banner */
    printf("SU3 staggered fermion measurements\n");
    printf("MIMD version %s\n",MILC_CODE_VERSION);
    printf("Machine = %s, with %d nodes\n",machine_type(),numnodes());
    gethostname(hostname, 128);
    printf("Host(0) = %s\n",hostname);
    printf("Username = %s\n", getenv("USER"));
    time_stamp("start");
    get_utc_datetime(utc_date_time);

    /* Print list of options selected */
    node0_printf("Options selected...\n");
    show_generic_opts();
    show_generic_ks_opts();

#if FERM_ACTION == HISQ
    show_su3_mat_opts();
    show_hisq_links_opts();
#elif FERM_ACTION == HYPISQ
    show_su3_mat_opts();
    show_hypisq_links_opts();
#endif
    status = get_prompt(stdin,  &prompt );
    
    IF_OK status += get_i(stdin,prompt,"nx", &param.nx );
    IF_OK status += get_i(stdin,prompt,"ny", &param.ny );
    IF_OK status += get_i(stdin,prompt,"nz", &param.nz );
    IF_OK status += get_i(stdin,prompt,"nt", &param.nt );
#ifdef FIX_NODE_GEOM
    IF_OK status += get_vi(stdin, prompt, "node_geometry", 
			   param.node_geometry, 4);
#ifdef FIX_IONODE_GEOM
    IF_OK status += get_vi(stdin, prompt, "ionode_geometry", 
			   param.ionode_geometry, 4);
#endif
#endif
    IF_OK status += get_i(stdin, prompt,"iseed", &param.iseed );
    IF_OK status += get_s(stdin, prompt,"job_id",param.job_id);
    
    if(status>0) param.stopflag=1; else param.stopflag=0;
  } /* end if(mynode()==0) */

  /* Node 0 broadcasts parameter buffer to all other nodes */
  broadcast_bytes((char *)&param,sizeof(param));

  if( param.stopflag != 0 )
    normal_exit(0);

  if(prompt==2)return prompt;

  nx=param.nx;
  ny=param.ny;
  nz=param.nz;
  nt=param.nt;
  iseed=param.iseed;
  
#ifdef FIX_NODE_GEOM
  for(i = 0; i < 4; i++)
    node_geometry[i] = param.node_geometry[i];
#ifdef FIX_IONODE_GEOM
  for(i = 0; i < 4; i++)
    ionode_geometry[i] = param.ionode_geometry[i];
#endif
#endif

  this_node = mynode();
  number_of_nodes = numnodes();
  volume=nx*ny*nz*nt;

  return(prompt);
}