[gmx-developers] reading velocity in gmx_msd.c
Mark Abraham
mark.abraham at anu.edu.au
Sat May 22 02:30:45 CEST 2010
Did you use a debugger to find out why your segfault is arising?
What GROMACS version are you using?
A diff against the code with a few lines of context is much easier for us to understand, if we need to look at your code :-)
I think I know what the problem is, but you haven't given enough information for me to be sure :-)
Mark
----- Original Message -----
From: Gaurav Goel <gauravgoeluta at gmail.com>
Date: Saturday, May 22, 2010 6:18
Subject: Re: [gmx-developers] reading velocity in gmx_msd.c
To: Discussion list for GROMACS development <gmx-developers at gromacs.org>
> **************Please ignore the previous mail... I accidentally
> pressed enter before completing the mail***************
>
>
> To be able to read velocities in g_msd I decided to do the following:
>
> 1. Add the following lines to src/gmxlib/trxio.c
>
> int read_first_xv(int *status,char *fn,
> real *t,rvec **x, rvec **v,matrix box)
> {
> t_trxframe fr;
>
> read_first_frame(status,fn,&fr,TRX_NEED_X | TRX_NEED_V);
> if (*status >= nxframe) {
> nxframe = *status+1;
> srenew(xframe,nxframe);
> }
> xframe[*status] = fr;
> *t = xframe[*status].time;
> *x = xframe[*status].x;
> *v = xframe[*status].v;
> copy_mat(xframe[*status].box,box);
>
> return xframe[*status].natoms;
> }
>
>
> bool read_next_xv(int status,real *t, int natoms, rvec x[], rvec
> v[], matrix box
> )
> {
> bool bRet;
>
> xframe[status].x = x;
> xframe[status].v = v;
> bRet = read_next_frame(status,&xframe[status]);
> *t = xframe[status].time;
> copy_mat(xframe[status].box,box);
>
> return bRet;
> }
>
> 2. Add the following lines to /include/statutil.h
> extern int read_first_xv(int *status,char *fn,
> real *t,rvec **x, rvec **v,matrix box);
> extern bool read_next_xv(int status,real *t,int natoms,rvec x[],
> rvec v[],matrix
> box);
>
> 3. Make following changes to the gmx_msd.c subroutine:
> /*define the followign pointers*/
> rvec *v[2],*va[2];
>
> /*read x and v with these commands*/
> natoms = read_first_xv(&status,fn,&this->t0,&(x[cur]),&(v[cur]),box);
> while (read_next_xv(status,&t,natoms,x[cur],v[cur],box));
>
> /*repeat the following commands as used for x*/
> snew(v[prev],natoms);
> va[0] = v[0];
> va[1] = v[1];
> srenew(this->v0,this->nrestart);
> snew(this->v0[this->nrestart-1],this-
> >ncoords);
> if (bFirst) {
>
> memcpy(xa[prev],xa[cur],this-
> >ncoords*sizeof(xa[prev][0]));/*error point*/
> memcpy(va[prev],va[cur],this->ncoords*sizeof(va[prev][0]));
> bFirst = False;
> }
>
> Everything compiled all right. However, when I tried to use this new
> utility I get a
> 'segmentation fault' error at
> ***memcpy(va[prev],va[cur],this->ncoords*sizeof(va[prev][0]));****
> Am I not reading the velocities properly? Is my strategy of repeating
> everything that was done for reading positions for velocities (except
> for doing things like remove pbc) not correct?
>
> I will greatly appreciate your help.
>
> Thanks,
> Gaurav
>
> On Tue, May 18, 2010 at 5:16 PM, David van der Spoel
> <spoel at xray.bmc.uu.se> wrote:
> > On 2010-05-18 23.10, Gaurav Goel wrote:
> >>
> >> I am modifying the 'g_msd' utility to be able to calculate
> viscosities>> using the corresponding Einstein relationship
> according to equation
> >> 3.14 in Helfand E., Physical Review, 119, 1, 1960. The
> equation is
> >> similar to the mean-square displacement equation for self-diffusion
> >> coefficient with the position vector 'r_i ' replaced by 'r_ix p_iy'
> >> where p_iy is the particle momenta in y-direction.
> >>
> >> So basically I need to be able to read both position and velocities
> >> from the trajectory. Presently, gmx_msd.c uses 'read_first_x' and
> >> 'read_next_x' to read the coordinates. Can you please comment
> on how I
> >> can modify this code to read the corresponding velocities?
> >>
> >> Any help is greatly appreciated.
> >>
> >> thanks,
> >> Gaurav
> >
> > From include/statutil.h:
> >
> > extern bool read_next_frame(const output_env_t oenv,int
> status,t_trxframe> *fr);
> > /* Reads the next frame which is in accordance with fr->flags.
> > * Returns TRUE when succeeded, FALSE otherwise.
> > */
> >
> > Do also checkout
> > g_tcaf -h
> >
> >
> > --
> > David van der Spoel, Ph.D., Professor of Biology
> > Dept. of Cell & Molec. Biol., Uppsala University.
> > Box 596, 75124 Uppsala, Sweden. Phone: +46184714205.
> > spoel at xray.bmc.uu.se http://folding.bmc.uu.se
> > --
> > gmx-developers mailing list
> > gmx-developers at gromacs.org
> > http://lists.gromacs.org/mailman/listinfo/gmx-developers
> > Please don't post (un)subscribe requests to the list. Use the
> www interface
> > or send it to gmx-developers-request at gromacs.org.
> >
> --
> gmx-developers mailing list
> gmx-developers at gromacs.org
> http://lists.gromacs.org/mailman/listinfo/gmx-developers
> Please don't post (un)subscribe requests to the list. Use the
> www interface or send it to gmx-developers-request at gromacs.org.
More information about the gromacs.org_gmx-developers
mailing list