[gmx-users] for help about reading xtc file
Xu, Yechuan
y.xu at neu.edu
Thu Aug 15 23:33:36 CEST 2013
Thank you for your reply. after I read the xdrfile.c,
I changed the sentence as
pos=xdr_getpos((XDR*) (xtc->xdr));
like that in the file of xdrfile.c. I also copy the definition
for XDR and xdr_op to my own code.
But I still got the errors:
seekxtc.c:61:33: error: dereferencing pointer to incomplete type
pos=xdr_getpos((XDR *)(xtc->xdr));
^
here are my code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <xdrfile_xtc.h>
enum xdr_op
{
XDR_ENCODE = 0,
XDR_DECODE = 1,
XDR_FREE = 2
};
typedef struct XDR XDR;
struct XDR
{
enum xdr_op x_op;
struct xdr_ops
{
int (*x_getlong) (XDR *__xdrs, int32_t *__lp);
int (*x_putlong) (XDR *__xdrs, int32_t *__lp);
int (*x_getbytes) (XDR *__xdrs, char *__addr, unsigned int __len);
int (*x_putbytes) (XDR *__xdrs, char *__addr, unsigned int __len);
/* two next routines are not 64-bit IO safe - don't use! */
unsigned int (*x_getpostn) (XDR *__xdrs);
int (*x_setpostn) (XDR *__xdrs, unsigned int __pos);
void (*x_destroy) (XDR *__xdrs);
}
*x_ops;
char *x_private;
};
int main(int argc, char *argv[])
{
int i;
int step, read_return, result;
int natoms;
float time,prec=1000.;
matrix box;
rvec *x;
XDRFILE *xtc;
char *fname;
unsigned int pos;
printf("begin, argc=%d\n",argc);
if(argc==2){
fname=argv[1];
}
xtc=xdrfile_open (fname,"r");
read_xtc_natoms (fname,&natoms);
printf("number of atoms: %d\n",natoms);
x = calloc(natoms, sizeof (x[0]));
while(1){
read_return=read_xtc(xtc,natoms,&step,&time,box,x,&prec);
if (read_return!=0) break;
pos=xdr_getpos((XDR *)(xtc->xdr));
printf("%d\n",pos);
}
xdrfile_close (xtc);
}
Thanks,
YC
On Aug 15, 2013, at 3:09 PM, Mark Abraham wrote:
> Right, because a pointer to an XDRFILE is neither a struct nor a union
> :-) Look at how these routines are used, and consult the header files
> for the right types to give them.
>
> Mark
>
> On Thu, Aug 15, 2013 at 7:29 PM, Xu, Yechuan <y.xu at neu.edu> wrote:
>> Hi Everyone,
>>
>> I want to read a certain frame in a xtc file. How can I do that?
>> I see there are xdr_getpos() and xdr_setpos(). How should I use
>> these functions?
>>
>> I tried:
>>
>> XDRFILE *xtc;
>> unsigned int pos;
>>
>> pos=xdr_getpos(xtc.xdr);
>>
>> but I got:
>> error: request for member ‘xdr’ in something not a structure or union
>>
>> Thanks in advance.
>> YC--
>> gmx-users mailing list gmx-users at gromacs.org
>> http://lists.gromacs.org/mailman/listinfo/gmx-users
>> * Please search the archive at http://www.gromacs.org/Support/Mailing_Lists/Search before posting!
>> * Please don't post (un)subscribe requests to the list. Use the
>> www interface or send it to gmx-users-request at gromacs.org.
>> * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
> --
> gmx-users mailing list gmx-users at gromacs.org
> http://lists.gromacs.org/mailman/listinfo/gmx-users
> * Please search the archive at http://www.gromacs.org/Support/Mailing_Lists/Search before posting!
> * Please don't post (un)subscribe requests to the list. Use the
> www interface or send it to gmx-users-request at gromacs.org.
> * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
More information about the gromacs.org_gmx-users
mailing list