tpr_t * guamps_init_tpr(const int natoms) { tpr_t *tpr = (tpr_t *)calloc(1, sizeof(tpr_t)); tpr->natoms = natoms; init_inputrec (&tpr->inputrec); init_state (&tpr->state, -1,-1,-1,-1); tpr->f = (rvec *)calloc(natoms, sizeof(rvec)); init_mtop (&tpr->mtop); return tpr; }
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"); } }
static void new_status(char *topfile,char *topppfile,char *confin, t_gromppopts *opts,t_inputrec *ir,bool bZero, bool bGenVel,bool bVerbose,t_state *state, gpp_atomtype_t atype,gmx_mtop_t *sys, int *nmi,t_molinfo **mi,t_params plist[], int *comb,double *reppow,real *fudgeQQ, bool bMorse, int *nerror) { t_molinfo *molinfo=NULL; int nmolblock; gmx_molblock_t *molblock,*molbs; t_atoms *confat; int mb,mbs,i,nrmols,nmismatch; char buf[STRLEN]; bool bGB=FALSE; init_mtop(sys); /* Set boolean for GB */ if(ir->implicit_solvent) bGB=TRUE; /* TOPOLOGY processing */ sys->name = do_top(bVerbose,topfile,topppfile,opts,bZero,&(sys->symtab), plist,comb,reppow,fudgeQQ, atype,&nrmols,&molinfo,ir, &nmolblock,&molblock,bGB); sys->nmolblock = 0; snew(sys->molblock,nmolblock); mbs; sys->natoms = 0; for(mb=0; mb<nmolblock; mb++) { if (sys->nmolblock > 0 && molblock[mb].type == sys->molblock[sys->nmolblock-1].type) { /* Merge consecutive blocks with the same molecule type */ sys->molblock[sys->nmolblock-1].nmol += molblock[mb].nmol; sys->natoms += molblock[mb].nmol*sys->molblock[sys->nmolblock-1].natoms_mol; } else if (molblock[mb].nmol > 0) { /* Add a new molblock to the topology */ molbs = &sys->molblock[sys->nmolblock]; *molbs = molblock[mb]; molbs->natoms_mol = molinfo[molbs->type].atoms.nr; molbs->nposres_xA = 0; molbs->nposres_xB = 0; sys->natoms += molbs->nmol*molbs->natoms_mol; sys->nmolblock++; } } if (sys->nmolblock == 0) { gmx_fatal(FARGS,"No molecules were defined in the system"); } renumber_moltypes(sys,&nrmols,&molinfo); if (bMorse) convert_harmonics(nrmols,molinfo,atype); if (ir->eDisre == edrNone) { i = rm_interactions(F_DISRES,nrmols,molinfo); if (i > 0) { set_warning_line("unknown",-1); sprintf(warn_buf,"disre = no, removed %d distance restraints",i); warning_note(NULL); } } if (opts->bOrire == FALSE) { i = rm_interactions(F_ORIRES,nrmols,molinfo); if (i > 0) { set_warning_line("unknown",-1); sprintf(warn_buf,"orire = no, removed %d orientation restraints",i); warning_note(NULL); } } if (opts->bDihre == FALSE) { i = rm_interactions(F_DIHRES,nrmols,molinfo); if (i > 0) { set_warning_line("unknown",-1); sprintf(warn_buf,"dihre = no, removed %d dihedral restraints",i); warning_note(NULL); } } /* Copy structures from msys to sys */ molinfo2mtop(nrmols,molinfo,sys); /* COORDINATE file processing */ if (bVerbose) fprintf(stderr,"processing coordinates...\n"); get_stx_coordnum(confin,&state->natoms); if (state->natoms != sys->natoms) gmx_fatal(FARGS,"number of coordinates in coordinate file (%s, %d)\n" " does not match topology (%s, %d)", confin,state->natoms,topfile,sys->natoms); else { /* make space for coordinates and velocities */ char title[STRLEN]; snew(confat,1); init_t_atoms(confat,state->natoms,FALSE); init_state(state,state->natoms,0); read_stx_conf(confin,title,confat,state->x,state->v,NULL,state->box); /* This call fixes the box shape for runs with pressure scaling */ set_box_rel(ir,state); nmismatch = check_atom_names(topfile, confin, sys, confat); free_t_atoms(confat,TRUE); sfree(confat); if (nmismatch) { sprintf(buf,"%d non-matching atom name%s\n" "atom names from %s will be used\n" "atom names from %s will be ignored\n", nmismatch,(nmismatch == 1) ? "" : "s",topfile,confin); warning(buf); } if (bVerbose) fprintf(stderr,"double-checking input for internal consistency...\n"); double_check(ir,state->box,nint_ftype(sys,molinfo,F_CONSTR),nerror); } if (bGenVel) { real *mass; gmx_mtop_atomloop_all_t aloop; t_atom *atom; snew(mass,state->natoms); aloop = gmx_mtop_atomloop_all_init(sys); while (gmx_mtop_atomloop_all_next(aloop,&i,&atom)) { mass[i] = atom->m; } if (opts->seed == -1) { opts->seed = make_seed(); fprintf(stderr,"Setting gen_seed to %d\n",opts->seed); } maxwell_speed(opts->tempi,opts->seed,sys,state->v); stop_cm(stdout,state->natoms,mass,state->x,state->v); sfree(mass); } *nmi = nrmols; *mi = molinfo; }
// works void test1() { const char *intopol = "../topol.tpr", *incpt = "../state0.cpt", *outtopol = "../new.tpr"; const unsigned int seed = 42; // read the header t_tpxheader header; int version, generation; read_tpxheader(intopol, &header, FALSE, &version, &generation); // decide if forces can be read from tpr rvec *forces; if (header.bF) { snew(forces, 1); } else { forces = NULL; } // read the topology file t_inputrec ir; t_state topol_state; gmx_mtop_t mtop; init_inputrec(&ir); init_state(&topol_state, -1, -1, -1, -1); init_mtop(&mtop); read_tpx_state(intopol, &ir, &topol_state, forces, &mtop); // read the checkpoint int sim_part; gmx_large_int_t step; double time; t_state cpt_state; t_commrec comm; init_state(&cpt_state, -1, -1, -1, -1); printf("Opening %s for reading\n", incpt); read_checkpoint_state(incpt, &sim_part, &step, &time, &cpt_state); printf("ld_rng = %d\n", (int) cpt_state.ld_rng); printf("ld_rngi = %d\n" , (int) cpt_state.ld_rngi); // update the state to be written /* gmx_rng_t rng = gmx_rng_init(seed); */ /* unsigned int rng_state, rng_index; */ /* gmx_rng_get_state(rng, &rng_state, &rng_index); */ ir.ld_seed = 42; ir.init_t = time; ir.init_step = step; ir.init_lambda = cpt_state.lambda; /* // write the new tpr */ /* write_tpx_state(outtopol, */ /* &ir, &cpt_state, &mtop); */ }