void coverQuantisationCornerCases() { // origin at lower end of the time range FixedFrameQuantiser case1 (1, Time::MIN); CHECK (secs(0) == case1.gridAlign(Time::MIN )); CHECK (secs(0) == case1.gridAlign(Time::MIN +TimeValue(1) )); CHECK (secs(1) == case1.gridAlign(Time::MIN +secs(1) )); CHECK (Time::MAX -secs(1) > case1.gridAlign( secs(-1) )); CHECK (Time::MAX -secs(1) <= case1.gridAlign( secs (0) )); CHECK (Time::MAX > case1.gridAlign( secs (0) )); CHECK (Time::MAX == case1.gridAlign( secs(+1) )); CHECK (Time::MAX == case1.gridAlign( secs(+2) )); // origin at upper end of the time range FixedFrameQuantiser case2 (1, Time::MAX); CHECK (secs( 0) == case2.gridAlign(Time::MAX )); CHECK (secs(-1) == case2.gridAlign(Time::MAX -TimeValue(1) )); // note: next lower frame CHECK (secs(-1) == case2.gridAlign(Time::MAX -secs(1) )); // i.e. the same as a whole frame down CHECK (Time::MIN +secs(1) < case2.gridAlign( secs(+2) )); CHECK (Time::MIN +secs(1) >= case2.gridAlign( secs(+1) )); CHECK (Time::MIN < case2.gridAlign( secs(+1) )); CHECK (Time::MIN == case2.gridAlign( secs( 0) )); // note: because of downward truncating, CHECK (Time::MIN == case2.gridAlign( secs(-1) )); // resulting values will already exceed CHECK (Time::MIN == case2.gridAlign( secs(-2) )); // allowed range and thus will be clipped // maximum frame size is half the time range Duration hugeFrame(Time::MAX); FixedFrameQuantiser case3 (hugeFrame); CHECK (Time::MIN == case3.gridAlign(Time::MIN )); CHECK (Time::MIN == case3.gridAlign(Time::MIN +TimeValue(1) )); CHECK (Time::MIN == case3.gridAlign( secs(-1) )); CHECK (TimeValue(0) == case3.gridAlign( secs( 0) )); CHECK (TimeValue(0) == case3.gridAlign( secs(+1) )); CHECK (TimeValue(0) == case3.gridAlign(Time::MAX -TimeValue(1) )); CHECK (Time::MAX == case3.gridAlign(Time::MAX )); // now displacing this grid by +1sec.... FixedFrameQuantiser case4 (hugeFrame, secs(1)); CHECK (Time::MIN == case4.gridAlign(Time::MIN )); CHECK (Time::MIN == case4.gridAlign(Time::MIN +TimeValue(1) )); // clipped... CHECK (Time::MIN == case4.gridAlign(Time::MIN +secs(1) )); // but now exact (unclipped) CHECK (Time::MIN == case4.gridAlign( secs(-1) )); CHECK (Time::MIN == case4.gridAlign( secs( 0) )); CHECK (TimeValue(0) == case4.gridAlign( secs(+1) )); //.....now exactly the frame number zero CHECK (TimeValue(0) == case4.gridAlign(Time::MAX -TimeValue(1) )); CHECK (TimeValue(0) == case4.gridAlign(Time::MAX )); //.......still truncated down to frame #0 // larger frames aren't possible Duration not_really_larger(secs(10000) + hugeFrame); CHECK (hugeFrame == not_really_larger); // frame sizes below the time micro grid get trapped long subAtomic = 2*GAVL_TIME_SCALE; // too small for this universe... VERIFY_ERROR (BOTTOM_VALUE, FixedFrameQuantiser quark(subAtomic) ); VERIFY_ERROR (BOTTOM_VALUE, FixedFrameQuantiser quark(Duration (FSecs (1,subAtomic))) ); }
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; }