/* 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, ¶m.startflag, param.startfile ); IF_OK status += get_f(stdin, prompt,"u0", ¶m.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", ¶m.staple_weight); IF_OK status += get_i(stdin, prompt, "ape_iter", ¶m.ape_iter); /*------------------------------------------------------------*/ /* Propagator inversion control */ /*------------------------------------------------------------*/ /* maximum no. of conjugate gradient iterations */ IF_OK status += get_i(stdin,prompt,"max_cg_iterations", ¶m.qic.max ); /* maximum no. of conjugate gradient restarts */ IF_OK status += get_i(stdin,prompt,"max_cg_restarts", ¶m.qic.nrestart ); /* error for clover propagator conjugate gradient */ IF_OK status += get_f(stdin, prompt,"error_for_propagator", ¶m.qic.resid ); IF_OK status += get_f(stdin, prompt,"rel_error_for_propagator", ¶m.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", ¶m.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", ¶m.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, ¶m.startflag_w[i], param.startfile_w[i]); IF_OK status += ask_ending_wprop( stdin, prompt, ¶m.saveflag_w[i], param.savefile_w[i]); /* Get source type */ IF_OK init_wqs(¶m.src_wqs[i]); IF_OK status += get_w_quark_source( stdin, prompt, ¶m.src_wqs[i]); } else { /* KS_TYPE */
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; } }