blob: f3281a7bf8b48b977d94b531b5d394bc7af6ae46 [file] [log] [blame]
subroutine thom (u,v,w,mySeed)
c***********************************************************************
c selects a scattering angle for a thomson collision and then
c generates new direction cosines.
c***********************************************************************
implicit double precision (a-h,o-z)
integer mySeed(*)
real*8 ranf
external ranf
dimension csn (128)
data(csn(i),i=1,67)/
| 1. d0,.98952871d0,.9789466 d0,.96825135d0,.95744053d0,
x .94651168d0,
| .93546224d0,.92428964d0,.91299119d0,.90156417d0,.89000577d0,
x .87831314d0,
| .86648335d0,.8545134d0, .84240023d0,.83014072d0,.81773168d0,
x .80516986d0,
| .79245197d0,.77957465d0,.76653448d0,.75332801d0,.73995175d0,
x .72640218d0,
| .71267574d0,.69876886d0,.68467798d0,.67039954d0,.65592999d0,
x .64126583d0,
| .62640361d0,.61133997d0,.59607164d0,.58059548d0,.5649085 d0,
x .5490079d0,
| .53289112d0,.51655582d0,.5d0, .48322199d0,.46622053d0,
x .44899477d0,
| .43154441d0,.41386968d0,.39597143d0,.3778512 d0,.35951125d0,
x .34095466d0,
| .32218536d0,.30320817d0,.2840289 d0,.26465437d0,.24509241d0,
x .22535195d0,
| .20544297d0,.18537655d0,.1651648 d0,.14482089d0,.12435893d0,
x .10379394d0,
| .083141761d0,.062418936d0,.041642596d0,.020830322d0,.0d0,
| -.020830322d0,-.041642596d0/
data(csn(i),i=68,128)/
| -.062418936d0,-.083141761d0,-.10379394d0,-.12435893d0,
x -.14482089d0,
| -.1651648d0,-.18537655d0,-.20544297d0,-.22535195d0,
x -.24509241d0,
| -.26465437d0,-.2840289d0,-.30320817d0,-.32218536d0,
x -.34095466d0,-.35951125d0,
| -.3778512d0,-.39597143d0,-.41386968d0,-.43154441d0,
x -.44899477d0,-.46622053d0,
| -.48322199d0,-.5d0,-.51655582d0,-.53289112d0,-.5490079d0,
x -.5649085d0,
| -.58059548d0,-.59607164d0,-.61133997d0,-.62640361d0,
x -.64126583d0,-.65592999d0,
| -.67039954d0,-.68467798d0,-.69876886d0,-.71267574d0,
x -.72640218d0,-.73995175d0,
| -.75332801d0,-.76653448d0,-.77957465d0,-.79245197d0,
x -.80516986d0,-.81773168d0,
| -.83014072d0,-.84240023d0,-.8545134d0,-.86648335d0,
x -.87831314d0,
| -.89000577d0,-.90156417d0,-.91299119d0,
| -.92428964d0,-.93546224d0,
| -.94651168d0,-.95744053d0,-.96825135d0,-.9789466d0,
x -.98952871d0/
index = ranf(mySeed)*128 + 1
sctang = csn (index)
t3 = 6.2831853d0 * ranf(mySeed)
t4 = sqrt(1.0d0 - sctang*sctang)
t5 = sqrt(1.0d0 - w*w)
c--------------------update scattered photon direction
c--------------------(from tid-26607)
temp1 = t4/t5
temp2 = sin (t3)
temp3 = cos (t3)
temp4 = w*temp3
t1 = u
c--------------------new u, v, w
u = u*sctang + temp1*(u*temp4 - v*temp2)
v = v*sctang + temp1*(v*temp4 + t1*temp2)
w = w*sctang - (t4*t5)*temp3
return
end