The rigid docking step of the docking procedure implemented in DOCK6 consists of three substeps, each of which has potential for GPU acceleration: 1. Calculation of the adjacency matrix (see Ewing and Kuntz, 1997) 2. Generation of conformers from this matrix 3. Scoring of conformers The relevant sections of the dock source code may be found in orient.cpp and score.cpp for steps 1/2 and 3, respectively. In particular, you'll need to implement versions of id_all_cliques and generate_orientation (for steps 1 and 2), and versions of get_bump_score and compute_score for step 3. The adjacency matrix step and scoring step are both fairly well suited to GPU acceleration, but the generation of conformers is not. In your implementation, you thus may decide between following the method in DOCK, or using the uniform random matching algorithm described in Ewing (1997), in which case you should generate random matchings of atom coordinates to grid points and evaluate their energies in parallel. In either case, the major objective is to create a large set of possible ligand orientations, and then calculate their number of bumps and energy scores, as quickly as possible. Sample input for the rigid docking step is included in the ligand_sampling_demo/4_dock subdirectory of the DOCK tutorials (in the source tarball). The input file rigid.in includes the locations of a ligand file, sphere file (which contains the set of points for docking the ligand to), and energy/bump grids.