void ns(FILE *fp, t_forcerec *fr, matrix box, gmx_groups_t *groups, gmx_localtop_t *top, t_mdatoms *md, t_commrec *cr, t_nrnb *nrnb, gmx_bool bFillGrid) { int nsearch; if (!fr->ns->nblist_initialized) { init_neighbor_list(fp, fr, md->homenr); } nsearch = search_neighbours(fp, fr, box, top, groups, cr, nrnb, md, bFillGrid); if (debug) { fprintf(debug, "nsearch = %d\n", nsearch); } /* Check whether we have to do dynamic load balancing */ /*if ((nsb->nstDlb > 0) && (mod(step,nsb->nstDlb) == 0)) count_nb(cr,nsb,&(top->blocks[ebCGS]),nns,fr->nlr, &(top->idef),opts->ngener); */ if (fr->ns->dump_nl > 0) { dump_nblist(fp, cr, fr, fr->ns->dump_nl); } }
void ns(FILE *fp, t_forcerec *fr, rvec x[], matrix box, gmx_groups_t *groups, t_grpopts *opts, gmx_localtop_t *top, t_mdatoms *md, t_commrec *cr, t_nrnb *nrnb, real *lambda, real *dvdlambda, gmx_grppairener_t *grppener, gmx_bool bFillGrid, gmx_bool bDoLongRangeNS) { char *ptr; int nsearch; GMX_MPE_LOG(ev_ns_start); if (!fr->ns.nblist_initialized) { init_neighbor_list(fp, fr, md->homenr); } if (fr->bTwinRange) { fr->nlr = 0; } nsearch = search_neighbours(fp, fr, x, box, top, groups, cr, nrnb, md, lambda, dvdlambda, grppener, bFillGrid, bDoLongRangeNS, TRUE); if (debug) { fprintf(debug, "nsearch = %d\n", nsearch); } /* Check whether we have to do dynamic load balancing */ /*if ((nsb->nstDlb > 0) && (mod(step,nsb->nstDlb) == 0)) count_nb(cr,nsb,&(top->blocks[ebCGS]),nns,fr->nlr, &(top->idef),opts->ngener); */ if (fr->ns.dump_nl > 0) { dump_nblist(fp, cr, fr, fr->ns.dump_nl); } GMX_MPE_LOG(ev_ns_finish); }
void do_nsgrid(FILE *fp, gmx_bool bVerbose, matrix box, rvec x[], t_atoms *atoms, real rlong, const output_env_t oenv) { gmx_mtop_t *mtop; gmx_localtop_t *top; t_mdatoms *md; t_block *cgs; t_inputrec *ir; t_nrnb nrnb; t_commrec *cr; int *cg_index; gmx_moltype_t *molt; gmx_ffparams_t *ffp; ivec *nFreeze; int i, m, natoms; rvec box_size; real *lambda, *dvdl; natoms = atoms->nr; /* Charge group index */ snew(cg_index, natoms); for (i = 0; (i < natoms); i++) { cg_index[i] = i; } /* Topology needs charge groups and exclusions */ snew(mtop, 1); init_mtop(mtop); mtop->natoms = natoms; /* Make one moltype that contains the whol system */ mtop->nmoltype = 1; snew(mtop->moltype, mtop->nmoltype); molt = &mtop->moltype[0]; molt->name = mtop->name; molt->atoms = *atoms; stupid_fill_block(&molt->cgs, mtop->natoms, FALSE); stupid_fill_blocka(&molt->excls, natoms); /* Make one molblock for the whole system */ mtop->nmolblock = 1; snew(mtop->molblock, mtop->nmolblock); mtop->molblock[0].type = 0; mtop->molblock[0].nmol = 1; mtop->molblock[0].natoms_mol = natoms; /* Initialize a single energy group */ mtop->groups.grps[egcENER].nr = 1; mtop->groups.ngrpnr[egcENER] = 0; mtop->groups.grpnr[egcENER] = NULL; ffp = &mtop->ffparams; ffp->ntypes = 1; ffp->atnr = 1; ffp->reppow = 12; snew(ffp->functype, 1); snew(ffp->iparams, 1); ffp->iparams[0].lj.c6 = 1; ffp->iparams[0].lj.c12 = 1; /* inputrec structure */ snew(ir, 1); ir->coulombtype = eelCUT; ir->vdwtype = evdwCUT; ir->ndelta = 2; ir->ns_type = ensGRID; snew(ir->opts.egp_flags, 1); top = gmx_mtop_generate_local_top(mtop, ir); /* Some nasty shortcuts */ cgs = &(top->cgs); /* mdatoms structure */ snew(nFreeze, 2); snew(md, 1); md = init_mdatoms(fp, mtop, FALSE); atoms2md(mtop, ir, 0, NULL, 0, mtop->natoms, md); sfree(nFreeze); /* forcerec structure */ if (fr == NULL) { fr = mk_forcerec(); } snew(cr, 1); cr->nnodes = 1; /* cr->nthreads = 1; */ /* ir->rlist = ir->rcoulomb = ir->rvdw = rlong; printf("Neighborsearching with a cut-off of %g\n",rlong); init_forcerec(stdout,fr,ir,top,cr,md,box,FALSE,NULL,NULL,NULL,TRUE);*/ fr->cg0 = 0; fr->hcg = top->cgs.nr; fr->nWatMol = 0; /* Prepare for neighboursearching */ init_nrnb(&nrnb); /* Init things dependent on parameters */ ir->rlistlong = ir->rlist = ir->rcoulomb = ir->rvdw = rlong; /* create free energy data to avoid NULLs */ snew(ir->fepvals, 1); printf("Neighborsearching with a cut-off of %g\n", rlong); init_forcerec(stdout, oenv, fr, NULL, ir, mtop, cr, box, FALSE, NULL, NULL, NULL, NULL, NULL, TRUE, -1); if (debug) { pr_forcerec(debug, fr, cr); } /* Calculate new stuff dependent on coords and box */ for (m = 0; (m < DIM); m++) { box_size[m] = box[m][m]; } calc_shifts(box, fr->shift_vec); put_charge_groups_in_box(fp, 0, cgs->nr, fr->ePBC, box, cgs, x, fr->cg_cm); /* Do the actual neighboursearching */ snew(lambda, efptNR); snew(dvdl, efptNR); init_neighbor_list(fp, fr, md->homenr); search_neighbours(fp, fr, x, box, top, &mtop->groups, cr, &nrnb, md, lambda, dvdl, NULL, TRUE, FALSE, FALSE); if (debug) { dump_nblist(debug, cr, fr, 0); } if (bVerbose) { fprintf(stderr, "Successfully made neighbourlist\n"); } }
void ns(FILE *fp, t_forcerec *fr, rvec x[], rvec f[], matrix box, t_groups *grps, t_grpopts *opts, t_topology *top, t_mdatoms *md, t_commrec *cr, t_nrnb *nrnb, t_nsborder *nsb, int step, real lambda, real *dvdlambda) { static bool bFirst=TRUE; static int nDNL; char *ptr; int nsearch; if (bFirst) { #ifdef SPEC_CPU ptr = NULL; #else ptr=getenv("DUMPNL"); #endif if (ptr) { nDNL=atoi(ptr); fprintf(fp,"nDNL = %d\n",nDNL); } else nDNL=0; /* Allocate memory for the neighbor lists */ init_neighbor_list(fp,fr,HOMENR(nsb)); bFirst=FALSE; } if (fr->bTwinRange) fr->nlr=0; /* Whether or not we do dynamic load balancing, * workload contains the proper numbers of charge groups * to be searched. */ if (cr->nodeid == 0) fr->cg0=0; else fr->cg0=nsb->workload[cr->nodeid-1]; fr->hcg=nsb->workload[cr->nodeid]; nsearch = search_neighbours(fp,fr,x,box,top,grps,cr,nsb,nrnb,md, lambda,dvdlambda); if (debug) fprintf(debug,"nsearch = %d\n",nsearch); /* Check whether we have to do dynamic load balancing */ /*if ((nsb->nstDlb > 0) && (mod(step,nsb->nstDlb) == 0)) count_nb(cr,nsb,&(top->blocks[ebCGS]),nns,fr->nlr, &(top->idef),opts->ngener); */ if (nDNL > 0) dump_nblist(fp,fr,nDNL); }