Пример #1
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;
  char savebuf[128];
  int i;
  int ipair;

  /* 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 );

    IF_OK if (prompt!=0) 
      printf("enter 'no_gauge_fix', or 'coulomb_gauge_fix'\n");
    IF_OK scanf("%s",savebuf);
    IF_OK printf("%s\n",savebuf);
    IF_OK {
      if(strcmp("coulomb_gauge_fix",savebuf) == 0 ){
	param.fixflag = COULOMB_GAUGE_FIX;
      }
      else if(strcmp("no_gauge_fix",savebuf) == 0 ) {
	param.fixflag = NO_GAUGE_FIX;
      }
      else{
	printf("error in input: fixing_command is invalid\n"); status++;
      }
    }
    
    /* 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 );

    /* 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);
    
    /*------------------------------------------------------------*/
    /* Propagator inversion control                               */
    /*------------------------------------------------------------*/

    /* maximum no. of conjugate gradient iterations */
    IF_OK status += get_i(stdin,prompt,"max_cg_iterations", 
			  &param.qic.max );
    
    /* maximum no. of conjugate gradient restarts */
    IF_OK status += get_i(stdin,prompt,"max_cg_restarts", 
			  &param.qic.nrestart );
    
    /* error for clover propagator conjugate gradient */
    IF_OK status += get_f(stdin, prompt,"error_for_propagator", 
			  &param.qic.resid );
    IF_OK status += get_f(stdin, prompt,"rel_error_for_propagator", 
			  &param.qic.relresid );
    /* Precision fixed to prevailing precision for now */
    param.qic.prec = PRECISION;
    param.qic.parity = EVENANDODD;
    

    /*------------------------------------------------------------*/
    /* Propagators and their sources                              */
    /*------------------------------------------------------------*/

    /* Number of propagators */
    IF_OK status += get_i(stdin,prompt,"number_of_propagators", 
			  &param.num_prop );
    if( param.num_prop>MAX_PROP ){
      printf("num_prop = %d must be <= %d!\n", param.num_prop, MAX_PROP);
      status++;
    }

    IF_OK for(i = 0; i < param.num_prop; i++){
    
      /* Propagator parameters */
      IF_OK status += get_s(stdin, prompt,"propagator_type", savebuf );
      IF_OK {
	if(strcmp(savebuf,"clover") == 0)param.prop_type[i] = CLOVER_TYPE;
	else if(strcmp(savebuf,"KS") == 0)param.prop_type[i] = KS_TYPE;
	else {
	  printf("Unknown quark type %s\n",savebuf);
	  status++;
	}
      }
      if(param.prop_type[i] == CLOVER_TYPE){
	IF_OK status += get_s(stdin, prompt,"kappa", param.kappa_label[i]);
	IF_OK param.dcp[i].Kappa = atof(param.kappa_label[i]);
	IF_OK status += get_f(stdin, prompt,"clov_c", &param.dcp[i].Clov_c );
	param.dcp[i].U0 = param.u0;
	IF_OK status += get_s(stdin, prompt,"check", savebuf);
	IF_OK {
	  /* Should we be checking the propagator by running the solver? */
	  if(strcmp(savebuf,"no") == 0)param.check[i] = 0;
	  else param.check[i] = 1;
	}
	IF_OK status += ask_starting_wprop( stdin, prompt, 
					    &param.startflag_w[i],
					    param.startfile_w[i]);
	
	IF_OK status += ask_ending_wprop( stdin, prompt, &param.saveflag_w[i],
					  param.savefile_w[i]);
	
	/* Get source type */
	IF_OK init_wqs(&param.src_wqs[i]);
	IF_OK status += get_w_quark_source( stdin, prompt, &param.src_wqs[i]);
	
      } else {  /* KS_TYPE */
Пример #2
0
int main(int argc,char *argv[])
{
  int prompt , k, ns, i;
  site *s;
  double inv_space_vol;
  
  int color,spin, color1, spin1;
  
  int key[4];
  int dummy[4];
  FILE *corr_fp;
  
  complex pr_tmp; 
  wilson_propagator *qdest;
  wilson_propagator qtemp1;

  wilson_vector *psi = NULL;
  w_prop_file *wpf;
  wilson_quark_source wqs;
  
  key[XUP] = 1;
  key[YUP] = 1;
  key[ZUP] = 1;
  key[TUP] = 0;

  initialize_machine(&argc,&argv);
#ifdef HAVE_QDP
  QDP_initialize(&argc, &argv);
#endif
  /* Remap standard I/O */
  if(remap_stdio_from_args(argc, argv) == 1)terminate(1);

  g_sync();
  prompt = setup(); 
  setup_restrict_fourier(key, dummy);

  psi = create_wv_field();

  /* Initialize the source type */
  init_wqs(&wqs);

  while( readin(prompt) == 0){
    
    
    /**************************************************************/
    /*load staggered propagator*/
    
    reload_ksprop_to_site3(ks_prop_startflag, 
			   start_ks_prop_file, &ksqs, F_OFFSET(prop), 1);
    
    FORALLSITES(i,s){
      for(color = 0; color < 3; color++)for(k = 0; k < 3; k++)
	s->stag_propagator.e[color][k] = s->prop[color].c[k];
    }
    
    /* Initialize FNAL correlator file */
    
    corr_fp = open_fnal_meson_file(savefile_c);

    /* Load Wilson propagator for each kappa */

    for(k=0; k<num_kap; k++){
      kappa = kap[k];
      wpf = r_open_wprop(startflag_w[k], startfile_w[k]);
      for(spin=0;spin<4;spin++)
	for(color=0;color<3;color++){
	  if(reload_wprop_sc_to_field(startflag_w[k], wpf,
				      &wqs, spin, color, psi, 1) != 0)
	    terminate(1);
	  FORALLSITES(i,s){
	    copy_wvec(&psi[i],&lattice[i].quark_propagator.c[color].d[spin]);
	  }
	}
      r_close_wprop(startflag_w[k],wpf);

      /*******************************************************************/
      /* Rotate the heavy quark */
      
      rotate_w_quark(F_OFFSET(quark_propagator), 
		     F_OFFSET(quark_propagator_copy), d1[k]);  
      // result in quark_propagator_copy


      /**************************************************************/
      /*Calculate and print out the spectrum with the rotated heavy
        quark propagators*/

      spectrum_hl_rot(corr_fp, F_OFFSET(stag_propagator), 
		      F_OFFSET(quark_propagator_copy), k);
      
      
      /**************************************************************/
      /*Smear quarks, calculate and print out the spectrum with the
        smeared heavy quark propagators*/
      
      for(color=0;color<3;color++)for(spin=0;spin<4;spin++){
	restrict_fourier_site(F_OFFSET(quark_propagator.c[color].d[spin]),
			      sizeof(wilson_vector), FORWARDS);
      }
      
      for(ns=0; ns<num_smear;ns++){
	if(strcmp(smearfile[ns],"none")==0) continue;

	inv_space_vol = 1./((double)nx*ny*nz);

	/* Either read a smearing file, or take it to be a point sink */
	if(strlen(smearfile[ns]) != 0){

	   get_smearings_bi_serial(smearfile[ns]);
	
	   restrict_fourier_site(F_OFFSET(w),
				 sizeof(complex), FORWARDS);
	
	   FORALLSITES(i,s){
	     for(color=0;color<3;color++)for(spin=0;spin<4;spin++)
	      for(color1=0;color1<3;color1++)for(spin1=0;spin1<4;spin1++){
		  pr_tmp = 
		    s->quark_propagator.c[color].d[spin].d[spin1].c[color1];
	  
		  s->quark_propagator_copy.c[color].d[spin].d[spin1].c[color1].real =
		    pr_tmp.real * s->w.real - pr_tmp.imag * s->w.imag;
	      
		  s->quark_propagator_copy.c[color].d[spin].d[spin1].c[color1].imag =
		    pr_tmp.real * s->w.imag + pr_tmp.imag * s->w.real;
		}
	   }
	  } else { /* Point sink */
	   FORALLSITES(i,s){
	     for(color=0;color<3;color++)for(spin=0;spin<4;spin++)
	      for(color1=0;color1<3;color1++)for(spin1=0;spin1<4;spin1++){
		  pr_tmp = 
		    s->quark_propagator.c[color].d[spin].d[spin1].c[color1];
		  
		  s->quark_propagator_copy.c[color].d[spin].d[spin1].c[color1].real =
		    pr_tmp.real;
	      
		  s->quark_propagator_copy.c[color].d[spin].d[spin1].c[color1].imag =
		    pr_tmp.imag;
		}
	   }
	  }
	
	  for(color=0;color<3;color++)for(spin=0;spin<4;spin++){
	      restrict_fourier_site(F_OFFSET(quark_propagator_copy.c[color].d[spin]),
				    sizeof(wilson_vector), BACKWARDS);
	    }	
	  
	  FORALLSITES(i,s)
	  {
	    qdest = &(s->quark_propagator_copy);
	    qtemp1 = s->quark_propagator_copy;
	    for(spin=0;spin<4;spin++)for(color=0;color<3;color++)
 	      for(spin1=0;spin1<4;spin1++)for(color1=0;color1<3;color1++)
	      {
		qdest->c[color].d[spin1].d[spin].c[color1].real = 
		  qtemp1.c[color].d[spin].d[spin1].c[color1].real;
		qdest->c[color].d[spin1].d[spin].c[color1].imag = 
		  qtemp1.c[color].d[spin].d[spin1].c[color1].imag;
	      }
	  }