[gmx-developers] how to write a xtc file in c

Yang Ye leafyoung81-group at yahoo.com
Sat Aug 12 16:19:14 CEST 2006


Hi, Dong sheng

It wasn't the problem of "Append -lgmx to LIBS". The parameters required by GCC are to be spread into different variable to make it clearer.

Your current Makefile doesn't make LDFLAGS work.

Try this

CC=gcc
CFLAGS=-c -Wall -I/hielo/include/gromacs
LDFLAGS=-L/hielo/lib
LIBS=-lgmx -lm

all: xtc

xtc:
	$(CC) $(CFLAGS) ${LDFLAGS} ${LIBS} accessXtc.c -o accessXTC

	

Make sure that under /hield/lib, there is libgmx.o and under 
/hielo/include/gromacs, there are all the .h files.

Yang Ye

Dongsheng Zhang wrote:
> Dear Yang Ye,
>
> Thank you very much for your great help to give me the basic work flow.
> I still have trouble to compile my file accessXtc.c. the following is my
> simple Makefile:
>
>
> CC=gcc
> CFLAGS=-c -Wall -I/hielo/include/gromacs
> LDFLAGS=-L/hielo/lib
> LIBS=-lgmx 
>
> all: xtc
>
> xtc: xtc.o
> 	gcc xtc.o -o a.out
> xtc.o: accessXtc.c
> 	$(CC) $(CFLAGS) $(LIBS)  accessXtc.c -o xtc.o
>
>
> I believe I miss your fourth point "Append -lgmx to LIBS". I don't know
> what -lgmx really means. Where is gmx library?  The make command gives
> me the following error message:
>
> xtc.o(.text+0x1f): In function `main':
> : undefined reference to `open_xtc'
> xtc.o(.text+0x6d): In function `main':
> : undefined reference to `close_xtc'
> xtc.o(.text+0x103): In function `writeXtc':
> : undefined reference to `cos'
> xtc.o(.text+0x117): In function `writeXtc':
> : undefined reference to `sin'
> xtc.o(.text+0x130): In function `writeXtc':
> : undefined reference to `open_xtc'
> xtc.o(.text+0x176): In function `writeXtc':
> : undefined reference to `read_first_xtc'
> xtc.o(.text+0x1db): In function `writeXtc':
> : undefined reference to `read_next_xtc'
> xtc.o(.text+0x20e): In function `writeXtc':
> : undefined reference to `close_xtc'
> xtc.o(.text+0x2e5): In function `writeXtc':
> : undefined reference to `open_xtc'
> xtc.o(.text+0x32b): In function `writeXtc':
> : undefined reference to `read_first_xtc'
> xtc.o(.text+0x390): In function `writeXtc':
> : undefined reference to `read_next_xtc'
> xtc.o(.text+0x3c3): In function `writeXtc':
> : undefined reference to `close_xtc'
> xtc.o(.text+0x4f1): In function `writeXtc':
> : undefined reference to `write_xtc'
> collect2: ld returned 1 exit status
> make: *** [xtc] Error 1
>
>
> Please give me more help.
>
>
> Have a nice weekend!
>
> Dongsheng
>
> On Sat, 2006-08-12 at 09:09 +0800, Yang Ye wrote:
>   
>> 1. Use #include in the C file
>> In Makefile
>> 2. Append -I/gromacs/include to CFLAGS
>> 3. Append -L/gromacs/lib to LDFLAGS
>> 4. Append -lgmx to LIBS
>>
>> Yang Ye
>>
>> Dongsheng Zhang wrote:
>>     
>>> Dear Yang Ye or other gmx developers,
>>>
>>> I have finished writing the code to read and write a xtc file, but I
>>> have trouble to compile it. from the web site:
>>>
>>>  http://www.gromacs.org/documentation/reference/online/xtc.html
>>>
>>> I find:
>>>
>>> To use the library function include "xtcio.h" in your file and link with
>>> -lgmx.$(CPU) 
>>>
>>>
>>> Could you please tell me how to specify the link?
>>>
>>>
>>> Thanks a lot!
>>>
>>> Dongsheng
>>>
>>>
>>> On Thu, 2006-08-10 at 17:39 +0800, Yang Ye wrote:
>>>   
>>>       
>>>> Mark Abraham wrote:
>>>>     
>>>>         
>>>>> Dongsheng Zhang wrote:
>>>>>       
>>>>>           
>>>>>> Dear GMX developers,
>>>>>>
>>>>>> I want to write a xtc file to do rerun to get a special potential
>>>>>> energy. Could you please tell me how to write a xtc file in c from a gro
>>>>>> file (with multiple frames got from a xtc file, without velocity)? Thank
>>>>>> you for your help!
>>>>>>         
>>>>>>             
>>>>> Read the source code - to find the right functions to call look how 
>>>>> trjconv or something does it, then grep the src/*/*.c files for the 
>>>>> function definition.
>>>>>
>>>>> Also http://www.gromacs.org/documentation/reference/online/xtc.html
>>>>>       
>>>>>           
>>>> This document shall help you.
>>>>
>>>> Here is basic workflow:
>>>>
>>>> 1. Open XTC
>>>> int xfile = -1;
>>>> char *xfilename = "out.xtc";
>>>>
>>>> xfile = open_xtc(xfilename, "w");
>>>>
>>>> 2. Close
>>>> if (xfile!=-1) {
>>>>    close_xtc(xfile);
>>>>    xfile = -1;
>>>>    //OK
>>>> } else {
>>>>    //Error
>>>> }
>>>>
>>>> 3. Write XTC
>>>> long step = -1;
>>>> double sim_time = 0.0;
>>>>
>>>> matrix mat;
>>>> int i;
>>>> rvec *x_data;
>>>> double ppos[3];
>>>> int img[3];
>>>> int pnode;
>>>>
>>>> int n_total_particles;
>>>>
>>>> Particle p_data;
>>>>
>>>> if (xfile==-1) {
>>>>   //Error
>>>> }
>>>>
>>>> if (n_total_particles <1) {
>>>>   //Error
>>>> }
>>>>
>>>> mat[0][0] = CONV_UNIT_L(box_l[0]);
>>>> mat[0][1] = 0.0;
>>>> mat[0][2] = 0.0;
>>>> mat[1][0] = 0.0;
>>>> mat[1][1] = CONV_UNIT_L(box_l[1]);
>>>> mat[1][2] = 0.0;
>>>> mat[2][0] = 0.0;
>>>> mat[2][1] = 0.0;
>>>> mat[2][2] = CONV_UNIT_L(box_l[2]);
>>>>
>>>> x_data = (rvec *)malloc(sizeof(rvec)*(n_total_particles+1));
>>>>
>>>> for (i = 0; i < n_total_particles; i++) {
>>>>    x_data[i][0] = X;
>>>>    x_data[i][1] = Y;
>>>>    x_data[i][2] = Z;
>>>> }
>>>>
>>>> write_xtc(xfile, n_total_particles, step, sim_time, mat, x_data, 1000);
>>>> step++;
>>>>
>>>> free(x_data);
>>>>
>>>> return OK;
>>>>
>>>>     
>>>>         
>>>>> Mark
>>>>> _______________________________________________
>>>>> gmx-developers mailing list
>>>>> gmx-developers at gromacs.org
>>>>> http://www.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://www.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://www.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://www.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://www.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