void qopWilsonDslashSetup(Layout *l) { int nd = l->nDim; int *ls = l->physGeom; //printf("%i nd: %i\t", myrank, nd); //for(int i=0; i<nd; i++) printf(" %i", ls[i]); //printf("\n"); //QDP_finalize(); //exit(1); QDP_set_latsize(nd, ls); //QMP_barrier(); //TRACE_ALL; QDP_create_layout(); //TRACE_ALL; //QMP_barrier(); QOP_layout_t qoplayout = QOP_LAYOUT_ZERO; qoplayout.latdim = nd; qoplayout.latsize = (int *) malloc(nd*sizeof(int)); for(int i=0; i<nd; i++) { qoplayout.latsize[i] = ls[i]; } qoplayout.machdim = -1; QOP_init(&qoplayout); }
void setup_layout(void) { int c[4]; int i,n_mach; int d[4]; #ifdef FIX_NODE_GEOM int *geom = node_geometry; #else int *geom = NULL; #endif if(mynode()==0){ printf("LAYOUT = Hypercubes, options = "); printf("QDP"); printf("\n"); } /* Is there already a grid? This could be a grid architecture with a preset dimension, or a geometry could have been set by the -qmp-geom command line arg. In either case we have a nonzero allocated number of dimensions. */ if(QMP_get_allocated_number_of_dimensions() == 0) /* Set the geometry if requested */ set_qmp_layout_grid(geom, 4); c[0] = nx; c[1] = ny; c[2] = nz; c[3] = nt; QDP_set_latsize(4, c); QDP_create_layout(); sites_on_node = QDP_sites_on_node; even_sites_on_node = QDP_subset_len(QDP_even); odd_sites_on_node = QDP_subset_len(QDP_odd); n_mach = QMP_get_logical_number_of_dimensions(); dim_mach = QMP_get_logical_dimensions(); /* Initialize I/O node function */ #ifdef FIX_IONODE_GEOM init_io_node(); #endif /* Report sublattice dimensions */ for(i = 0; i < 4; i++){ /* Any extra machine dimensions are assumed to be 1 */ if(i < n_mach)d[i] = c[i]/dim_mach[i]; else d[i] = c[i]; } if( mynode()==0) printf("ON EACH NODE %d x %d x %d x %d\n",d[0],d[1],d[2],d[3]); #if 0 mpi_whoami(); /* Debug */ #endif }
int main(int argc, char *argv[]) { int i, j; QDP_initialize(&argc, &argv); QDP_profcontrol(0); seed = time(NULL); j = 0; for(i=1; i<argc; i++) { switch(argv[i][0]) { case 'c' : cgtype=atoi(&argv[i][1]); break; case 'k' : kappa=atof(&argv[i][1]); break; case 'n' : nit=atoi(&argv[i][1]); break; case 's' : seed=atoi(&argv[i][1]); break; case 'S' : style=atoi(&argv[i][1]); break; case 'x' : j=i; while((i+1<argc)&&(isdigit(argv[i+1][0]))) ++i; break; default : usage(argv[0]); } } lattice_size = (int *) malloc(ndim*sizeof(int)); if(j==0) { for(i=0; i<ndim; ++i) lattice_size[i] = 8; } else { if(!isdigit(argv[j][1])) usage(argv[0]); lattice_size[0] = atoi(&argv[j][1]); for(i=1; i<ndim; ++i) { if((++j<argc)&&(isdigit(argv[j][0]))) { lattice_size[i] = atoi(&argv[j][0]); } else { lattice_size[i] = lattice_size[i-1]; } } } if(QDP_this_node==0) { printf("size = %i", lattice_size[0]); for(i=1; i<ndim; i++) { printf(" %i", lattice_size[i]); } printf("\n"); printf("kappa = %g\n", kappa); printf("seed = %i\n", seed); } QDP_set_latsize(ndim, lattice_size); QDP_create_layout(); rs = QDP_create_S(); seed_rand(rs, seed); start(); QDP_finalize(); return 0; }
int main(int argc, char *argv[]) { int status = 1; int mu; const char *g_name; QDP_ColorMatrix *U[NDIM]; QLA_Real plaq; /* start QDP */ QDP_initialize(&argc, &argv); if (argc != 1 + NDIM + 1) { printf0("ERROR: usage: %s Lx ... gauge-file\n", argv[0]); goto end; } for (mu = 0; mu < NDIM; mu++) lattice[mu] = atoi(argv[1 + mu]); g_name = argv[1 + NDIM]; /* set lattice size and create layout */ QDP_set_latsize(NDIM, lattice); QDP_create_layout(); /* allocate the gauge field */ create_Mvector(U, NELEMS(U)); /* read gauge field */ if (read_gauge(U, g_name) != 0) { printf0("ERROR: read_gauge(%s)\n", g_name); goto end; } /* Compute plaquette */ plaq = plaquette(U); /* delete the gauge field */ destroy_Mvector(U, NELEMS(U)); /* Display the value */ printf0("plaquette{%s} = %g\n", argv[1], plaq / (QDP_volume() * QDP_Nc * NDIM * (NDIM - 1) / 2 )); status = 0; end: /* shutdown QDP */ QDP_finalize(); return status; }
int main(int argc, char *argv[]) { int fpos[NDIM]; int c, d, ri; int gamma; int status = 1; int mu; QDP_DiracFermion *f; QDP_DiracFermion *g; /* start QDP */ QDP_initialize(&argc, &argv); if (argc != 1 + 2 * NDIM + 4) { printf0("ERROR: usage: %s Lx ... x ... c d r/i gamma\n", argv[0]); goto end; } for (mu = 0; mu < NDIM; mu++) lattice[mu] = atoi(argv[1 + mu]); for (mu = 0; mu < NDIM; mu++) fpos[mu] = atoi(argv[1 + NDIM + mu]); c = atoi(argv[1 + 2 * NDIM]); d = atoi(argv[1 + 2 * NDIM + 1]); ri = atoi(argv[1 + 2 * NDIM + 2]); gamma = atoi(argv[1 + 2 * NDIM + 3]); /* set lattice size and create layout */ QDP_set_latsize(NDIM, lattice); QDP_create_layout(); f = QDP_create_D(); g = QDP_create_D(); point_fermion(f, fpos, c, d, ri); dump_fermion("check-gamma-f", f); QDP_D_eq_gamma_times_D(g, f, gamma, QDP_all); dump_fermion("check-gamma-g", g); QDP_destroy_D(g); QDP_destroy_D(f); status = 0; end: /* shutdown QDP */ QDP_finalize(); return status; }
void setup_layout(void) { int c[4]; int i,n_mach; int d[4]; if(mynode()==0){ printf("LAYOUT = Hypercubes, options = "); printf("QDP"); printf("\n"); } c[0] = nx; c[1] = ny; c[2] = nz; c[3] = nt; QDP_set_latsize(4, c); QDP_create_layout(); sites_on_node = QDP_sites_on_node; even_sites_on_node = QDP_subset_len(QDP_even); odd_sites_on_node = QDP_subset_len(QDP_odd); n_mach = QMP_get_logical_number_of_dimensions(); dim_mach = QMP_get_logical_dimensions(); #ifdef FIX_IONODE_GEOM /* Initialize I/O node function */ init_io_node(); #endif /* Report sublattice dimensions */ for(i = 0; i < 4; i++){ /* Any extra machine dimensions are assumed to be 1 */ if(i < n_mach)d[i] = c[i]/dim_mach[i]; else d[i] = c[i]; } if( mynode()==0) printf("ON EACH NODE %d x %d x %d x %d\n",d[0],d[1],d[2],d[3]); }
int main(int argc, char *argv[]) { const char *msg; int status = 1; int mu, i; struct QOP_CLOVER_State *clover_state; QDP_Int *I_seed; int i_seed; QDP_RandomState *state; QLA_Real plaq; QLA_Real n[NELEMS(F)]; struct QOP_CLOVER_Gauge *c_g; struct QOP_CLOVER_Fermion *c_f[NELEMS(F)]; double kappa; double c_sw; double in_eps; int in_iter; int log_flag; double out_eps; int out_iter; int cg_status; double run_time; long long flops, sent, received; /* start QDP */ QDP_initialize(&argc, &argv); if (argc != 1 + NDIM + 6) { printf0("ERROR: usage: %s Lx ... seed kappa c_sw iter eps log?\n", argv[0]); goto end; } for (mu = 0; mu < NDIM; mu++) { lattice[mu] = atoi(argv[1 + mu]); } i_seed = atoi(argv[1 + NDIM]); kappa = atof(argv[2 + NDIM]); c_sw = atof(argv[3 + NDIM]); in_iter = atoi(argv[4 + NDIM]); in_eps = atof(argv[5 + NDIM]); log_flag = atoi(argv[6 + NDIM]) == 0? 0: QOP_CLOVER_LOG_EVERYTHING; /* set lattice size and create layout */ QDP_set_latsize(NDIM, lattice); QDP_create_layout(); primary = QMP_is_primary_node(); self = QMP_get_node_number(); get_vector(network, 1, QMP_get_logical_number_of_dimensions(), QMP_get_logical_dimensions()); get_vector(node, 0, QMP_get_logical_number_of_dimensions(), QMP_get_logical_coordinates()); printf0("network: "); for (i = 0; i < NDIM; i++) printf0(" %d", network[i]); printf0("\n"); printf0("node: "); for (i = 0; i < NDIM; i++) printf0(" %d", node[i]); printf0("\n"); printf0("kappa: %20.15f\n", kappa); printf0("c_sw: %20.15f\n", c_sw); printf0("in_iter: %d\n", in_iter); printf0("in_eps: %15.2e\n", in_eps); /* allocate the gauge field */ create_Mvector(U, NELEMS(U)); create_Mvector(C, NELEMS(C)); create_Dvector(F, NELEMS(F)); I_seed = QDP_create_I(); QDP_I_eq_funci(I_seed, icoord, QDP_all); state = QDP_create_S(); QDP_S_eq_seed_i_I(state, i_seed, I_seed, QDP_all); for (mu = 0; mu < NELEMS(U); mu++) { QDP_M_eq_gaussian_S(U[mu], state, QDP_all); } for (i = 0; i < NELEMS(F); i++) { QDP_D_eq_gaussian_S(F[i], state, QDP_all); } /* build the clovers */ clover(C, U); /* initialize CLOVER */ if (QOP_CLOVER_init(&clover_state, lattice, network, node, primary, sublattice, NULL)) { printf0("CLOVER_init() failed\n"); goto end; } if (QOP_CLOVER_import_fermion(&c_f[0], clover_state, f_reader, F[0])) { printf0("CLOVER_import_fermion(0) failed\n"); goto end; } if (QOP_CLOVER_allocate_fermion(&c_f[1], clover_state)) { printf0("CLOVER_allocate_fermion(1) failed\n"); goto end; } if (QOP_CLOVER_allocate_fermion(&c_f[2], clover_state)) { printf0("CLOVER_allocate_fermion(2) failed\n"); goto end; } if (QOP_CLOVER_allocate_fermion(&c_f[3], clover_state)) { printf0("CLOVER_allocate_fermion(3) failed\n"); goto end; } if (QOP_CLOVER_import_gauge(&c_g, clover_state, kappa, c_sw, u_reader, c_reader, NULL)) { printf("CLOVER_import_gauge() failed\n"); goto end; } QOP_CLOVER_D_operator(c_f[2], c_g, c_f[0]); cg_status = QOP_CLOVER_D_CG(c_f[3], &out_iter, &out_eps, c_f[2], c_g, c_f[2], in_iter, in_eps, log_flag); msg = QOP_CLOVER_error(clover_state); QOP_CLOVER_performance(&run_time, &flops, &sent, &received, clover_state); QOP_CLOVER_export_fermion(f_writer, F[3], c_f[3]); printf0("CG status: %d\n", cg_status); printf0("CG error message: %s\n", msg? msg: "<NONE>"); printf0("CG iter: %d\n", out_iter); printf0("CG eps: %20.10e\n", out_eps); printf0("CG performance: runtime %e sec\n", run_time); printf0("CG performance: flops %.3e MFlop/s (%lld)\n", flops * 1e-6 / run_time, flops); printf0("CG performance: snd %.3e MB/s (%lld)\n", sent * 1e-6 / run_time, sent); printf0("CG performance: rcv %.3e MB (%lld)/s\n", received * 1e-6 / run_time, received); /* free CLOVER */ QOP_CLOVER_free_gauge(&c_g); for (i = 0; i < NELEMS(c_f); i++) QOP_CLOVER_free_fermion(&c_f[i]); QOP_CLOVER_fini(&clover_state); /* Compute plaquette */ plaq = plaquette(U); /* field norms */ for (i = 0; i < NELEMS(F); i++) QDP_r_eq_norm2_D(&n[i], F[i], QDP_all); /* Display the values */ printf0("plaquette = %g\n", plaq / (QDP_volume() * QDP_Nc * NDIM * (NDIM - 1) / 2 )); for (i = 0; i < NELEMS(F); i++) printf0(" |f|^2 [%d] = %20.10e\n", i, (double)(n[i])); /* Compute and display <f[1] f[0]> */ show_dot("1|orig", F[1], F[0]); /* Compute and display <f[1] f[3]> */ show_dot("1|solv", F[1], F[3]); QDP_destroy_S(state); QDP_destroy_I(I_seed); destroy_Mvector(U, NELEMS(U)); destroy_Mvector(C, NELEMS(C)); destroy_Dvector(F, NELEMS(F)); status = 0; end: /* shutdown QDP */ printf0("end\n"); QDP_finalize(); return status; }
int main(int argc, char *argv[]) { int status = 1; int mu, i; struct QOP_CLOVER_State *clover_state; QDP_Int *I_seed; int i_seed; QDP_RandomState *state; QLA_Real plaq; QLA_Real n[NELEMS(F)]; struct QOP_CLOVER_Gauge *c_g; struct QOP_CLOVER_Fermion *c_f[NELEMS(F)]; double kappa; double c_sw; /* start QDP */ QDP_initialize(&argc, &argv); if (argc != 1 + NDIM + 3) { printf0("ERROR: usage: %s Lx ... seed kappa c_sw\n", argv[0]); goto end; } for (mu = 0; mu < NDIM; mu++) { lattice[mu] = atoi(argv[1 + mu]); } i_seed = atoi(argv[1 + NDIM]); kappa = atof(argv[2 + NDIM]); c_sw = atof(argv[3 + NDIM]); /* set lattice size and create layout */ QDP_set_latsize(NDIM, lattice); QDP_create_layout(); primary = QMP_is_primary_node(); self = QMP_get_node_number(); get_vector(network, 1, QMP_get_logical_number_of_dimensions(), QMP_get_logical_dimensions()); get_vector(node, 0, QMP_get_logical_number_of_dimensions(), QMP_get_logical_coordinates()); printf0("network: "); for (i = 0; i < NDIM; i++) printf0(" %d", network[i]); printf0("\n"); printf0("node: "); for (i = 0; i < NDIM; i++) printf0(" %d", node[i]); printf0("\n"); printf0("kappa: %20.15f\n", kappa); printf0("c_sw: %20.15f\n", c_sw); /* allocate the gauge field */ create_Mvector(U, NELEMS(U)); create_Mvector(C, NELEMS(C)); create_Dvector(F, NELEMS(F)); I_seed = QDP_create_I(); QDP_I_eq_funci(I_seed, icoord, QDP_all); state = QDP_create_S(); QDP_S_eq_seed_i_I(state, i_seed, I_seed, QDP_all); for (mu = 0; mu < NELEMS(U); mu++) { QDP_M_eq_gaussian_S(U[mu], state, QDP_all); } for (i = 0; i < NELEMS(F); i++) { QDP_D_eq_gaussian_S(F[i], state, QDP_all); } /* build the clovers */ clover(C, U); /* initialize CLOVER */ if (QOP_CLOVER_init(&clover_state, lattice, network, node, primary, sublattice, NULL)) { printf0("CLOVER_init() failed\n"); goto end; } if (QOP_CLOVER_import_fermion(&c_f[0], clover_state, f_reader, F[0])) { printf0("CLOVER_import_fermion(0) failed\n"); goto end; } if (QOP_CLOVER_import_fermion(&c_f[1], clover_state, f_reader, F[1])) { printf0("CLOVER_import_fermion(1) failed\n"); goto end; } if (QOP_CLOVER_allocate_fermion(&c_f[2], clover_state)) { printf0("CLOVER_allocate_fermion(2) failed\n"); goto end; } if (QOP_CLOVER_allocate_fermion(&c_f[3], clover_state)) { printf0("CLOVER_allocate_fermion(3) failed\n"); goto end; } if (QOP_CLOVER_import_gauge(&c_g, clover_state, kappa, c_sw, u_reader, c_reader, NULL)) { printf("CLOVER_import_gauge() failed\n"); goto end; } QOP_CLOVER_D_operator(c_f[2], c_g, c_f[0]); QOP_CLOVER_export_fermion(f_writer, F[2], c_f[2]); QOP_CLOVER_D_operator_conjugated(c_f[3], c_g, c_f[1]); QOP_CLOVER_export_fermion(f_writer, F[3], c_f[3]); /* free CLOVER */ QOP_CLOVER_free_gauge(&c_g); for (i = 0; i < NELEMS(c_f); i++) QOP_CLOVER_free_fermion(&c_f[i]); QOP_CLOVER_fini(&clover_state); /* Compute plaquette */ plaq = plaquette(U); /* field norms */ for (i = 0; i < NELEMS(F); i++) QDP_r_eq_norm2_D(&n[i], F[i], QDP_all); /* Display the values */ printf0("plaquette = %g\n", plaq / (QDP_volume() * QDP_Nc * NDIM * (NDIM - 1) / 2 )); for (i = 0; i < NELEMS(F); i++) printf0(" |f|^2 [%d] = %20.10e\n", i, (double)(n[i])); /* Compute and display <f[1] f[2]> */ show_dot("1|D0", F[1], F[2]); /* Compute and display <f[3] f[0]> */ show_dot("X1|0", F[3], F[0]); QDP_destroy_S(state); QDP_destroy_I(I_seed); destroy_Mvector(U, NELEMS(U)); destroy_Mvector(C, NELEMS(C)); destroy_Dvector(F, NELEMS(F)); status = 0; end: /* shutdown QDP */ printf0("end\n"); QDP_finalize(); return status; }