Exemple #1
0
	/* ttt  <- ttt - msq_x4*src	(msq = mass squared) */
	FORSOMEPARITY(i,s,l_parity){
#ifdef CONGRAD_TMP_VECTORS
	  if( i < loopend-FETCH_UP ){
	    prefetch_VVVV( &ttt[i+FETCH_UP], 
			   &t_dest[i+FETCH_UP],
			   (su3_vector *)F_PT(s+FETCH_UP,src),
			   &resid[i+FETCH_UP]);
	  }
	  scalar_mult_add_su3_vector( &ttt[i], &t_dest[i],
				      -msq_x4, &ttt[i] );
	    /* note that we go back to the site structure for src */
	  add_su3_vector( (su3_vector *)F_PT(s,src),
			  &ttt[i], &resid[i] );
	  /* remember ttt contains -M_adjoint*M*src */
	  cg_p[i] = resid[i];
	  /* note that we go back to the site structure for src */
	  source_norm += (double)magsq_su3vec( (su3_vector *)F_PT(s,src) );
	  rsq += (double)magsq_su3vec( &resid[i] );
#else
	  if( i < loopend-FETCH_UP ){
	    prefetch_VVVV( &((s+FETCH_UP)->ttt), 
			   (su3_vector *)F_PT(s+FETCH_UP,dest),
			   (su3_vector *)F_PT(s+FETCH_UP,src),
			   &((s+FETCH_UP)->resid));
	  }
	  scalar_mult_add_su3_vector( &(s->ttt), (su3_vector *)F_PT(s,dest),
				      -msq_x4, &(s->ttt) );
	  add_su3_vector( (su3_vector *)F_PT(s,src),
			  &(s->ttt), &(s->resid) );
	  s->cg_p = s->resid;
	  source_norm += (double) magsq_su3vec( (su3_vector *)F_PT(s,src) );
	  rsq += (double) magsq_su3vec( &(s->resid) );
#endif
	} END_LOOP
Exemple #2
0
void ks_dirac_op( su3_vector *src, su3_vector *dst, Real mass, 
		  int parity, imp_ferm_links_t *fn){
    register int i;
    register site *s;

    dslash_field( src, dst, parity, fn);
    FORSOMEPARITYDOMAIN(i,s,parity){
      scalar_mult_add_su3_vector( dst+i, src+i, +2.0*mass, dst+i);
    }
Exemple #3
0
void 
dslash_fn_dir(su3_vector *src, su3_vector *dest, int parity,
	      fn_links_t *fn, int dir, int fb, 
	      Real wtfat, Real wtlong)
{
  register int i ;
  site *s;
  msg_tag *tag[2];
  su3_matrix *fat = get_fatlinks(fn);
  su3_matrix *lng = get_lnglinks(fn);
  su3_vector tmp;
  int do_long = (lng != NULL) && (wtlong != 0.);
  char myname[] = "fn_shift";
  
  if(fat == NULL) {
    printf("%s(%d): fat or lng member is null\n", myname, this_node);
    terminate(1);
  }
  
  if(fb > 0){

    /* Shift from forward direction */

    tag[0] = start_gather_field( src, sizeof(su3_vector), dir, 
				 parity, gen_pt[0] );
    if(do_long)
      tag[1] = start_gather_field( src, sizeof(su3_vector), DIR3(dir), 
				   parity, gen_pt[1] );
    wait_gather(tag[0]);
    if(do_long)
      wait_gather(tag[1]);
  
    FORSOMEPARITYDOMAIN(i,s,parity)
      {
	mult_su3_mat_vec( fat+4*i+dir, (su3_vector *)gen_pt[0][i], &tmp );
	scalar_mult_add_su3_vector( dest+i, &tmp, wtfat, dest+i ) ;    
	if(do_long){
	  mult_su3_mat_vec( lng+4*i+dir, (su3_vector *)gen_pt[1][i], &tmp );
	  scalar_mult_add_su3_vector( dest+i, &tmp, wtlong, dest+i ) ;    
	}
      } END_LOOP
	FORSOMEPARITY(i,s,l_parity) {
		scalar_mult_add_su3_vector( &temp[i],&init_guess[i],msq_xm4,&temp[i] );
		add_su3_vector((su3_vector *)F_PT(s,src1),&temp[i],&common_source[i] );
	        source_norm += (double)magsq_su3vec( &common_source[i] );	
		source_norm1 += (double)magsq_su3vec( (su3_vector *)F_PT(s,src1) );  
		/*pm_strange[i] = cg_p[i] = resid[i] = common_source[i];*/
		su3vec_copy( &common_source[i],&(resid[i]) );
		su3vec_copy(&(resid[i]),&(cg_p[i]) );
                su3vec_copy(&(resid[i]), &pm_strange[i]);
                su3vec_copy(&init_guess[i],&destvec1[i] );
                su3vec_copy(&init_guess[i],&destvec2[i] );
	} END_LOOP
Exemple #5
0
static void scalar_mult_add_latvec_field(su3_vector *a, su3_vector *b, Real s, su3_vector *c){
  int i;
  FORALLFIELDSITES(i){
    scalar_mult_add_su3_vector(a+i, b+i, s, c+i);
  }
}