As you can see in the previous example and in some of the routines, they might return error, and the application program has to handle these errors to continue calculation.
In particular, if non-zero value is returned by g6calc_lasthalf, it almost always implies an intermittent hardware error. The following code fragment shows the error recovery section of nbody1 with multi-cluster support.
do ic = 1, g6ncluster
if (g6error(ic) .eq. 1) then
write(6,*) 'GRAPE-6 hard error on cluster', ic
do jj = 1, g6ncluster
call g6_reinitialize(jj-1)
call g6_set_ti(jj-1,time)
enddo
do i = nbh+1, n
call g6_set_j_particle(g6jcid(i),g6jcloc(i), i,
$ t0(i), step(i), mharp(i), j2,
$ fdot(1,i), f(1,i), x0dot(1,i), x0(1,i))
enddo
goto 1500
endif
enddo
The idea is just to reset the hardware and send all data again if any error occurred. Since the error is intermittent, on the second try the error would normally vanish. If there is real hardware problem, well, contact your friend with hardware knowledge...