The functions
(k=1,2) are stored in a 5-dimensional array
FF(k,n,i,j,l) (n=1,MPH), (i=0,MY),
(j=0,MXI), (l=0,MLM). The integral over y
from 0 to
is stored in FINT(k,n,i,j,l).
The integral over the full range
is then
FINT(k,n,MY,j,l)
For integration, the trapezondal rule is used,
which means the function
is approximated by a piecewise linear function.
The sum of FINT(k,n,MY,j,l) over n is stored in
FALL(k,j,l).
For a given initial condition, calculate the parameters
and
and find FALL(*) by 2-dimensional interpolation.
(The asterisk * indicates the appropriate sum over the
initial polarization, i,e.,
FALL(*)=FALL
FALL
).
Then, calculate the total probability P (eq.(131) times the time interval DT):
![]()
Generate a uniform random number
in the interval (0,1).
If
, decide to emit a photon and, otherwise reject.
If rejected, the helicity of the electron should be changed, according to
eq.(12), to
![]()
If accepted, decide how many laser photons to absorb. To do so,
sum up FINT(*,n,MY,j,l) from n=1 to
until
the sum becomes larger than
. Then,
will be the number of photons.
Once
is determined, the photon energy is determined by
![]()
where
is another uniform random number. The left hand side is known
for the mesh point of y (i.e., FINT(k,n,MY,j,l)).
Since we approximate
by a piecewise linear function of y, the left hand side is a
quadratic function between successive y's.
Thus, inverse interpolation with respect to i by solving a
quadratic equation gives the photon energy to be emitted.
The helicities of the final photon and electron are calculated from

for
. This is done by directly calling a Bessel function routine.