int get_tpr_version(const char *infile) { char buf[STRLEN]; gmx_bool bDouble; int precision,fver; t_fileio *fio; fio = open_tpx(infile,"r"); gmx_fio_checktype(fio); precision = sizeof(real); gmx_fio_do_string(fio,buf); if (strncmp(buf,"VERSION",7)) gmx_fatal(FARGS,"Can not read file %s,\n" " this file is from a Gromacs version which is older than 2.0\n" " Make a new one with grompp or use a gro or pdb file, if possible", gmx_fio_getname(fio)); gmx_fio_do_int(fio,precision); bDouble = (precision == sizeof(double)); if ((precision != sizeof(float)) && !bDouble) gmx_fatal(FARGS,"Unknown precision in file %s: real is %d bytes " "instead of %d or %d", gmx_fio_getname(fio),precision,sizeof(float),sizeof(double)); gmx_fio_setprecision(fio,bDouble); fprintf(stderr,"Reading file %s, %s (%s precision)\n", gmx_fio_getname(fio),buf,bDouble ? "double" : "single"); gmx_fio_do_int(fio,fver); close_tpx(fio); return fver; }
void write_eigenvectors(char *trnname,int natoms,real mat[], bool bReverse,int begin,int end, int WriteXref,rvec *xref,bool bDMR, rvec xav[], bool bDMA,real eigval[]) { int trnout; int ndim,i,j,d,vec; matrix zerobox; rvec *x; ndim = natoms*DIM; clear_mat(zerobox); snew(x,natoms); fprintf (stderr, "\nWriting %saverage structure & eigenvectors %d--%d to %s\n", (WriteXref==eWXR_YES) ? "reference, " : "", begin,end,trnname); trnout = open_tpx(trnname,"w"); if (WriteXref == eWXR_YES) { /* misuse lambda: 0/1 mass weighted fit no/yes */ fwrite_trn(trnout,-1,-1,bDMR ? 1.0 : 0.0,zerobox,natoms,xref,NULL,NULL); } else if (WriteXref == eWXR_NOFIT) { /* misuse lambda: -1 no fit */ fwrite_trn(trnout,-1,-1,-1.0,zerobox,natoms,x,NULL,NULL); } /* misuse lambda: 0/1 mass weighted analysis no/yes */ fwrite_trn(trnout,0,0,bDMA ? 1.0 : 0.0,zerobox,natoms,xav,NULL,NULL); for(i=0; i<=(end-begin); i++) { if (!bReverse) vec = i; else vec = ndim-i-1; for (j=0; j<natoms; j++) for(d=0; d<DIM; d++) x[j][d]=mat[vec*ndim+DIM*j+d]; /* Store the eigenvalue in the time field */ fwrite_trn(trnout,begin+i,eigval[vec],0,zerobox,natoms,x,NULL,NULL); } close_trn(trnout); sfree(x); }
static void list_trn(char *fn) { int fpread,fpwrite,nframe,indent; char buf[256]; rvec *x,*v,*f; matrix box; t_trnheader trn; bool bOK; fpread = open_trn(fn,"r"); fpwrite = open_tpx(NULL,"w"); gmx_fio_setdebug(fpwrite,TRUE); nframe = 0; while (fread_trnheader(fpread,&trn,&bOK)) { snew(x,trn.natoms); snew(v,trn.natoms); snew(f,trn.natoms); if (fread_htrn(fpread,&trn, trn.box_size ? box : NULL, trn.x_size ? x : NULL, trn.v_size ? v : NULL, trn.f_size ? f : NULL)) { sprintf(buf,"%s frame %d",fn,nframe); indent=0; indent=pr_title(stdout,indent,buf); pr_indent(stdout,indent); fprintf(stdout,"natoms=%10d step=%10d time=%12.7e lambda=%10g\n", trn.natoms,trn.step,trn.t,trn.lambda); if (trn.box_size) pr_rvecs(stdout,indent,"box",box,DIM); if (trn.x_size) pr_rvecs(stdout,indent,"x",x,trn.natoms); if (trn.v_size) pr_rvecs(stdout,indent,"v",v,trn.natoms); if (trn.f_size) pr_rvecs(stdout,indent,"f",f,trn.natoms); } else fprintf(stderr,"\nWARNING: Incomplete frame: nr %d, t=%g\n", nframe,trn.t); sfree(x); sfree(v); sfree(f); nframe++; } if (!bOK) fprintf(stderr,"\nWARNING: Incomplete frame header: nr %d, t=%g\n", nframe,trn.t); close_tpx(fpwrite); close_trn(fpread); }
static void list_trn(char *fn) { static real mass[5] = { 15.9994, 1.008, 1.008, 0.0, 0.0 }; int i,j=0,m,fpread,fpwrite,nframe; rvec *x,*v,*f,fmol[2],xcm[2],torque[j],dx; real mmm,len; matrix box; t_trnheader trn; gmx_bool bOK; printf("Going to open %s\n",fn); fpread = open_trn(fn,"r"); fpwrite = open_tpx(NULL,"w"); gmx_fio_setdebug(fpwrite,TRUE); mmm=mass[0]+2*mass[1]; for(i=0; (i<5); i++) mass[i] /= mmm; nframe = 0; while (fread_trnheader(fpread,&trn,&bOK)) { snew(x,trn.natoms); snew(v,trn.natoms); snew(f,trn.natoms); if (fread_htrn(fpread,&trn, trn.box_size ? box : NULL, trn.x_size ? x : NULL, trn.v_size ? v : NULL, trn.f_size ? f : NULL)) { if (trn.x_size && trn.f_size) { printf("There are %d atoms\n",trn.natoms); for(j=0; (j<2); j++) { clear_rvec(xcm[j]); clear_rvec(fmol[j]); clear_rvec(torque[j]); for(i=5*j; (i<5*j+5); i++) { rvec_inc(fmol[j],f[i]); for(m=0; (m<DIM); m++) xcm[j][m] += mass[i%5]*x[i][m]; } for(i=5*j; (i<5*j+5); i++) { rvec_dec(x[i],xcm[j]); cprod(x[i],f[i],dx); rvec_inc(torque[j],dx); rvec_inc(x[i],xcm[j]); } } pr_rvecs(stdout,0,"FMOL ",fmol,2); pr_rvecs(stdout,0,"TORQUE",torque,2); printf("Distance matrix Water1-Water2\n%5s",""); for(j=0; (j<5); j++) printf(" %10s",nm[j]); printf("\n"); for(j=0; (j<5); j++) { printf("%5s",nm[j]); for(i=5; (i<10); i++) { rvec_sub(x[i],x[j],dx); len = sqrt(iprod(dx,dx)); printf(" %10.7f",len); } printf("\n"); } } } sfree(x); sfree(v); sfree(f); nframe++; } if (!bOK) fprintf(stderr,"\nWARNING: Incomplete frame header: nr %d, t=%g\n", nframe,trn.t); close_tpx(fpwrite); close_trn(fpread); }