Next: , Previous: Non-bonded Algorithms, Up: Non-bonded Interactions

6.4 Implementation of Non-bonded Interactions

The initialization and list compilation is performed by the subroutine NBONDS. It functions by guessing how much space will be needed to store the close contact list, allocating that space (and space for electrostatic potentials and gradients if necessary) on the heap, and calling the appropriate subroutine to actually compile the nonbonded list. NBONDA, NBONDR, NBONDE, and NBONDF handle ATOM, RESI, EXEL, and EXFL respectively. If sufficient space was not available, 1.5 times as much is allocated and another attempt is made.

ENBOND evaluates the nonbonded energy, calling EEXEL to evaluate the stored electric potentials and fields. Single precision is used for most arithmetic, but the energy and derivative sums are accumulated in double precision.

All of the nonbonded cutoffs and lists are stored on the heap. BNBND is the descriptor array passed through most of the program (in some of the analysis routines an additional array BNBNDC is used for the comparison data structure). BNBND holds heap addresses and LNBND holds the lengths of the elements in the data structure. To actually access the data it is necessary to include inbnd.fcm (an index common block) and specify HEAP(BNBND(xxx)) where xxx is the desired element name in inbnd.fcm. This is arrangement has the advantage of allowing dynamic storage allocation and easy modification of the types of information passed from routine to routine.