[gmx-users] mdatoms->massA pointer dereferencing
Inon Sharony
InonShar at TAU.ac.IL
Tue Aug 31 09:46:51 CEST 2010
Good morning!
I'm having C trouble with something which should be simple enough:
GROMACS uses a struct called mdatoms which, amongst other things, houses
the atom masses during the simulation. I'm trying to access this data
(an array of the masses of all atoms). I've tried to consult internet
sources and my local tech support team, but it seems the problem is that
I'm misunderstanding the GROMACS programing. Any help would be greatly
appreciated.
As I understand it, there's mdatoms, which is comprised of various stuff
among which is the pointer massA.
From mdatom.c:
line 209: md->massA[i] = mA;
Since md and mdatoms are of the same struct type, I believe
mdatoms->massA is the pointer to the array I'm looking for.
I've tried all these various combinations in the attempt to access the
elements of this array, to no avail...
In md.c:
.
.
.
include <mdatoms.h>
.
.
.
t_mdatoms.h *mdatoms
.
.
.
line 447: ...mdatoms->massT...
.
.
.
if (bFirstStep){
fprintf(trajectory,"%d\n",max_trajectory_atom);
for(trajectory_atom=0;trajectory_atom<max_trajectory_atom;trajectory_atom++){
fprintf(stderr,"%d/n",trajectory_atom);
fprintf(stderr,"%g ",mdatoms->massA[trajectory_atom]); //segmentation
fault ON RUN-TIME
// fprintf(trajectory,"%g ",mdatoms->massA->trajectory_atom); //error:
request for member ‘trajectory_atom’ in something not a structure or
union ON COMPILATION
// fprintf(trajectory,"%g ",mdatoms->massA.trajectory_atom); //error:
request for member ‘trajectory_atom’ in something not a structure or
union ON COMPILATION
// real *atomsmasses = mdatoms->massA;fprintf(trajectory,"%g
",atomsmasses[trajectory_atom]);//segfault on run-time
// fprintf(trajectory,"%g ",mdatoms->tmassA); works, on the other hand,
tmassA being a number rather than pointer or array
The command I issue and the output is:
~$ mdrun_d -quiet -v -pd -nt 1
:-) G R O M A C S (-:
GROup of MAchos and Cynical Suckers
:-) VERSION 4.5-beta4 (-:
Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
Copyright (c) 1991-2000, University of Groningen, The Netherlands.
Copyright (c) 2001-2008, The GROMACS development team,
check out http://www.gromacs.org for more information.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
:-) mdrun_d (double precision) (-:
Back Off! I just backed up md.log to ./#md.log.3#
Getting Loaded...
Reading file topol.tpr, VERSION 4.5-beta2 (double precision)
Note: tpx file_version 71, software version 73
Loaded with Money
Back Off! I just backed up traj.trr to ./#traj.trr.3#
Back Off! I just backed up ener.edr to ./#ener.edr.3#
starting mdrun 'Single Atom of Sulfur Between Two Gold Atoms'
6 steps, 0.0 ps.
0
Segmentation fault
The last two lines mean that the loop is entered ( trajectory_atom gets
value zero ) and as soon as "md->massA[trajectory_atom]" is accessed,
the program crashes. This was the result I got before. I tried accessing
only elements 1 and above (by changing trajectory_atom to
trajectory_atom+1 ) but got the same result.
Thanks!
--
Inon Sharony
ינון שרוני
972-3-6407634
Please consider your environmental responsibility before printing this e-mail.
More information about the gromacs.org_gmx-users
mailing list