Example #1
0
QDP_Subset *
qhmcqdp_get_timeslices(lattice_t *lat)
{
  if(lat->timeslices==NULL) {
    int dir = lat->nd - 1;
    int n = QDP_coord_size_L(lat->qlat, dir);
    lat->timeslices =
      QDP_create_subset_L(lat->qlat, slice_func, (void*)&dir, sizeof(dir), n);
  }
  return lat->timeslices;
}
Example #2
0
QDP_Subset *
qhmcqdp_get_hyper(lattice_t *lat, int ha[], int *n)
{
    int nd = lat->nd;
    int hn[nd];
    *n = 1;
    for(int i=0; i<nd; i++) {
        int c = QDP_coord_size_L(lat->qlat, i);
        hn[i] = (c+ha[i]-1)/ha[i];
        *n *= hn[i];
    }
    int *args[3] = {&nd, ha, hn};
    QDP_Subset *s = QDP_create_subset_L(lat->qlat, hyper_func, (void*)args,
                                        sizeof(args), *n);
    return s;
}
Example #3
0
static int
qopqdp_lattice_call(lua_State *L)
{
    BEGIN_ARGS;
    GET_LATTICE(l);
    OPT_INT(dim, 0);
    END_ARGS;
    if(dim>0) {
        int s = QDP_coord_size_L(l->qlat, dim-1);
        lua_pushinteger(L, s);
    } else {
        int nd = QDP_ndim_L(l->qlat);
        int x[nd];
        QDP_latsize_L(l->qlat, x);
        qhmc_push_int_array(L, nd, x);
    }
    return 1;
}
Example #4
0
QDP_Subset *
qhmc_qopqdp_qsubset_from_string(lua_State *L, lattice_t *lat,
				const char *s, int *n)
{
  *n = 0;
  if(s==NULL) return NULL;
  QDP_Subset *subs = NULL;
  QDP_Lattice *qlat = lat->qlat;
  switch(s[0]) {
  case 'a':
    subs = QDP_all_and_empty_L(qlat);
    if(strcmp(s,"all")==0) *n = 1;
    else *n = 2;
    break;
  case 'e':
    *n = 1;
    if(strncmp(s,"evenodd",7)==0 || strncmp(s,"evenandodd",10)==0) *n = 2;
    subs = QDP_even_and_odd_L(qlat);
    {
      int t=0;
      int nn = sscanf(s,"%*[^0-9]%i",&t);
      if(nn && t>=1 && t<=lat->nd) {
	subs = qhmcqdp_get_eodir(lat, t-1);
      }
    }
    break;
  case 'o':
    *n = 1;
    subs = 1 + QDP_even_and_odd_L(qlat);
    {
      int t=0;
      int nn = sscanf(s,"%*[^0-9]%i",&t);
      if(nn && t>=1 && t<=lat->nd) {
	subs = 1 + qhmcqdp_get_eodir(lat, t-1);
      }
    }
    break;
  case 's':
    if(strncmp(s,"staggered",9)==0) {
      int ns = 1 << QDP_ndim_L(qlat);
      if(strcmp(s+9,"")==0) {
	subs = qhmcqdp_get_staggered(lat);
	*n = ns;
      } else {
	int t=0;
	int nn = sscanf(s+9,"%i",&t);
	if(nn && t>=0 && t<ns) {
	  subs = &qhmcqdp_get_staggered(lat)[t];
	  *n = 1;
	}
      }
    }
    break;
  case 't':
    if(strncmp(s,"timeslice",9)==0) {
      int nt = QDP_coord_size_L(qlat,QDP_ndim_L(qlat)-1);
      if(strcmp(s+9,"s")==0) {
	subs = qhmcqdp_get_timeslices(lat);
	*n = nt;
      } else {
	int t=0;
	int nn = sscanf(s+9,"%i",&t);
	if(nn && t>=0 && t<nt) {
	  subs = &qhmcqdp_get_timeslices(lat)[t];
	  *n = 1;
	}
      }
    }
    break;
  }
  return subs;
}