void update_h( Real eps ){ int ff_prec = PRECISION; /* Just use prevailing precision for now */ #ifdef FN // free_fn_links(&fn_links); // free_fn_links(&fn_links_dmdu0); invalidate_fermion_links(fn_links); #endif /* gauge field force */ rephase(OFF); imp_gauge_force(eps,F_OFFSET(mom)); rephase(ON); /* fermionic force */ /* First compute M*xxx in temporary vector xxx_odd */ /* See long comment at end of file */ /* The diagonal term in M doesn't matter */ restore_fermion_links_from_site(fn_links, PRECISION); #ifdef ONEMASS eo_fermion_force_oneterm_site( eps, ((Real)nflavors)/4., F_OFFSET(xxx), ff_prec, fn_links ); #else /** eo_fermion_force_oneterm( eps, ((Real)nflavors1)/4., F_OFFSET(xxx1), ff_prec, fn_links ); eo_fermion_force_oneterm( eps, ((Real)nflavors2)/4., F_OFFSET(xxx2), ff_prec, fn_links ); **/ /**/ eo_fermion_force_twoterms_site( eps, ((Real)nflavors1)/4., ((Real)nflavors2)/4., F_OFFSET(xxx1), F_OFFSET(xxx2), ff_prec, fn_links ); // eo_fermion_force_twoterms_site(eps, 1., 1., F_OFFSET(xxx1), F_OFFSET(xxx2), ff_prec, fn_links); /**/ #endif } /* update_h */
// gauge and fermion force parts separately, for algorithms that use // different time steps for them void update_h_gauge( Real eps ){ /* node0_printf("update_h_gauge:\n");*/ /* gauge field force */ rephase(OFF); imp_gauge_force(eps,F_OFFSET(mom)); rephase(ON); } /* update_h_gauge */
int update_h_rhmc( Real eps, su3_vector **multi_x ){ int iters; #ifdef FN invalidate_fermion_links(fn_links); #endif /* node0_printf("update_h_rhmc:\n"); */ /* gauge field force */ rephase(OFF); imp_gauge_force(eps,F_OFFSET(mom)); rephase(ON); /* fermionic force */ iters = update_h_fermion( eps, multi_x ); return iters; } /* update_h_rhmc */
void update_h_u1( Real eps ){ int ff_prec = PRECISION; /* Just use prevailing precision for now */ int i, dir; site *s; #ifdef FN free_fn_links_u1(&fn_links); free_fn_links_u1(&fn_links_dmdu0); #endif /* gauge field force */ rephase(OFF); #ifdef NON_COMPACT gauge_force(eps); #else imp_gauge_force(eps,F_OFFSET(mom)); //compact gauge force #endif rephase(ON); /* fermionic force */ /* First compute M*xxx in temporary vector xxx_odd */ /* See long comment at end of file */ /* The diagonal term in M doesn't matter */ /*for(dir=XUP;dir<=TUP;dir++) FORALLMYSITES(i,s) { if(dir!=TUP && s->link[dir].real != 1.) printf("spatial link[%d], numbr. %d is non-zero\n"); }*/ eo_fermion_force_oneterm_u1( eps, ((Real)nflavors)/4., F_OFFSET(xxx), ff_prec, &fn_links, &ks_act_paths ); #ifdef DRUT_DEBUG for(dir=XUP;dir<=TUP;dir++) FORALLSITES(i,s) { if(dir != TUP) { /*printf("spatial link[%d], numbr. %d is non-zero (%e,%e)\n", dir, i, s->link[dir].real, s->link[dir].imag);*/ s->mom[dir].imag = 0.; } } #endif /* keep N_f/4 as in graphene can just keep N_f=4 for unquenched and N_f=0 for quenched C.W. 7/12/2011 */ } /* update_h_u1 */