[gmx-users] memory problem of g_hbond?

Baofu Qiao qiaobf at gmail.com
Mon May 23 11:23:45 CEST 2011

Thanks a lot, Erik!

But could you specify how to build the index of water in certain region, 
say 0<z<2nm? It seems that make_ndx can't do that.

On 05/23/2011 11:05 AM, Erik Marklund wrote:
> Baofu Qiao skrev 2011-05-23 10.47:
>> Hi all,
>> Very recently, I meet a problem when using g_hbond (gromacs 4.5.3 
>> with the bugfixed)
>> *********************************
>> Select a group: Selected 1: 'SOL'
>> Select a group: Selected 1: 'SOL'
>> Calculating hydrogen bonds in SOL (98280 atoms)
>> Found 32760 donors and 32760 acceptors
>> *Segmentation fault*
>> *********************************
>> I check the code of gmx_hbond.c. The problem comes from the function 
>> of "mk_hbmap". However, g_hbond doesn't complain  
>> "gmx_fatal(FARGS,"Could not allocate enough memory for hbmap")' while 
>> giving the "Segmentation fault". My first guess is 1) the function 
>> doesn't work correctly; 2) there is no enough memory for 32760 donors 
>> and 32760 acceptors.
>> What I really want to calculate is the HB correlation function is 
>> some slab structure of thickness of about 3ns, where there is only 
>> ~3000 waters. Can someone give me some suggestions? Thanks a lot!
>> best regards,
>> Baofu Qiao
> That sounds like a memory problem indeed, and it could be outside the 
> control of g_hbond. From the manpages of malloc:
> "By default, Linux follows an  optimistic  memory  allocation  
> strategy. This  means  that  when malloc() returns non-NULL there is 
> no guarantee that the memory really is available. This is a really bad 
> bug."
> g_hbond checks for NULL pointers to decide whether snew() was 
> successful or not. Hence the menetioned bug could be the culprit. That 
> said, the hbmap of your system requires 32760^2 pointers (> 8 Gb on 64 
> bit systems) that in turn points to existence arrays with size that 
> scales with trajectory length. Hence you will easily run out of 
> memory. I suggest that you build the acf for a subset of your system, 
> e.g. 1000 waters. The acf will converge slower, but have the same 
> features. You can do this many times and take an average for better 
> statistics.
> Cheers,

More information about the gromacs.org_gmx-users mailing list