jump()

jump() walks over occupied sites, uses walk() to find the sites that each atom can reach through fast events.

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);
}


Source
Start
Previous
Next
Author Per Stoltze stoltze@fysik.dtu.dk