예제 #1
0
파일: update_h.c 프로젝트: lattice/milc
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 */
예제 #2
0
// 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 */
예제 #3
0
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 */
예제 #4
0
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 */