void init_md(FILE *fplog, t_commrec *cr,t_inputrec *ir,real *t,real *t0, real *lambda,real *lam0, t_nrnb *nrnb,gmx_mtop_t *mtop, gmx_stochd_t *sd, int nfile,t_filenm fnm[], int *fp_trn,int *fp_xtc,int *fp_ene,char **fn_cpt, FILE **fp_dgdl,FILE **fp_field, t_mdebin **mdebin, tensor force_vir,tensor shake_vir,rvec mu_tot, bool *bNEMD,bool *bSimAnn,t_vcm **vcm, unsigned long Flags) { int i,j,n; real tmpt,mod; char filemode[2]; sprintf(filemode, (Flags & MD_APPENDFILES) ? "a" : "w"); /* Initial values */ *t = *t0 = ir->init_t; if (ir->efep != efepNO) { *lam0 = ir->init_lambda; *lambda = *lam0 + ir->init_step*ir->delta_lambda; } else { *lambda = *lam0 = 0.0; } *bSimAnn=FALSE; for(i=0;i<ir->opts.ngtc;i++) { /* set bSimAnn if any group is being annealed */ if(ir->opts.annealing[i]!=eannNO) *bSimAnn = TRUE; } if (*bSimAnn) { update_annealing_target_temp(&(ir->opts),ir->init_t); } *bNEMD = (ir->opts.ngacc > 1) || (norm(ir->opts.acc[0]) > 0); if (sd && (ir->eI == eiBD || EI_SD(ir->eI) || ir->etc == etcVRESCALE)) { *sd = init_stochd(fplog,ir); } if (vcm) { *vcm = init_vcm(fplog,&mtop->groups,ir); } if (EI_DYNAMICS(ir->eI) && !(Flags & MD_APPENDFILES)) { if (ir->etc == etcBERENDSEN) { please_cite(fplog,"Berendsen84a"); } if (ir->etc == etcVRESCALE) { please_cite(fplog,"Bussi2007a"); } } init_nrnb(nrnb); if (nfile != -1) { *fp_trn = -1; *fp_ene = -1; *fp_xtc = -1; if (MASTER(cr)) { *fp_trn = open_trn(ftp2fn(efTRN,nfile,fnm), filemode); if (ir->nstxtcout > 0) { *fp_xtc = open_xtc(ftp2fn(efXTC,nfile,fnm), filemode); } *fp_ene = open_enx(ftp2fn(efENX,nfile,fnm), filemode); *fn_cpt = opt2fn("-cpo",nfile,fnm); if ((fp_dgdl != NULL) && ir->efep!=efepNO) { if(Flags & MD_APPENDFILES) { *fp_dgdl= gmx_fio_fopen(opt2fn("-dgdl",nfile,fnm),filemode); } else { *fp_dgdl = xvgropen(opt2fn("-dgdl",nfile,fnm), "dG/d\\8l\\4","Time (ps)", "dG/d\\8l\\4 (kJ mol\\S-1\\N [\\8l\\4]\\S-1\\N)"); } } if ((fp_field != NULL) && (ir->ex[XX].n || ir->ex[YY].n ||ir->ex[ZZ].n)) { if(Flags & MD_APPENDFILES) { *fp_field = gmx_fio_fopen(opt2fn("-field",nfile,fnm),filemode); } else { *fp_field = xvgropen(opt2fn("-field",nfile,fnm), "Applied electric field","Time (ps)", "E (V/nm)"); } } } *mdebin = init_mdebin( (Flags & MD_APPENDFILES) ? -1 : *fp_ene,mtop,ir); } /* Initiate variables */ clear_mat(force_vir); clear_mat(shake_vir); clear_rvec(mu_tot); debug_gmx(); }
void init_md(t_commrec *cr,t_inputrec *ir,tensor box,real *t,real *t0, real *lambda,real *lam0,real *SAfactor, t_nrnb *mynrnb,bool *bTYZ,t_topology *top, int nfile,t_filenm fnm[],char **traj, char **xtc_traj,int *fp_ene, FILE **fp_dgdl,t_mdebin **mdebin,t_groups *grps, tensor force_vir,tensor pme_vir, tensor shake_vir,t_mdatoms *mdatoms,rvec mu_tot, bool *bNEMD,t_vcm **vcm,t_nsborder *nsb) { bool bBHAM,b14,bLR,bLJLR; int i; /* Initial values */ *t = *t0 = ir->init_t; if (ir->efep != efepNO) { *lambda = *lam0 = ir->init_lambda; } else { *lambda = *lam0 = 0.0; } if (ir->bSimAnn) { *SAfactor = 1.0 - *t0/ir->zero_temp_time; if (*SAfactor < 0) *SAfactor = 0; } else *SAfactor = 1.0; init_nrnb(mynrnb); /* Check Environment variables & other booleans */ #ifdef SPEC_CPU *bTYZ = FALSE; #else *bTYZ=getenv("TYZ") != NULL; #endif set_pot_bools(ir,top,&bLR,&bLJLR,&bBHAM,&b14); if (nfile != -1) { /* Filenames */ *traj = ftp2fn(efTRN,nfile,fnm); *xtc_traj = ftp2fn(efXTC,nfile,fnm); #ifndef SPEC_CPU if (MASTER(cr)) { *fp_ene = open_enx(ftp2fn(efENX,nfile,fnm),"w"); if ((fp_dgdl != NULL) && ir->efep!=efepNO) *fp_dgdl = xvgropen(opt2fn("-dgdl",nfile,fnm), "dG/d\\8l\\4","Time (ps)", "dG/d\\8l\\4 (kJ mol\\S-1\\N nm\\S-2\\N \\8l\\4\\S-1\\N)"); } else #endif *fp_ene = -1; *mdebin = init_mdebin(*fp_ene,grps,&(top->atoms),&(top->idef), bLR,bLJLR,bBHAM,b14,ir->efep!=efepNO,ir->epc, ir->eDispCorr,(TRICLINIC(ir->compress) || TRICLINIC(box)), (ir->etc==etcNOSEHOOVER),cr); } /* Initiate variables */ clear_mat(force_vir); clear_mat(pme_vir); clear_mat(shake_vir); clear_rvec(mu_tot); /* Set initial values for invmass etc. */ init_mdatoms(mdatoms,*lambda,TRUE); *vcm = init_vcm(stdlog,top,cr,mdatoms,START(nsb),HOMENR(nsb),ir->nstcomm); debug_gmx(); *bNEMD = (ir->opts.ngacc > 1) || (norm(ir->opts.acc[0]) > 0); if (ir->eI == eiSD) init_sd_consts(ir->opts.ngtc,ir->opts.tau_t,ir->delta_t); }