int main(int argc, char *argv[]) { int meascount; int prompt; Real avm_iters,avs_iters; double ssplaq,stplaq; double starttime,endtime; double dtime; int MinCG,MaxCG; Real size_r,RsdCG; register int i,j,l; register site *s; int spinindex,spin,color,k,kk,t; int flag; int ci,si,sf,cf; int num_prop; Real space_vol; int status; int source_chirality; wilson_vector **eigVec ; double *eigVal ; int total_R_iters ; double norm; Real re,im,re5,im5; complex cc; char label[20] ; double *grad, *err, max_error; Matrix Array,V ; int key[4]; #define restrict rstrict /* C-90 T3D cludge */ int restrict[4]; Real norm_fac[10]; static char *mes_kind[10] = {"PION","PS505","PS055","PS0505", "RHO33","RHO0303","SCALAR","SCALA0","PV35","B12"}; static char *bar_kind[4] = {"PROTON","PROTON0","DELTA","DELTA0"}; complex *pmes_prop[MAX_MASSES][10]; complex *smes_prop[MAX_MASSES][10]; complex *bar_prop[MAX_MASSES][4]; w_prop_file *fp_in_w[MAX_MASSES]; /* For propagator files */ w_prop_file *fp_out_w[MAX_MASSES]; /* For propagator files */ initialize_machine(&argc,&argv); /* Remap standard I/O */ if(remap_stdio_from_args(argc, argv) == 1)terminate(1); g_sync(); /* set up */ prompt = setup_p(); /* loop over input sets */ while( readin(prompt) == 0) { starttime=dclock(); MaxCG=niter; avm_iters=0.0; meascount=0; if(this_node==0)printf("END OF HEADER\n"); setup_offset(); /* if(this_node==0)printf("warning--no fat link\n"); */ monte_block_ape_b(1); /* call plaquette measuring process */ d_plaquette(&ssplaq,&stplaq); if(this_node==0)printf("FATPLAQ %e %e\n", (double)ssplaq,(double)stplaq); /* flip the time oriented fat links if(this_node==0) printf("Periodic time BC\n"); */ if(this_node==0) printf("AP time BC\n"); boundary_flip(MINUS); setup_links(SIMPLE); /* if(this_node==0) printf("num_masses = %d\n", num_masses); */ /* Loop over mass */ for(k=0;k<num_masses;k++){ m0=mass[k]; if(m0 <= -10.0) exit(1); RsdCG=resid[k]; if(this_node==0)printf("mass= %g r0= %g residue= %g\n", (double)m0,(double)wqs[k].r0,(double)RsdCG); build_params(m0); make_clov1(); eigVal = (double *)malloc(Nvecs*sizeof(double)); eigVec = (wilson_vector **)malloc(Nvecs*sizeof(wilson_vector*)); for(i=0;i<Nvecs;i++) eigVec[i]= (wilson_vector*)malloc(sites_on_node*sizeof(wilson_vector)); /* open files for wilson propagators */ fp_in_w[k] = r_open_wprop(startflag_w[k], startfile_w[k]); fp_out_w[k] = w_open_wprop(saveflag_w[k], savefile_w[k], wqs[k].type); if(startflag_w[k] == FRESH)flag = 0; else flag = 1; spin=color=0; /* needed by wilson writing routines */ /* initialize the CG vectors */ if(flag==0){ if(this_node==0) printf("random (but chiral) initial vectors\n"); /* Initiallize all the eigenvectors to a random vector */ for(j=0;j<Nvecs;j++) { if(j< Nvecs/2){ source_chirality=1;} else{source_chirality= -1;} printf("source chirality %d\n",source_chirality); grsource_w(); FORALLSITES(i,s){ copy_wvec(&(s->g_rand),&(eigVec[j][i])); if(source_chirality==1){ for(kk=2;kk<4;kk++)for(l=0;l<3;l++) eigVec[j][i].d[kk].c[l]=cmplx(0.0,0.0); } if(source_chirality== -1){ for(kk=0;kk<2;kk++)for(l=0;l<3;l++) eigVec[j][i].d[kk].c[l]=cmplx(0.0,0.0); } } eigVal[j]=1.0e+16; } } else{ if(this_node==0) printf("reading in %d wilson_vectors--must be <= 12\n",Nvecs); /* load psi if requested */ for(j=0;j<Nvecs;j++){ printf("reading %d %d %d\n",j,spin,color); #ifdef IOTIME status = reload_wprop_sc_to_site( startflag_w[k], fp_in_w[k], spin, color, F_OFFSET(psi),1); #else status = reload_wprop_sc_to_site( startflag_w[k], fp_in_w[k], spin, color, F_OFFSET(psi),0); #endif /* compute eigenvalue */ herm_delt(F_OFFSET(psi),F_OFFSET(chi)); re=im=0.0; FORALLSITES(i,s){ cc = wvec_dot( &(s->chi), &(s->psi) ); re += cc.real ; } g_floatsum(&re); eigVal[j]=re; printf("trial eigenvalue of state %d %e\n",j,eigVal[j]); FORALLSITES(i,s){eigVec[j][i]=s->psi;} spin++; if((spin %4) == 0){spin=0;color++;} } }
int main(int argc, char *argv[]) { int meascount,todo; int prompt; double dssplaq,dstplaq; int m_iters,s_iters,avm_iters,avs_iters,avspect_iters; #ifdef SPECTRUM int spect_iters; #endif complex plp; double dtime; 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(); /* set up */ prompt = setup(); /* loop over input sets */ while( readin(prompt) == 0){ /* set up loop tables */ make_loop_table2(); /* perform warmup trajectories */ dtime = -dclock(); /* call plaquette measuring process */ /* Check: compute initial plaquette (T. D.) */ d_plaquette(&dssplaq,&dstplaq); if(this_node==0)printf("START %e %e %e\n", dssplaq,dstplaq, dssplaq+dstplaq); for(todo=warms; todo > 0; --todo ){ update(); } if(this_node==0)printf("WARMUPS COMPLETED\n"); /* perform measuring trajectories, reunitarizing and measuring */ meascount=0; /* number of measurements */ plp = cmplx(99.9,99.9); avspect_iters = avm_iters = avs_iters = 0; for(todo=trajecs; todo > 0; --todo ){ /* do the trajectories */ s_iters=update(); /* Do "local" measurements every trajectory! */ /* The action from the RG trans */ gauge_action(&dssplaq); if(this_node==0)printf("ACTION_V %e %e\n", dssplaq,(dssplaq)/(double)(volume*6)); /* call plaquette measuring process */ d_plaquette(&dssplaq,&dstplaq); /* call the Polyakov loop measuring program */ plp = ploop(); /* generate a pseudofermion configuration */ boundary_flip(MINUS); m_iters = f_measure_cl(); boundary_flip(PLUS); ++meascount; avm_iters += m_iters; avs_iters += s_iters; if(this_node==0)printf("GMES %e %e %e %e %e\n", (double)plp.real,(double)plp.imag,(double)m_iters, dssplaq,dstplaq); /* Re(Polyakov) Im(Poyakov) cg_iters ss_plaq st_plaq */ /* measure other stuff every "propinterval" trajectories */ if(((todo-1)%propinterval) == 0){ fixflag = NO_GAUGE_FIX; #ifdef SPECTRUM #ifdef SCREEN gaugefix(ZUP,(Real)1.5,500,(Real)GAUGE_FIX_TOL); invalidate_this_clov(gen_clov); fixflag = COULOMB_GAUGE_FIX; boundary_flip(MINUS); spect_iters = s_props_cl(); avspect_iters += spect_iters; boundary_flip(PLUS); #else /* spectrum in time direction */ gaugefix(TUP,(Real)1.5,500,(Real)GAUGE_FIX_TOL); invalidate_this_clov(gen_clov); fixflag = COULOMB_GAUGE_FIX; /* commented 15 OCT 95, MBW....we'll use periodic b.c. for spect. */ /* boundary_flip(MINUS); */ /* Don't need t_props if we are doing w_spectrum - C. DeTar */ /* spect_iters = t_props_cl(); avspect_iters += spect_iters; */ spect_iters = w_spectrum_cl(); avspect_iters += spect_iters; /* boundary_flip(PLUS); */ #endif /* end ifndef SCREEN */ #endif /* end ifdef SPECTRUM */ } fflush(stdout); } /* end loop over trajectories */ if(this_node==0)printf("RUNNING COMPLETED\n"); /* Check: compute final plaquette (T. D.) */ d_plaquette(&dssplaq,&dstplaq); if(this_node==0)printf("STOP %e %e %e\n", dssplaq,dstplaq, dssplaq+dstplaq); if(meascount>0) { if(this_node==0)printf("average cg iters for step= %e\n", (double)avs_iters/meascount); if(this_node==0)printf("average cg iters for measurement= %e\n", (double)avm_iters/meascount); #ifdef SPECTRUM if(this_node==0)printf("average cg iters for spectrum = %e\n", (double)avspect_iters/meascount); #endif } dtime += dclock(); if(this_node==0){ printf("Time = %e seconds\n",dtime); printf("total_iters = %d\n",total_iters); } fflush(stdout); dtime = -dclock(); /* save lattice if requested */ if( saveflag != FORGET ){ save_lattice( saveflag, savefile, stringLFN ); } } return 0; }
int main(int argc, char *argv[]){ int meascount,todo; int prompt; double ssplaq,stplaq; int m_iters,s_iters,avm_iters,avs_iters,avspect_iters; #ifdef SPECTRUM int spect_iters; #endif #ifdef QUARK int disp_iters; #endif complex plp; double dtime; initialize_machine(&argc,&argv); /* Remap standard I/O */ if(remap_stdio_from_args(argc, argv) == 1)terminate(1); g_sync(); /* set up */ prompt = setup(); /* loop over input sets */ while( readin(prompt) == 0){ /* perform warmup trajectories */ dtime = -dclock(); for(todo=warms; todo > 0; --todo ){ update(); } if(this_node==0)printf("WARMUPS COMPLETED\n"); /* perform measuring trajectories, reunitarizing and measuring */ meascount=0; /* number of measurements */ plp = cmplx(99.9,99.9); avspect_iters = avm_iters = avs_iters = 0; for(todo=trajecs; todo > 0; --todo ){ /* do the trajectories */ if(steps>0)s_iters=update(); else s_iters=-99; /* measure every "propinterval" trajectories */ if((todo%propinterval) == 0){ /* generate a pseudofermion configuration */ boundary_flip(MINUS); m_iters = f_measure2(); #ifdef SPECTRUM #ifdef SCREEN boundary_flip(PLUS); gaugefix(ZUP,(Real)1.5,100,(Real)GAUGE_FIX_TOL); boundary_flip(MINUS); spect_iters = s_props(); avspect_iters += spect_iters; spect_iters = w_spectrum_z(); avspect_iters += spect_iters; #ifdef QUARK boundary_flip(PLUS); /* Lorentz gauge*/ gaugefix(8,(Real)1.5,100,(Real)GAUGE_FIX_TOL); boundary_flip(MINUS); disp_iters = quark(); avspect_iters += disp_iters; #endif /* ifdef QUARK */ #else /* spectrum in time direction */ boundary_flip(PLUS); gaugefix(TUP,(Real)1.5,100,(Real)GAUGE_FIX_TOL); boundary_flip(MINUS); spect_iters = t_props(); avspect_iters += spect_iters; spect_iters = w_spectrum(); avspect_iters += spect_iters; #endif /* end ifndef SCREEN */ #endif /* end ifdef SPECTRUM */ boundary_flip(PLUS); /* call plaquette measuring process */ d_plaquette(&ssplaq,&stplaq); /* call the Polyakov loop measuring program */ plp = ploop(); avm_iters += m_iters; avs_iters += s_iters; ++meascount; if(this_node==0)printf("GMES %e %e %e %e %e\n", (double)plp.real,(double)plp.imag,(double)m_iters, (double)ssplaq,(double)stplaq); /* Re(Polyakov) Im(Poyakov) cg_iters ss_plaq st_plaq */ fflush(stdout); } } /* end loop over trajectories */ if(this_node==0)printf("RUNNING COMPLETED\n"); if(meascount>0) { if(this_node==0)printf("average cg iters for step= %e\n", (double)avs_iters/meascount); if(this_node==0)printf("average cg iters for measurement= %e\n", (double)avm_iters/meascount); #ifdef SPECTRUM if(this_node==0)printf("average cg iters for spectrum = %e\n", (double)avspect_iters/meascount); #endif } dtime += dclock(); if(this_node==0){ printf("Time = %e seconds\n",dtime); printf("total_iters = %d\n",total_iters); } fflush(stdout); /* save lattice if requested */ if( saveflag != FORGET ){ save_lattice( saveflag, savefile, stringLFN ); } } return 0; }