int main(int argc, char *argv[]) { t_commrec *cr; t_bin *rb; double *r; rvec *v; int k, i, ni, mi, n, m; cr = init_par(&argc, argv); n = strtol(argv[1], NULL, 10); m = strtol(argv[2], NULL, 10); fprintf(stdlog, "n=%d\n", n); rb = mk_bin(); snew(r, n); snew(v, m); for (k = 0; (k < 3); k++) { fprintf(stdlog, "\nk=%d\n", k); reset_bin(rb); for (i = 0; (i < n); i++) { r[i] = i+k; } for (i = 0; (i < m); i++) { v[i][XX] = 4*i+k; v[i][YY] = 4*i+k+1; v[i][ZZ] = 4*i+k+2; } ni = add_bind(stdlog, rb, n, r); mi = add_binr(stdlog, rb, DIM*m, v[0]); sum_bin(rb, cr); extract_bind(rb, ni, n, r); extract_binr(rb, mi, DIM*m, v[0]); for (i = 0; (i < n); i++) { fprintf(stdlog, "r[%d] = %e\n", i, r[i]); } for (i = 0; (i < m); i++) { fprintf(stdlog, "v[%d] = (%e,%e,%e)\n", i, v[i][XX], v[i][YY], v[i][ZZ]); } } fflush(stdlog); return 0; }
gmx_global_stat_t global_stat_init(t_inputrec *ir) { gmx_global_stat_t gs; snew(gs, 1); gs->rb = mk_bin(); snew(gs->itc0, ir->opts.ngtc); snew(gs->itc1, ir->opts.ngtc); return gs; }
void accumulate_u(t_commrec *cr, t_grpopts *opts, gmx_ekindata_t *ekind) { /* This routine will only be called when it's necessary */ t_bin *rb; int g; rb = mk_bin(); for (g = 0; (g < opts->ngacc); g++) { add_binr(rb, DIM, ekind->grpstat[g].u); } sum_bin(rb, cr); for (g = 0; (g < opts->ngacc); g++) { extract_binr(rb, DIM*g, DIM, ekind->grpstat[g].u); } destroy_bin(rb); }
void accumulate_u(t_commrec *cr,t_grpopts *opts,gmx_ekindata_t *ekind) { /* This routine will only be called when it's necessary */ static t_bin *rb=NULL; int g; if (rb == NULL) { rb=mk_bin(); } else reset_bin(rb); for(g=0; (g<opts->ngacc); g++) add_binr(rb,DIM,ekind->grpstat[g].u); sum_bin(rb,cr); for(g=0; (g<opts->ngacc); g++) extract_binr(rb,DIM*g,DIM,ekind->grpstat[g].u); }
void global_stat(FILE *log, t_commrec *cr,real ener[], tensor fvir,tensor svir, t_grpopts *opts,t_groups *grps, t_nrnb *mynrnb,t_nrnb nrnb[], t_vcm *vcm,real *terminate) { static t_bin *rb=NULL; static int *itc; int iterminate,imu,ie,ifv,isv,icm,imass,ica; int icj=-1,ici=-1,icx=-1; int in[MAXNODES]; int inn[egNR]; int j; if (rb==NULL) { rb=mk_bin(); snew(itc,opts->ngtc); } else reset_bin(rb); /* Reset nrnb stuff */ for(j=0; (j<cr->nnodes); j++) init_nrnb(&(nrnb[j])); cp_nrnb(&(nrnb[cr->nodeid]),mynrnb); /* This routine copies all the data to be summed to one big buffer * using the t_bin struct. */ where(); ie = add_binr(log,rb,F_NRE,ener); where(); ifv = add_binr(log,rb,DIM*DIM,fvir[0]); where(); isv = add_binr(log,rb,DIM*DIM,svir[0]); where(); for(j=0; (j<cr->nnodes); j++) in[j] = add_bind(log,rb,eNRNB,nrnb[j].n); where(); for(j=0; (j<opts->ngtc); j++) itc[j]=add_binr(log,rb,DIM*DIM,grps->tcstat[j].ekin[0]); where(); for(j=0; (j<egNR); j++) inn[j]=add_binr(log,rb,grps->estat.nn,grps->estat.ee[j]); where(); icm = add_binr(log,rb,DIM*vcm->nr,vcm->group_p[0]); where(); imass = add_binr(log,rb,vcm->nr,vcm->group_mass); where(); if (vcm->mode == ecmANGULAR) { icj = add_binr(log,rb,DIM*vcm->nr,vcm->group_j[0]); where(); icx = add_binr(log,rb,DIM*vcm->nr,vcm->group_x[0]); where(); ici = add_binr(log,rb,DIM*DIM*vcm->nr,vcm->group_i[0][0]); where(); } ica = add_binr(log,rb,1,&(grps->cosacc.mvcos)); where(); iterminate = add_binr(log,rb,1,terminate); /* Global sum it all */ sum_bin(rb,cr); where(); /* Extract all the data locally */ extract_binr(rb,ie ,F_NRE,ener); extract_binr(rb,ifv ,DIM*DIM,fvir[0]); extract_binr(rb,isv ,DIM*DIM,svir[0]); for(j=0; (j<cr->nnodes); j++) extract_bind(rb,in[j],eNRNB,nrnb[j].n); for(j=0; (j<opts->ngtc); j++) extract_binr(rb,itc[j],DIM*DIM,grps->tcstat[j].ekin[0]); for(j=0; (j<egNR); j++) extract_binr(rb,inn[j],grps->estat.nn,grps->estat.ee[j]); extract_binr(rb,icm,DIM*vcm->nr,vcm->group_p[0]); where(); extract_binr(rb,imass,vcm->nr,vcm->group_mass); where(); if (vcm->mode == ecmANGULAR) { extract_binr(rb,icj,DIM*vcm->nr,vcm->group_j[0]); where(); extract_binr(rb,icx,DIM*vcm->nr,vcm->group_x[0]); where(); extract_binr(rb,ici,DIM*DIM*vcm->nr,vcm->group_i[0][0]); where(); } extract_binr(rb,ica,1,&(grps->cosacc.mvcos)); where(); extract_binr(rb,iterminate,1,terminate); where(); /* Small hack for temp only */ ener[F_TEMP]/=cr->nnodes; }