flag=-1 is used to indicate that the site has not yet been visited. The values 0, 1, ... NBRNUM encode the environment of the atom at each site.
The binding energy is 2*omega per bond, omega per atom.
static void jump(struct SITE * s, int difEq[], double t)
{
int i;
int last;
double rate;
double sum;
double wght[NBRNUM];
for (i = 0; i < size * size; i++)
site[i].flag = -1;
tryJump(s, difEq, &emin);
for (i = 0; i < NBRNUM; i++)
wght[i] = exp(-(desene + 2. * i * omega) / gascon / t);
last = 0;
for (i = 0; i < size * size; i++)
if (site[i].flag != -1)
{
queue[last].target = s;
queue[last].action = i;
queue[last].rate = wght[site[i].flag];
last++;
}
if (last == 0)
return;
for (i = 1; i < last; i++)
queue[i].rate += queue[i - 1].rate;
sum = queue[last - 1].rate;
level= sum * ran2(0);
for (i = 0; i < last; i++)
if (level <= queue[i].rate)
break;
swapAtm(s, queue[i].action);
}